X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=mkpkg;h=73ade28baf558dd4bcd06f944cc2b2961c7e8a74;hb=2debba1f8a7b02c7cd7f88e3bce34233ca34487c;hp=ae4135681715b832d0c8a481995a134ac14229a1;hpb=d7751e8b58b26f298b57d31ae87386e685eb8c14;p=debian%2Fsudo diff --git a/mkpkg b/mkpkg index ae41356..73ade28 100755 --- a/mkpkg +++ b/mkpkg @@ -1,7 +1,21 @@ #!/bin/sh # +# Copyright (c) 2010-2013 Todd C. Miller +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# # Build a binary package using polypkg -# Usage: mkpkg [--debug] [--flavor flavor] [--platform platform] +# Usage: mkpkg [--debug] [--flavor flavor] [--platform platform] [--osversion ver] # # Make sure IFS is set to space, tab, newline in that order. @@ -12,9 +26,10 @@ nl=' IFS=" $nl" # Parse arguments -usage="usage: mkpkg [--debug] [--flavor flavor] [--platform platform]" +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) @@ -47,6 +62,22 @@ while test $# -gt 0; do 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" @@ -57,84 +88,81 @@ 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 +: ${osversion="`$top_srcdir/pp --probe`"} +test -n "$osversion" || exit 1 +osrelease=`echo "$osversion" | sed -e 's/^[^0-9]*//' -e 's/-.*$//'` -# 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 +# 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 - else - configure_opts="${configure_opts}${configure_opts+$tab}--disable-zlib" - fi - ;; -esac + ;; + 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 platform. +# Choose configure options by osversion. # We use the same configure options as vendor packages when possible. -case "$platform" in +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 and have audit support - export CFLAGS="$F_PIE" LDFLAGS="-pie" + # RHEL 5 and up has audit support and uses a separate PAM + # config file for "sudo -i". 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="$configure_opts - --prefix=$prefix + configure_opts="--prefix=/usr --with-logging=syslog --with-logfac=authpriv --with-pam - --with-pam-login - --enable-zlib + --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: " + --with-passprompt=[sudo] password for %p: + --with-sendmail=/usr/sbin/sendmail + $configure_opts" ;; sles*) - prefix=/usr if [ $osrelease -ge 10 ]; then - # SLES 10 and higher build pies - export CFLAGS="$F_PIE" LDFLAGS="-pie" + # SLES 11 and higher has SELinux 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;; + 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="$configure_opts - --prefix=$prefix - --libexecdir=$prefix/$libexec/sudo + configure_opts="--prefix=/usr + --libexecdir=/usr/$libexec --with-logging=syslog --with-logfac=auth --with-all-insults @@ -143,17 +171,21 @@ case "$platform" in --enable-shell-sets-home --with-sudoers-mode=0440 --with-pam - --enable-zlib + --enable-zlib=system --with-ldap --with-env-editor - --with-passprompt=%p\'s password: " + --with-passprompt=%p\'s password: + --with-sendmail=/usr/sbin/sendmail + $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 "$platform" in + case "$osversion" in ubu*) configure_opts="${configure_opts}${configure_opts+$tab}--enable-admin-flag${tab}--without-lecture" ;; @@ -163,12 +195,11 @@ case "$platform" in configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap --with-ldap-conf-file=/etc/sudo-ldap.conf" fi - configure_opts="$configure_opts - --prefix=/usr + configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux" + configure_opts="--prefix=/usr --with-all-insults - --with-exempt=sudo --with-pam - --enable-zlib + --enable-zlib=system --with-fqdn --with-logging=syslog --with-logfac=authpriv @@ -182,21 +213,71 @@ case "$platform" in --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" + --libexecdir=/usr/lib + --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" + # Note, must indent with tabs, not spaces due to IFS trickery + configure_opts="--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" + ;; + aix*) + # Note, must indent with tabs, not spaces due to IFS trickery + # Note: we include our own zlib instead of relying on the + # AIX freeware version being installed. + configure_opts=" + --prefix=/opt/freeware + --mandir=/opt/freeware/man + --with-insults=disabled + --with-logging=syslog + --with-logfac=auth + --with-editor=/usr/bin/vi + --with-env-editor + --enable-zlib=builtin + --disable-nls + --with-sendmail=/usr/sbin/sendmail + $configure_opts" + PPVARS="${PPVARS}${PPVARS+$space}aix_freeware=true" ;; *) + # 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="$configure_opts - --prefix=$prefix + configure_opts=" --with-insults=disabled --with-logging=syslog --with-logfac=auth --with-editor=/usr/bin/vim:/usr/bin/vi:/bin/vi - --with-env-editor" + --with-env-editor + $configure_opts" ;; esac