
which can be used to compress the installed manual pages. Compress the man pages for .deb files to appease lintian.
293 lines
7.8 KiB
Bash
Executable File
293 lines
7.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Build a binary package using polypkg
|
|
# Usage: mkpkg [--debug] [--flavor flavor] [--platform platform] [--osversion ver]
|
|
#
|
|
|
|
# Make sure IFS is set to space, tab, newline in that order.
|
|
space=' '
|
|
tab=' '
|
|
nl='
|
|
'
|
|
IFS=" $nl"
|
|
|
|
# Parse arguments
|
|
usage="usage: mkpkg [--debug] [--flavor flavor] [--platform platform] [--osversion ver]"
|
|
debug=0
|
|
flavor=vanilla
|
|
crossbuild=false
|
|
while test $# -gt 0; do
|
|
case "$1" in
|
|
--debug)
|
|
set -x
|
|
debug=1
|
|
PPFLAGS="--debug${PPFLAGS+$space}${PPFLAGS}"
|
|
;;
|
|
--flavor=?*)
|
|
flavor=`echo "$1" | sed -n 's/^--flavor=\(.*\)/\1/p'`
|
|
PPVARS="${PPVARS}${PPVARS+$space}flavor=$flavor"
|
|
;;
|
|
--flavor)
|
|
if [ $# -lt 2 ]; then
|
|
echo "$usage" 1>&2
|
|
exit 1
|
|
fi
|
|
flavor="$2"
|
|
PPVARS="${PPVARS}${PPVARS+$space}flavor=$flavor"
|
|
shift
|
|
;;
|
|
--platform=?*)
|
|
arg=`echo "$1" | sed -n 's/^--platform=\(.*\)/\1/p'`
|
|
PPFLAGS="${PPFLAGS}${PPFLAGS+$space}--platform $arg"
|
|
;;
|
|
--platform)
|
|
if [ $# -lt 2 ]; then
|
|
echo "$usage" 1>&2
|
|
exit 1
|
|
fi
|
|
PPFLAGS="${PPFLAGS}${PPFLAGS+$space}--platform $2"
|
|
shift
|
|
;;
|
|
--osversion=?*)
|
|
arg=`echo "$1" | sed -n 's/^--osversion=\(.*\)/\1/p'`
|
|
osversion="$arg"
|
|
;;
|
|
--osversion)
|
|
if [ $# -lt 2 ]; then
|
|
echo "$usage" 1>&2
|
|
exit 1
|
|
fi
|
|
osversion="$2"
|
|
shift
|
|
;;
|
|
--build|--host)
|
|
crossbuild=true
|
|
configure_opts="${configure_opts}${configure_opts+$tab}$1"
|
|
;;
|
|
*)
|
|
# Pass unknown options to configure
|
|
configure_opts="${configure_opts}${configure_opts+$tab}$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
top_srcdir=`dirname $0`
|
|
|
|
: ${osversion="`$top_srcdir/pp --probe`"}
|
|
test -n "$osversion" || exit 1
|
|
osrelease=`echo "$osversion" | sed -e 's/^[^0-9]*//' -e 's/-.*$//'`
|
|
|
|
# Default paths
|
|
prefix=/usr/local
|
|
|
|
# Linux distros may build binaries as pie files.
|
|
# This is really something libtool should figure out, but it does not.
|
|
case "$osversion" in
|
|
*-s390*|*-sparc*|*-alpha*)
|
|
F_PIE=-fPIE
|
|
;;
|
|
*)
|
|
F_PIE=-fpie
|
|
;;
|
|
esac
|
|
|
|
# Choose compiler options by osversion if not cross-compiling.
|
|
if [ "$crossbuild" = "false" ]; then
|
|
case "$osversion" in
|
|
hpux*)
|
|
# Use the HP ANSI C compiler on HP-UX if possible
|
|
if [ -z "$CC" -a -x /opt/ansic/bin/cc ]; then
|
|
CC=/opt/ansic/bin/cc; export CC
|
|
if [ -z "$CFLAGS" ]; then
|
|
CFLAGS=-O; export CFLAGS
|
|
fi
|
|
fi
|
|
;;
|
|
sol[0-9]*)
|
|
# Use the Sun Studio C compiler on Solaris if possible
|
|
if [ -z "$CC" -a -x /usr/bin/cc ]; then
|
|
CC=/usr/bin/cc; export CC
|
|
if [ -z "$CFLAGS" ]; then
|
|
CFLAGS=-O; export CFLAGS
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Choose configure options by osversion.
|
|
# We use the same configure options as vendor packages when possible.
|
|
case "$osversion" in
|
|
centos*|rhel*)
|
|
prefix=/usr
|
|
if [ $osrelease -ge 40 ]; then
|
|
# RHEL 4 and up support SELinux
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux"
|
|
fi
|
|
if [ $osrelease -ge 50 ]; then
|
|
# RHEL 5 and up build pies, have audit support and use a
|
|
# separate PAM config file for "sudo -i".
|
|
export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit"
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-pam-login"
|
|
PPVARS="${PPVARS}${PPVARS+$space}linux_audit=1.4.0"
|
|
fi
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
configure_opts="--prefix=$prefix
|
|
--with-logging=syslog
|
|
--with-logfac=authpriv
|
|
--with-pam
|
|
--enable-zlib=system
|
|
--with-editor=/bin/vi
|
|
--with-env-editor
|
|
--with-ignore-dot
|
|
--with-tty-tickets
|
|
--with-ldap
|
|
--with-passprompt=[sudo] password for %p:
|
|
$configure_opts"
|
|
;;
|
|
sles*)
|
|
prefix=/usr
|
|
if [ $osrelease -ge 10 ]; then
|
|
# SLES 10 and higher build pies
|
|
export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
|
|
if [ $osrelease -ge 11 ]; then
|
|
# SLES 11 and higher has SELinux
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux"
|
|
fi
|
|
fi
|
|
# SuSE doesn't have /usr/libexec
|
|
libexec=lib
|
|
case "$osversion" in
|
|
*64*) gcc -v 2>&1 | grep "with-cpu=[^ ]*32" >/dev/null || libexec=lib64
|
|
;;
|
|
esac
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
# XXX - SuSE uses secure path but only for env_reset
|
|
configure_opts="--prefix=$prefix
|
|
--libexecdir=$prefix/$libexec/sudo
|
|
--with-logging=syslog
|
|
--with-logfac=auth
|
|
--with-all-insults
|
|
--with-ignore-dot
|
|
--with-tty-tickets
|
|
--enable-shell-sets-home
|
|
--with-sudoers-mode=0440
|
|
--with-pam
|
|
--enable-zlib=system
|
|
--with-ldap
|
|
--with-env-editor
|
|
--with-passprompt=%p\'s password:
|
|
$configure_opts"
|
|
|
|
make_opts='docdir=$(datarootdir)/doc/packages/$(PACKAGE_TARNAME)'
|
|
;;
|
|
deb*|ubu*)
|
|
prefix=/usr
|
|
# Man pages should be compressed in .deb files
|
|
export MANCOMPRESS='gzip -9'
|
|
export MANCOMPRESSEXT='.gz'
|
|
# If Ubuntu, add --enable-admin-flag
|
|
case "$osversion" in
|
|
ubu*)
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--enable-admin-flag${tab}--without-lecture"
|
|
if [ $osrelease -ge 1004 ]; then
|
|
export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
|
|
fi
|
|
;;
|
|
deb*)
|
|
if [ $osrelease -ge 600 ]; then
|
|
export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
|
|
fi
|
|
;;
|
|
esac
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
if test "$flavor" = "ldap"; then
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap
|
|
--with-ldap-conf-file=/etc/sudo-ldap.conf"
|
|
fi
|
|
configure_opts="--prefix=/usr
|
|
--with-all-insults
|
|
--with-pam
|
|
--enable-zlib=system
|
|
--with-fqdn
|
|
--with-logging=syslog
|
|
--with-logfac=authpriv
|
|
--with-env-editor
|
|
--with-editor=/usr/bin/editor
|
|
--with-timeout=15
|
|
--with-password-timeout=0
|
|
--with-passprompt=[sudo] password for %p:
|
|
--with-timedir=/var/lib/sudo
|
|
--disable-root-mailer
|
|
--disable-setresuid
|
|
--with-sendmail=/usr/sbin/sendmail
|
|
--mandir=/usr/share/man
|
|
--libexecdir=/usr/lib/sudo
|
|
--with-secure-path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
|
|
$configure_opts"
|
|
;;
|
|
macos*)
|
|
case "$osversion" in
|
|
*i386|*x86_64)
|
|
# Build intel-only universal binaries
|
|
ARCH_FLAGS="-arch i386 -arch x86_64"
|
|
;;
|
|
esac
|
|
if test "${osversion}" != "`$top_srcdir/pp --probe`"; then
|
|
sdkvers=`echo "${osversion}" | sed 's/^macos\([0-9][0-9]\)\([0-9]*\)-.*$/\1.\2/'`
|
|
SDK_FLAGS="-isysroot /Developer/SDKs/MacOSX${sdkvers}.sdk -mmacosx-version-min=${sdkvers}"
|
|
fi
|
|
export CFLAGS="-O2 -g $ARCH_FLAGS $SDK_FLAGS"
|
|
export LDFLAGS="$ARCH_FLAGS $SDK_FLAGS"
|
|
if [ $osrelease -ge 105 ]; then
|
|
CFLAGS="$CFLAGS $F_PIE"
|
|
LDFLAGS="$LDFLAGS -Wl,-pie"
|
|
fi
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
configure_opts="--prefix=$prefix
|
|
--with-pam
|
|
--without-tty-tickets
|
|
--enable-zlib=system
|
|
--with-ldap
|
|
--with-insults=disabled
|
|
--with-logging=syslog
|
|
--with-logfac=authpriv
|
|
--with-editor=/usr/bin/vim
|
|
--with-env-editor
|
|
$configure_opts"
|
|
;;
|
|
*)
|
|
# For Solaris, add project support and use let configure choose zlib.
|
|
# For all others, use the builtin zlib and disable NLS support.
|
|
case "$osversion" in
|
|
sol*) configure_opts="${configure_opts}${configure_opts+$tab}--with-project";;
|
|
*) configure_opts="${configure_opts}${configure_opts+$tab}--enable-zlib=builtin${tab}--disable-nls";;
|
|
esac
|
|
if test "$flavor" = "ldap"; then
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap"
|
|
fi
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
configure_opts="--prefix=$prefix
|
|
--with-insults=disabled
|
|
--with-logging=syslog
|
|
--with-logfac=auth
|
|
--with-editor=/usr/bin/vim:/usr/bin/vi:/bin/vi
|
|
--with-env-editor
|
|
$configure_opts"
|
|
;;
|
|
esac
|
|
|
|
# Remove spaces from IFS when setting $@ so that passprompt may include them
|
|
OIFS="$IFS"
|
|
IFS=" $nl"
|
|
set -- $configure_opts $extra_opts
|
|
IFS="$OIFS"
|
|
if [ -r Makefile ]; then
|
|
make $make_opts distclean
|
|
fi
|
|
$top_srcdir/configure "$@" || exit 1
|
|
make $make_opts && make $make_opts PPFLAGS="$PPFLAGS" PPVARS="$PPVARS" package
|
|
test $debug -eq 0 && rm -rf destdir
|