3 # Build a binary package using polypkg
4 # Usage: mkpkg [--debug] [--flavor flavor] [--platform platform] [--osversion ver]
7 # Make sure IFS is set to space, tab, newline in that order.
15 usage="usage: mkpkg [--debug] [--flavor flavor] [--platform platform] [--osversion ver]"
19 while test $# -gt 0; do
24 PPFLAGS="--debug${PPFLAGS+$space}${PPFLAGS}"
27 flavor=`echo "$1" | sed -n 's/^--flavor=\(.*\)/\1/p'`
28 PPVARS="${PPVARS}${PPVARS+$space}flavor=$flavor"
36 PPVARS="${PPVARS}${PPVARS+$space}flavor=$flavor"
40 arg=`echo "$1" | sed -n 's/^--platform=\(.*\)/\1/p'`
41 PPFLAGS="${PPFLAGS}${PPFLAGS+$space}--platform $arg"
48 PPFLAGS="${PPFLAGS}${PPFLAGS+$space}--platform $2"
52 arg=`echo "$1" | sed -n 's/^--osversion=\(.*\)/\1/p'`
65 configure_opts="${configure_opts}${configure_opts+$tab}$1"
68 # Pass unknown options to configure
69 configure_opts="${configure_opts}${configure_opts+$tab}$1"
75 top_srcdir=`dirname $0`
77 : ${osversion="`$top_srcdir/pp --probe`"}
78 test -n "$osversion" || exit 1
79 osrelease=`echo "$osversion" | sed -e 's/^[^0-9]*//' -e 's/-.*$//'`
84 # Linux distros may build binaries as pie files.
85 # This is really something libtool should figure out, but it does not.
87 *-s390*|*-sparc*|*-alpha*)
95 # Choose compiler options by osversion if not cross-compiling.
96 if [ "$crossbuild" = "false" ]; then
99 # Use the HP ANSI C compiler on HP-UX if possible
100 if [ -z "$CC" -a -x /opt/ansic/bin/cc ]; then
101 CC=/opt/ansic/bin/cc; export CC
102 if [ -z "$CFLAGS" ]; then
103 CFLAGS=-O; export CFLAGS
108 # Use the Sun Studio C compiler on Solaris if possible
109 if [ -z "$CC" -a -x /usr/bin/cc ]; then
110 CC=/usr/bin/cc; export CC
111 if [ -z "$CFLAGS" ]; then
112 CFLAGS=-O; export CFLAGS
119 # Choose configure options by osversion.
120 # We use the same configure options as vendor packages when possible.
124 if [ $osrelease -ge 40 ]; then
125 # RHEL 4 and up support SELinux
126 configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux"
128 if [ $osrelease -ge 50 ]; then
129 # RHEL 5 and up build pies, have audit support and use a
130 # separate PAM config file for "sudo -i".
131 export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
132 configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit"
133 configure_opts="${configure_opts}${configure_opts+$tab}--with-pam-login"
134 PPVARS="${PPVARS}${PPVARS+$space}linux_audit=1.4.0"
136 # Note, must indent with tabs, not spaces due to IFS trickery
137 configure_opts="--prefix=$prefix
138 --with-logging=syslog
139 --with-logfac=authpriv
142 --with-editor=/bin/vi
147 --with-passprompt=[sudo] password for %p:
152 if [ $osrelease -ge 10 ]; then
153 # SLES 10 and higher build pies
154 export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
155 if [ $osrelease -ge 11 ]; then
156 # SLES 11 and higher has SELinux
157 configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux"
160 # SuSE doesn't have /usr/libexec
163 *64*) gcc -v 2>&1 | grep "with-cpu=[^ ]*32" >/dev/null || libexec=lib64
166 # Note, must indent with tabs, not spaces due to IFS trickery
167 # XXX - SuSE uses secure path but only for env_reset
168 configure_opts="--prefix=$prefix
169 --libexecdir=$prefix/$libexec/sudo
170 --with-logging=syslog
175 --enable-shell-sets-home
176 --with-sudoers-mode=0440
181 --with-passprompt=%p\'s password:
184 make_opts='docdir=$(datarootdir)/doc/packages/$(PACKAGE_TARNAME)'
188 # If Ubuntu, add --enable-admin-flag
191 configure_opts="${configure_opts}${configure_opts+$tab}--enable-admin-flag${tab}--without-lecture"
192 if [ $osrelease -ge 1004 ]; then
193 export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
197 if [ $osrelease -ge 600 ]; then
198 export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
202 # Note, must indent with tabs, not spaces due to IFS trickery
203 if test "$flavor" = "ldap"; then
204 configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap
205 --with-ldap-conf-file=/etc/sudo-ldap.conf"
207 configure_opts="--prefix=/usr
212 --with-logging=syslog
213 --with-logfac=authpriv
215 --with-editor=/usr/bin/editor
217 --with-password-timeout=0
218 --with-passprompt=[sudo] password for %p:
219 --with-timedir=/var/lib/sudo
220 --disable-root-mailer
222 --with-sendmail=/usr/sbin/sendmail
223 --mandir=/usr/share/man
224 --libexecdir=/usr/lib/sudo
225 --with-secure-path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
231 # Build intel-only universal binaries
232 ARCH_FLAGS="-arch i386 -arch x86_64"
235 if test "${osversion}" != "`$top_srcdir/pp --probe`"; then
236 sdkvers=`echo "${osversion}" | sed 's/^macos\([0-9][0-9]\)\([0-9]*\)-.*$/\1.\2/'`
237 SDK_FLAGS="-isysroot /Developer/SDKs/MacOSX${sdkvers}.sdk -mmacosx-version-min=${sdkvers}"
239 export CFLAGS="-O2 -g $ARCH_FLAGS $SDK_FLAGS"
240 export LDFLAGS="$ARCH_FLAGS $SDK_FLAGS"
241 if [ $osrelease -ge 105 ]; then
242 CFLAGS="$CFLAGS $F_PIE"
243 LDFLAGS="$LDFLAGS -Wl,-pie"
245 # Note, must indent with tabs, not spaces due to IFS trickery
246 configure_opts="--prefix=$prefix
248 --without-tty-tickets
251 --with-insults=disabled
252 --with-logging=syslog
253 --with-logfac=authpriv
254 --with-editor=/usr/bin/vim
259 # For Solaris, add project support and use let configure choose zlib.
260 # For all others, use the builtin zlib and disable NLS support.
262 sol*) configure_opts="${configure_opts}${configure_opts+$tab}--with-project";;
263 *) configure_opts="${configure_opts}${configure_opts+$tab}--enable-zlib=builtin${tab}--disable-nls";;
265 if test "$flavor" = "ldap"; then
266 configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap"
268 # Note, must indent with tabs, not spaces due to IFS trickery
269 configure_opts="--prefix=$prefix
270 --with-insults=disabled
271 --with-logging=syslog
273 --with-editor=/usr/bin/vim:/usr/bin/vi:/bin/vi
279 # Remove spaces from IFS when setting $@ so that passprompt may include them
282 set -- $configure_opts $extra_opts
284 if [ -r Makefile ]; then
285 make $make_opts distclean
287 $top_srcdir/configure "$@" || exit 1
288 make $make_opts && make $make_opts PPFLAGS="$PPFLAGS" PPVARS="$PPVARS" package
289 test $debug -eq 0 && rm -rf destdir