| #!/bin/sh | |
| # | |
| # Build a binary package using polypkg | |
| # Usage: mkpkg [--debug] [--flavor flavor] [--platform platform] | |
| # | |
| # 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]" | |
| debug=0 | |
| flavor=vanilla | |
| 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 | |
| ;; | |
| *) | |
| # Pass unknown options to configure | |
| configure_opts="${configure_opts}${configure_opts+$tab}$1" | |
| ;; | |
| esac | |
| shift | |
| done | |
| top_srcdir=`dirname $0` | |
| platform=`$top_srcdir/pp --probe` || exit 1 | |
| osrelease=`echo "$platform" | 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 "$platform" in | |
| *-s390*|*-sparc*|*-alpha*) | |
| F_PIE=-fPIE | |
| ;; | |
| *) | |
| F_PIE=-fpie | |
| ;; | |
| esac | |
| # Choose compiler options by platform. | |
| case "$platform" 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 | |
| else | |
| configure_opts="${configure_opts}${configure_opts+$tab}--disable-zlib" | |
| fi | |
| ;; | |
| esac | |
| # Choose configure options by platform. | |
| # We use the same configure options as vendor packages when possible. | |
| case "$platform" in | |
| centos*|rhel*) | |
| prefix=/usr | |
| if [ $osrelease -ge 50 ]; then | |
| # RHEL 5 and up build pies and have audit support | |
| export CFLAGS="$F_PIE" LDFLAGS="-pie" | |
| configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit" | |
| 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 | |
| --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="$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 "$platform" 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 | |
| --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 "$platform" 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 | |
| --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" | |
| ;; | |
| *) | |
| 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 |