248 lines
6.3 KiB
Bash
Executable File
248 lines
6.3 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 50 ]; then
|
|
# RHEL 5 and up build pies and have audit support
|
|
export CFLAGS="-O2 $F_PIE" LDFLAGS="-pie"
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit"
|
|
PPVARS="${PPVARS}${PPVARS+$space}linux_audit=1.4.0"
|
|
fi
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
configure_opts="$configure_opts
|
|
--prefix=$prefix
|
|
--with-logging=syslog
|
|
--with-logfac=authpriv
|
|
--with-pam
|
|
--with-pam-login
|
|
--enable-zlib=system
|
|
--with-editor=/bin/vi
|
|
--with-env-editor
|
|
--with-ignore-dot
|
|
--with-tty-tickets
|
|
--with-ldap
|
|
--with-selinux
|
|
--with-passprompt=[sudo] password for %p: "
|
|
;;
|
|
sles*)
|
|
prefix=/usr
|
|
if [ $osrelease -ge 10 ]; then
|
|
# SLES 10 and higher build pies
|
|
export CFLAGS="-O2 $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
|
|
case "$osversion" in
|
|
*64*) libexec=lib64;;
|
|
*) libexec=lib;;
|
|
esac
|
|
# Note, must indent with tabs, not spaces due to IFS trickery
|
|
# XXX - SuSE uses secure path but only for env_reset
|
|
configure_opts="$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: "
|
|
|
|
make_opts='docdir=$(datarootdir)/doc/packages/$(PACKAGE_TARNAME)'
|
|
;;
|
|
deb*|ubu*)
|
|
prefix=/usr
|
|
# If Ubuntu, add --enable-admin-flag
|
|
case "$osversion" in
|
|
ubu*)
|
|
configure_opts="${configure_opts}${configure_opts+$tab}--enable-admin-flag${tab}--without-lecture"
|
|
;;
|
|
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="$configure_opts
|
|
--prefix=/usr
|
|
--with-all-insults
|
|
--with-exempt=sudo
|
|
--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"
|
|
;;
|
|
*)
|
|
# For Solaris, add project support and use let configure choose zlib.
|
|
# For all others, use the builtin zlib.
|
|
case "$osversion" in
|
|
sol*) configure_opts="${configure_opts}${configure_opts+$tab}--with-project";;
|
|
*) configure_opts="${configure_opts}${configure_opts+$tab}--enable-zlib=builtin";;
|
|
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="$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"
|
|
;;
|
|
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
|