| #!/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 |