summaryrefslogtreecommitdiff
path: root/Makepkgs
diff options
context:
space:
mode:
Diffstat (limited to 'Makepkgs')
-rwxr-xr-xMakepkgs431
1 files changed, 431 insertions, 0 deletions
diff --git a/Makepkgs b/Makepkgs
new file mode 100755
index 0000000..6e913b1
--- /dev/null
+++ b/Makepkgs
@@ -0,0 +1,431 @@
+#!/bin/sh
+#
+# Make whichever packages the system supports
+#
+# Copyright (c) 2012-2014 Red Hat.
+# Copyright (c) 2004 Silicon Graphics, Inc. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+
+topdir=`pwd`
+verbose=false
+nonrpm=unknown
+nondeb=unknown
+
+if [ ! -d .git ]
+then
+ echo "Error: can only be run from within the PCP git repository"
+ exit 1
+fi
+
+if [ ! -f VERSION.pcp ]
+then
+ echo "Error: can only be run from within the PCP source tree"
+ exit 1
+fi
+
+# Find where a GNU tool is hiding, look for this line:
+# "Report bugs to <bug-$gnutool@gnu.org>"
+# or this line:
+# "FreeBSD $gnutool YYYYMMDD"
+# in the $gnutool --help output
+#
+gnu_tool()
+{
+ prefix="$1"
+ shift
+ envvar="$1"
+ shift
+ oldcmd="$1"
+ shift
+
+ # Not in the environment, go search for it in the known locations.
+ #
+ if [ -z "$envvar" ]
+ then
+ for command in $oldcmd $@
+ do
+ exec=`which $command 2>/dev/null`
+ if [ -n "$exec" ]
+ then
+ if $command --help 2>&1 | egrep -q "(bug-$oldcmd@gnu.org)|(FreeBSD $gnutool)"
+ then
+ echo $exec
+ return 0
+ fi
+ fi
+ done
+ echo "$prefix: can't find GNU $oldcmd in the commands $oldcmd or $@"
+ [ $prefix = Error ] && exit 1
+ return 1
+ fi
+
+ # Use the environment request and ensure it is a full path (do not
+ # change this behaviour, it is required for backward-compatibility
+ # - QA failures will result if you choose to ignore this warning).
+ #
+ command=`which $envvar 2>/dev/null`
+ if [ -z "$command" ]
+ then
+ echo "$prefix: $oldcmd (from the environment) does not exist!" >&2
+ [ $prefix = Error ] && exit 1
+ return 1
+ fi
+ echo $command
+ return 0
+}
+
+export MAKE=`gnu_tool Error "$MAKE" make gmake`
+export TAR=`gnu_tool Warning "$TAR" tar gtar gnutar`
+export ZIP=`gnu_tool Error "$ZIP" gzip gnuzip`
+
+# check if tar supports --transform else we must use git-archive later on (e.g. RHEL5)
+[ ! -z "$TAR" ] && $TAR --help | 2>&1 grep -q transform || USE_GIT_ARCHIVE=1
+
+tmp=`mktemp -d /tmp/pcp.XXXXXXXXX` || exit 1
+trap "rm -rf $tmp" 0 1 2 3 15
+
+# Bog-standard options suitable for a package on any platform.
+# Command line can be used to extend this set, and any whacko
+# platform-specific requirements are also appended later on.
+#
+configure=./configure
+configopts="--prefix=/usr --sysconfdir=/etc --localstatedir=/var"
+target=`uname -s | cut -c-5 | tr 'A-Z' 'a-z'`
+
+for opt in $*
+do
+ case "$opt" in
+ -clean|--clean)
+ # we always clean nowadays
+ shift
+ ;;
+ -verbose|--verbose)
+ verbose=true
+ shift
+ ;;
+ --nonrpm)
+ nonrpm=true
+ shift
+ ;;
+ --nondeb)
+ nondeb=true
+ shift
+ ;;
+ --target)
+ shift
+ target=$1
+ shift
+ ;;
+ *)
+ # Add remaining options to the ./configure command line
+ configopts="$configopts $opt"
+ shift
+ ;;
+ esac
+done
+
+if [ "$nonrpm" = "unknown" ]
+then
+ nonrpm=true
+ test -f /usr/bin/rpmbuild && nonrpm=false
+fi
+if [ "$nondeb" = "unknown" ]
+then
+ nondeb=true
+ test -f /usr/bin/dpkg-buildpackage && nondeb=false
+fi
+
+case "$target"
+in
+ mingw)
+ nonrpm=true
+ configure="mingw64-configure"
+ configopts="$configopts --disable-ssp --without-threads"
+ MAKE="mingw64-make"
+ ;;
+ linux)
+ ARCH=`uname -m`
+ [ -f /etc/slackware-version -a "$ARCH" = x86_64 ] && \
+ configopts="$configopts --libdir=/usr/lib64"
+ ;;
+ sunos)
+ ARCH=`isainfo -k`
+ [ "$ARCH" = amd64 -o "$ARCH" = sparcv9 ] && \
+ configopts="$configopts --libdir=/usr/lib/64"
+ ;;
+esac
+
+. ./VERSION.pcp
+VERSION=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
+
+LOGDIR=$topdir/Logs
+rm -rf $LOGDIR
+mkdir -p "$LOGDIR"
+
+source=pcp-${VERSION}
+SRCDIR=$topdir/$source
+SRCTAR=$topdir/build/tar/$source.src.tar.gz
+
+build_failure()
+{
+ # only print in non-verbose mode, otherwise we see double
+ if ! $verbose ; then
+ echo $@ failed, see log in $LOGDIR/pcp
+ tail $LOGDIR/pcp
+ fi
+ exit 1
+}
+
+clean_packaging()
+{
+ echo
+ echo "== Cleaning build tree for packaging build"
+ rm -rf "$SRCDIR" "$SRCTAR" .gitcensus
+}
+
+# Generate a list of all the files git knows about, create the
+# source tarball and then unpack it. We'll then do the package
+# build in a guaranteed pristine environment.
+#
+src_tar_build()
+{
+ if [ -z "$TAR" -o ! -z "$USE_GIT_ARCHIVE" ]
+ then
+ # no suitable GNU tar is available, use git-archive(1) - no local changes
+ git archive --format=tar --prefix=$source/ HEAD | $ZIP > $SRCTAR
+ else
+ # build git file list and make tarball by hand to pick up any changes
+ git ls-files > .gitcensus
+ $TAR -cz --transform="s,^,$source/," --files-from=.gitcensus \
+ --file=$SRCTAR
+ rm .gitcensus
+ fi
+ echo "Wrote: $SRCTAR"
+}
+
+# On sanity checks :- this is sick, but I'm really tired of QA failing
+# because of bad binaries being built from the Debian/Ubuntu toolchain
+# for # i?86 platforms
+# - Ken McDonell Apr 2010
+#
+sanity_check_settings()
+{
+ OPT=false
+ ARCH=`uname -m | sed -e 's/i.86/ia32/'`
+ if [ "$ARCH" != "ia32" ]
+ then
+ OPT=true # no workarounds needed for non-i?86 platforms
+ elif [ -f /etc/lsb-release ]
+ then
+ if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release
+ then
+ eval `grep DISTRIB_RELEASE= /etc/lsb-release`
+ XDISTRIB_RELEASE=`echo $DISTRIB_RELEASE | sed -e 's/[^0-9]//g'`
+ [ -z "$XDISTRIB_RELEASE" ] && XDISTRIB_RELEASE=0000
+ if [ $XDISTRIB_RELEASE -gt 1110 ]
+ then
+ # Hope the problem is fixed after Ubuntu 11.10
+ OPT=true
+ fi
+ fi
+ $OPT || echo "Building without optimization for Ubuntu $DISTRIB_RELEASE"
+ elif [ -f /etc/debian_version ]
+ then
+ DISTRIB_RELEASE=`cat /etc/debian_version`
+ XDISTRIB_RELEASE=`echo $DISTRIB_RELEASE | sed -e 's/[^0-9]//g'`
+ [ -z "$XDISTRIB_RELEASE" ] && XDISTRIB_RELEASE=0000
+ if [ $XDISTRIB_RELEASE -ge 700 ]
+ then
+ # Hope the problem is fixed in Debian 7.0.0
+ OPT=true
+ fi
+ $OPT || echo "Building without optimization for Debian $DISTRIB_RELEASE"
+ fi
+
+ if ! $OPT
+ then
+ ok=true
+ if grep -q '^my $default_flags .*O2' /usr/bin/dpkg-buildpackage
+ then
+ echo 'dpkg-buildpackage: need to remove O2 from $default_flags'
+ ok=false
+ fi
+ if grep -q '^[ ]*LDFLAGS.*-Bsymbolic-functions' /usr/bin/dpkg-buildpackage
+ then
+ echo 'dpkg-buildpackage: need to remove -Bsymbolic-function from LDFLAGS'
+ ok=false
+ fi
+ if ! $ok
+ then
+ echo "Refer to Debian/Ubuntu notes in PCP's ./INSTALL"
+ exit 1
+ fi
+ # as of Debian 6.0.1 and Ubuntu 10.10, build flags are hidden and
+ # extracted using dpkg-buildflags which fortunately honours some
+ # environment variable settings
+ #
+ export DEB_CFLAGS_SET=''
+ export DEB_CXXFLAGS_SET=''
+ export DEB_LDFLAGS_SET=''
+ fi
+}
+
+# Build Debian packages using the dpkg-buildpackage utility which runs
+# the complete build, from configure through to final deb preparation.
+#
+debian_buildpackage()
+{
+ echo
+ echo "== Building deb packages using dpkg-buildpackage"
+
+ SUDO=${SUDO:-fakeroot}
+ rm -f $tmp/failed
+ if $verbose ; then
+ (dpkg-buildpackage -r$SUDO || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ (dpkg-buildpackage -r$SUDO || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure debian buildpackage
+}
+
+prepare_debian_sources()
+{
+ # shortcut for dpkg-buildpackage which does everything itself from here
+ SRCDIR="${topdir}/build/deb"
+ mkdir -p "$SRCDIR" 2>/dev/null
+ cd "$SRCDIR" || exit 1
+ $TAR -zxf "$SRCTAR" || exit 1
+ cd "$SRCDIR/$source" || exit 1
+}
+
+prepare_debian_control()
+{
+ echo
+ echo "== Preparing source tree for dpkg-buildpackage"
+ rm -f $tmp/failed debian/control
+ if $verbose ; then
+ ($MAKE -C debian control 2>&1 || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ ($MAKE -C debian control 2>&1 || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure debian control
+}
+
+debian_build()
+{
+ prepare_debian_sources
+ configure_pcp
+ prepare_debian_control
+ sanity_check_settings
+ debian_buildpackage
+ exit 0
+}
+
+prepare_build()
+{
+ echo
+ echo "== Preparing fresh build tree for packaging build"
+
+ if [ ! -d "$SRCDIR" ]; then
+ # extract gzipped tar archive
+ $TAR -xz --file="$SRCTAR" || exit 1
+ fi
+}
+
+configure_pcp()
+{
+ echo
+ echo "== Configuring pcp, log is in $LOGDIR/pcp ($configopts)"
+
+ rm -f $tmp/failed
+ if $verbose
+ then
+ ($configure $configopts 2>&1 || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ ($configure $configopts 2>&1 || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure Configure
+}
+
+default_build()
+{
+ echo
+ echo "== Building pcp, log is in $LOGDIR/pcp"
+
+ rm -f $tmp/failed
+ if $verbose ; then
+ ($MAKE default_pcp 2>&1 || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ ($MAKE default_pcp 2>&1 || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure Make default_pcp
+}
+
+packaging_pcp()
+{
+ echo
+ echo "== Packaging pcp, log is in $LOGDIR/pcp" | tee -a $LOGDIR/pcp
+
+ rm -f $tmp/failed
+ if $verbose ; then
+ ($MAKE -C build pack_pcp 2>&1 || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ ($MAKE -C build pack_pcp 2>&1 || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure Packaging via pack_pcp
+}
+
+packaging_rpm()
+{
+ echo
+ echo "== Building rpm packages, log is in $LOGDIR/pcp" | tee -a $LOGDIR/pcp
+
+ rm -f $tmp/failed
+ export DIST_ROOT=${topdir}/build/rpm/${source}
+ if $verbose ; then
+ ($MAKE -C build/rpm pack_pcp 2>&1 || touch $tmp/failed) | tee -a $LOGDIR/pcp
+ else
+ ($MAKE -C build/rpm pack_pcp 2>&1 || touch $tmp/failed) >> $LOGDIR/pcp
+ fi
+ [ -f $tmp/failed ] && build_failure Packaging RPMs via pack_pcp
+}
+
+# real build starts here
+clean_packaging
+src_tar_build
+
+# short-circuit for performing builds with dpkg-buildpackage
+$nondeb || debian_build
+
+prepare_build
+
+# shift into the clean packaging build tree from here onward
+cd "$SRCDIR"
+
+configure_pcp
+
+# short-circuit for performing rpm-only builds with rpmbuild
+# (skips over the default_build stage as rpmbuild does that).
+if $nonrpm
+then
+ default_build # perform a complete build in-situ
+ packaging_pcp # create all known package formats
+else
+ packaging_rpm
+fi
+
+# success!
+if ! $verbose ; then
+ grep '^Wrote:' $LOGDIR/pcp | sed -e 's/\.\.\/\.\.\///'
+fi
+exit 0