From 5dd60d56dddeb759395a09d4cf725bcc81cdca85 Mon Sep 17 00:00:00 2001 From: David Levine Date: Sat, 5 May 2012 09:16:49 -0500 Subject: [PATCH] Added SPECS/build-nmh-cygwin. This version isn't ready: it's a renamed download of http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/packaging/templates/generic-build-script?content-type=text/plain&cvsroot=cygwin-apps It's committed in its original form so we can easily view changes to it. --- SPECS/build-nmh-cygwin | 535 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 535 insertions(+) create mode 100755 SPECS/build-nmh-cygwin diff --git a/SPECS/build-nmh-cygwin b/SPECS/build-nmh-cygwin new file mode 100755 index 0000000..2f18d7e --- /dev/null +++ b/SPECS/build-nmh-cygwin @@ -0,0 +1,535 @@ +#!/bin/bash +# +# Generic package build script +# +# $Id: generic-build-script,v 1.47 2006/02/01 14:01:14 igor Exp $ +# +# Package maintainers: if the original source is not distributed as a +# (possibly compressed) tarball, set the value of ${src_orig_pkg_name}, +# and redefine the unpack() helper function appropriately. +# Also, if the Makefile rule to run the test suite is not "check", change +# the definition of ${test_rule} below. + +# find out where the build script is located +tdir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'` +test "x$tdir" = "x$0" && tdir=. +scriptdir=`cd $tdir; pwd` +# find src directory. +# If scriptdir ends in SPECS, then topdir is $scriptdir/.. +# If scriptdir ends in CYGWIN-PATCHES, then topdir is $scriptdir/../.. +# Otherwise, we assume that topdir = scriptdir +topdir1=`echo ${scriptdir} | sed 's%/SPECS$%%'` +topdir2=`echo ${scriptdir} | sed 's%/CYGWIN-PATCHES$%%'` +if [ "x$topdir1" != "x$scriptdir" ] ; then # SPECS + topdir=`cd ${scriptdir}/..; pwd` +else + if [ "x$topdir2" != "x$scriptdir" ] ; then # CYGWIN-PATCHES + topdir=`cd ${scriptdir}/../..; pwd` + else + topdir=`cd ${scriptdir}; pwd` + fi +fi + +tscriptname=`basename $0 .sh` +export PKG=`echo $tscriptname | sed -e 's/\-[^\-]*\-[^\-]*$//'` +export VER=`echo $tscriptname | sed -e "s/${PKG}\-//" -e 's/\-[^\-]*$//'` +export REL=`echo $tscriptname | sed -e "s/${PKG}\-${VER}\-//"` +# BASEPKG refers to the upstream base package +# SHORTPKG refers to the Cygwin package +# Normally, these are identical, but if the Cygwin package name is different +# from the upstream package name, you will want to redefine BASEPKG. +# Example: For Apache 2, BASEPKG=httpd-2.x.xx but SHORTPKG=apache2-2.x.xx +export BASEPKG=${PKG}-${VER} +export SHORTPKG=${PKG}-${VER} +export FULLPKG=${SHORTPKG}-${REL} + +# determine correct decompression option and tarball filename +export src_orig_pkg_name= +if [ -e "${src_orig_pkg_name}" ] ; then + export opt_decomp=? # Make sure tar punts if unpack() is not redefined +elif [ -e ${BASEPKG}.tar.bz2 ] ; then + export opt_decomp=j + export src_orig_pkg_name=${BASEPKG}.tar.bz2 +elif [ -e ${BASEPKG}.tar.gz ] ; then + export opt_decomp=z + export src_orig_pkg_name=${BASEPKG}.tar.gz +elif [ -e ${BASEPKG}.tgz ] ; then + export opt_decomp=z + export src_orig_pkg_name=${BASEPKG}.tgz +elif [ -e ${BASEPKG}.tar ] ; then + export opt_decomp= + export src_orig_pkg_name=${BASEPKG}.tar +else + echo "Cannot find PKG:${PKG} VER:${VER} REL:${REL}. Rename $0 to" + echo "something more appropriate, and try again." + exit 1 +fi + +export src_orig_pkg=${topdir}/${src_orig_pkg_name} + +# determine correct names for generated files +export src_pkg_name=${FULLPKG}-src.tar.bz2 +export src_patch_name=${FULLPKG}.patch +export bin_pkg_name=${FULLPKG}.tar.bz2 +export log_pkg_name=${FULLPKG}-BUILDLOGS.tar.bz2 + +export configurelogname=${FULLPKG}-CONFIGURE.LOG +export makelogname=${FULLPKG}-MAKE.LOG +export checklogname=${FULLPKG}-CHECK.LOG +export installlogname=${FULLPKG}-INSTALL.LOG + +export src_pkg=${topdir}/${src_pkg_name} +export src_patch=${topdir}/${src_patch_name} +export bin_pkg=${topdir}/${bin_pkg_name} +export srcdir=${topdir}/${BASEPKG} +export objdir=${srcdir}/.build +export instdir=${srcdir}/.inst +export srcinstdir=${srcdir}/.sinst +export buildlogdir=${srcdir}/.buildlogs +export configurelogfile=${srcinstdir}/${configurelogname} +export makelogfile=${srcinstdir}/${makelogname} +export checklogfile=${srcinstdir}/${checklogname} +export installlogfile=${srcinstdir}/${installlogname} + +prefix=/usr +sysconfdir=/etc +localstatedir=/var +if [ -z "$MY_CFLAGS" ]; then + MY_CFLAGS="-O2" +fi +if [ -z "$MY_LDFLAGS" ]; then + MY_LDFLAGS= +fi + +export install_docs="\ + ABOUT-NLS \ + ANNOUNCE \ + AUTHORS \ + BUG-REPORTS \ + CHANGES \ + CONTRIBUTORS \ + COPYING \ + COPYRIGHT \ + CREDITS \ + CHANGELOG \ + ChangeLog* \ + FAQ \ + HOW-TO-CONTRIBUTE \ + INSTALL \ + KNOWNBUG \ + LEGAL \ + LICENSE \ + NEWS \ + NOTES \ + PROGLIST \ + README \ + RELEASE_NOTES \ + THANKS \ + TODO \ + USAGE \ +" +export install_docs="`for i in ${install_docs}; do echo $i; done | sort -u`" +export test_rule=check +if [ -z "$SIG" ]; then + export SIG=0 # set to 1 to turn on signing by default +fi +# Sort in POSIX order. +export LC_ALL=C + +# helper functions + +# Provide help. +help() { +cat <...] ... +Options are: + help, --help Print this message + version, --version Print the version message + with_logs, --logs Create logs of remaining steps +Actions are: + prep Unpack and patch into ${srcdir} + mkdirs Make hidden directories needed during build + conf, configure Configure the package (./configure) + reconf Rerun configure + build, make Build the package (make) + check, test Run the testsuite (make ${test_rule}) + clean Remove built files (make clean) + install Install package to staging area (make install) + list List package contents + depend List package dependencies + strip Strip package executables + pkg, package Prepare the binary package ${bin_pkg_name} + mkpatch Prepare the patch file ${src_patch_name} + acceptpatch Copy patch file ${src_patch_name} to ${topdir} + spkg, src-package Prepare the source package ${src_pkg_name} + finish Remove source directory ${srcdir} + checksig Validate GPG signatures (requires gpg) + first Full run for spkg (mkdirs, spkg, finish) + almostall Full run for bin pkg, except for finish + all Full run for bin pkg +EOF +} + +# Provide version of generic-build-script modified to make this script. +version() { + vers=`echo '$Revision: 1.47 $' | sed -e 's/Revision: //' -e 's/ *\\$//g'` + echo "$0 based on generic-build-script $vers" +} + +# Unpacks the original package source archive into ./${BASEPKG}/. +# Change this if the original package was not tarred +# or if it doesn't unpack to a correct directory. +unpack() { + tar xv${opt_decomp}f "$1" +} + +# Make the hidden directories used by this script. +mkdirs() { + (cd ${topdir} && \ + rm -fr ${objdir} ${instdir} ${srcinstdir} && \ + mkdir -p ${objdir} && \ + mkdir -p ${instdir} && \ + mkdir -p ${srcinstdir} ) +} +mkdirs_log() { + (cd ${topdir} && \ + mkdirs "$@" && \ + rm -fr ${buildlogdir} && \ + mkdir -p ${buildlogdir} ) +} + +# Unpack the original tarball, and get everything set up for this script. +prep() { + (cd ${topdir} && \ + unpack ${src_orig_pkg} && \ + cd ${topdir} && \ + if [ -f ${src_patch} ] ; then \ + patch -Z -p0 < ${src_patch} ;\ + fi && \ + mkdirs ) +} +prep_log() { + prep "$@" && \ + mkdirs_log && \ + if [ -f ${topdir}/${log_pkg_name} ] ; then \ + cd ${buildlogdir} && \ + tar xvjf ${topdir}/${log_pkg_name} + fi +} + +# Configure the package. +conf() { + (cd ${objdir} && \ + CFLAGS="${MY_CFLAGS}" LDFLAGS="${MY_LDFLAGS}" \ + ${srcdir}/configure \ + --srcdir=${srcdir} --prefix="${prefix}" \ + --exec-prefix='${prefix}' --sysconfdir="${sysconfdir}" \ + --libdir='${prefix}/lib' --includedir='${prefix}/include' \ + --mandir='${prefix}/share/man' --infodir='${prefix}/share/info' \ + --libexecdir='${sbindir}' --localstatedir="${localstatedir}" \ + --datadir='${prefix}/share' ) +} +conf_log() { + conf "$@" 2>&1 | tee ${configurelogfile} + return ${PIPESTATUS[0]} +} + +# Rerun configure to pick up changes in the environment. +reconf() { + (cd ${topdir} && \ + rm -fr ${objdir} && \ + mkdir -p ${objdir} && \ + conf ) +} +reconf_log() { + reconf "$@" 2>&1 | tee ${configurelogfile} + return ${PIPESTATUS[0]} +} + +# Run make. +build() { + (cd ${objdir} && \ + make CFLAGS="${MY_CFLAGS}" ) +} +build_log() { + build "$@" 2>&1 | tee ${makelogfile} + return ${PIPESTATUS[0]} +} + +# Run the package testsuite. +check() { + (cd ${objdir} && \ + make -k ${test_rule} ) +} +check_log() { + check "$@" 2>&1 | tee ${checklogfile} + return ${PIPESTATUS[0]} +} + +# Remove files created by configure and make. +clean() { + (cd ${objdir} && \ + make clean ) +} + +# Install the package, with DESTDIR set to '.inst'. +install() { + (cd ${objdir} && \ + rm -fr ${instdir}/* && \ + make install DESTDIR=${instdir} && \ + for f in ${prefix}/share/info/dir ${prefix}/info/dir ; do \ + if [ -f ${instdir}${f} ] ; then \ + rm -f ${instdir}${f} ; \ + fi ;\ + done &&\ + for d in ${prefix}/share/doc/${SHORTPKG} ${prefix}/share/doc/Cygwin ; do \ + if [ ! -d ${instdir}${d} ] ; then \ + mkdir -p ${instdir}${d} ;\ + fi ;\ + done &&\ + if [ -d ${instdir}${prefix}/share/info ] ; then \ + find ${instdir}${prefix}/share/info -name "*.info" | xargs -r gzip -q ; \ + fi && \ + if [ -d ${instdir}${prefix}/share/man ] ; then \ + find ${instdir}${prefix}/share/man -name "*.1" -o -name "*.3" -o \ + -name "*.3x" -o -name "*.3pm" -o -name "*.5" -o -name "*.6" -o \ + -name "*.7" -o -name "*.8" | xargs -r gzip -q ; \ + fi && \ + templist="" && \ + for fp in ${install_docs} ; do \ + case "$fp" in \ + */) templist="$templist `find ${srcdir}/$fp -type f`" ;; + *) for f in ${srcdir}/$fp ; do \ + if [ -f $f ] ; then \ + templist="$templist $f"; \ + fi ; \ + done ;; \ + esac ; \ + done && \ + if [ ! "x$templist" = "x" ]; then \ + /usr/bin/install -m 644 $templist \ + ${instdir}${prefix}/share/doc/${SHORTPKG} ; \ + fi && \ + if [ -f ${srcdir}/CYGWIN-PATCHES/${PKG}.README ]; then \ + /usr/bin/install -m 644 ${srcdir}/CYGWIN-PATCHES/${PKG}.README \ + ${instdir}${prefix}/share/doc/Cygwin/${SHORTPKG}.README ; \ + elif [ -f ${srcdir}/CYGWIN-PATCHES/README ] ; then \ + /usr/bin/install -m 644 ${srcdir}/CYGWIN-PATCHES/README \ + ${instdir}${prefix}/share/doc/Cygwin/${SHORTPKG}.README ; \ + fi && \ + if [ -f ${srcdir}/CYGWIN-PATCHES/${PKG}.sh ] ; then \ + if [ ! -d ${instdir}${sysconfdir}/postinstall ]; then \ + mkdir -p ${instdir}${sysconfdir}/postinstall ; \ + fi && \ + /usr/bin/install -m 755 ${srcdir}/CYGWIN-PATCHES/${PKG}.sh \ + ${instdir}${sysconfdir}/postinstall/${PKG}.sh ; \ + elif [ -f ${srcdir}/CYGWIN-PATCHES/postinstall.sh ] ; then \ + if [ ! -d ${instdir}${sysconfdir}/postinstall ]; then \ + mkdir -p ${instdir}${sysconfdir}/postinstall ; \ + fi && \ + /usr/bin/install -m 755 ${srcdir}/CYGWIN-PATCHES/postinstall.sh \ + ${instdir}${sysconfdir}/postinstall/${PKG}.sh ; \ + fi && \ + if [ -f ${srcdir}/CYGWIN-PATCHES/preremove.sh ] ; then \ + if [ ! -d ${instdir}${sysconfdir}/preremove ]; then \ + mkdir -p ${instdir}${sysconfdir}/preremove ; \ + fi && \ + /usr/bin/install -m 755 ${srcdir}/CYGWIN-PATCHES/preremove.sh \ + ${instdir}${sysconfdir}/preremove/${PKG}.sh ; \ + fi && + if [ -f ${srcdir}/CYGWIN-PATCHES/manifest.lst ] ; then + if [ ! -d ${instdir}${sysconfdir}/preremove ]; then + mkdir -p ${instdir}${sysconfdir}/preremove ; + fi && + /usr/bin/install -m 644 ${srcdir}/CYGWIN-PATCHES/manifest.lst \ + ${instdir}${sysconfdir}/preremove/${PKG}-manifest.lst ; + fi ) +} +install_log() { + install "$@" 2>&1 | tee ${installlogfile} + return ${PIPESTATUS[0]} +} + +# Strip all binaries. +strip() { + (cd ${instdir} && \ + find . -name "*.dll" -or -name "*.exe" | xargs -r strip 2>&1 ; \ + true ) +} + +# List all non-hidden files that belong to the package. +list() { + (cd ${instdir} && \ + find . -name "*" ! -type d | sed 's%^\.% %' | sort ; \ + true ) +} + +# List the static .dll dependencies of the package. This does not pick up +# dynamic dependencies (whether or not libtool was used), nor does it pick +# up program dependencies, such as system() depending on /bin/sh. +depend() { + (cd ${instdir} && \ + find ${instdir} -name "*.exe" -o -name "*.dll" | xargs -r cygcheck | \ + sed -ne '/^ [^ ]/ s,\\,/,gp' | sort -bu | \ + xargs -r -n1 cygpath -u | xargs -r cygcheck -f | sed 's%^% %' | sort -u ; \ + true ) +} + +# Build the binary package tarball. +pkg() { + (cd ${instdir} && \ + tar cvjf ${bin_pkg} * ) +} + +# Compare the original tarball against cygwin modifications. +mkpatch() { + (cd ${srcdir} && \ + find . -name "autom4te.cache" | xargs -r rm -rf ; \ + unpack ${src_orig_pkg} && \ + mv ${BASEPKG} ../${BASEPKG}-orig && \ + cd ${topdir} && \ + diff -urN -x '.build' -x '.inst' -x '.sinst' -x '.buildlogs' \ + ${BASEPKG}-orig ${BASEPKG} > \ + ${srcinstdir}/${src_patch_name} ; \ + rm -rf ${BASEPKG}-orig ) +} + +# Note: maintainer-only functionality +acceptpatch() { + cp --backup=numbered ${srcinstdir}/${src_patch_name} ${topdir} +} + +# Build the source tarball. +spkg() { + (mkpatch && \ + if [ "${SIG}" -eq 1 ] ; then \ + name=${srcinstdir}/${src_patch_name} text="PATCH" sigfile ; \ + fi && \ + cp ${src_orig_pkg} ${srcinstdir}/${src_orig_pkg_name} && \ + if [ -e ${src_orig_pkg}.sig ] ; then \ + cp ${src_orig_pkg}.sig ${srcinstdir}/ ; \ + fi && \ + cp $0 ${srcinstdir}/`basename $0` && \ + name=$0 text="SCRIPT" sigfile && \ + if [ "${SIG}" -eq 1 ] ; then \ + cp $0.sig ${srcinstdir}/ ; \ + fi && \ + cd ${srcinstdir} && \ + tar cvjf ${src_pkg} * ) +} +spkg_log() { + spkg "$@" && \ + (cd ${srcinstdir} && \ + if [ -e ${configurelogname} -o -e ${makelogname} -o \ + -e ${checklogname} -o -e ${installlogname} ]; then + tar --ignore-failed-read -cvjf ${log_pkg_name} \ + ${configurelogname} ${makelogname} ${checklogname} ${installlogname} && \ + rm -f \ + ${configurelogname} ${makelogname} ${checklogname} ${installlogname} ; \ + fi && \ + tar uvjf ${src_pkg} * ) +} + +# Clean up everything. +finish() { + rm -rf ${srcdir} +} + +# Generate GPG signatures. +sigfile() { + if [ \( "${SIG}" -eq 1 \) -a \( -e $name \) -a \( \( ! -e $name.sig \) -o \( $name -nt $name.sig \) \) ]; then \ + if [ -x /usr/bin/gpg ]; then \ + echo "$text signature need to be updated"; \ + rm -f $name.sig; \ + /usr/bin/gpg --detach-sign $name; \ + else \ + echo "You need the gnupg package installed in order to make signatures."; \ + fi; \ + fi +} + +# Validate GPG signatures. +checksig() { + if [ -x /usr/bin/gpg ]; then \ + if [ -e ${src_orig_pkg}.sig ]; then \ + echo "ORIGINAL PACKAGE signature follows:"; \ + /usr/bin/gpg --verify ${src_orig_pkg}.sig ${src_orig_pkg}; \ + else \ + echo "ORIGINAL PACKAGE signature missing."; \ + fi; \ + if [ -e $0.sig ]; then \ + echo "SCRIPT signature follows:"; \ + /usr/bin/gpg --verify $0.sig $0; \ + else \ + echo "SCRIPT signature missing."; \ + fi; \ + if [ -e ${src_patch}.sig ]; then \ + echo "PATCH signature follows:"; \ + /usr/bin/gpg --verify ${src_patch}.sig ${src_patch}; \ + else \ + echo "PATCH signature missing."; \ + fi; \ + else + echo "You need the gnupg package installed in order to check signatures." ; \ + fi +} + +f_mkdirs=mkdirs +f_prep=prep +f_conf=conf +f_reconf=conf +f_build=build +f_check=check +f_install=install +f_spkg=spkg + +enablelogging() { + f_mkdirs=mkdirs_log && \ + f_prep=prep_log && \ + f_conf=conf_log && \ + f_reconf=reconf_log && \ + f_build=build_log && \ + f_check=check_log && \ + f_install=install_log && \ + f_spkg=spkg_log +} + +while test -n "$1" ; do + case $1 in + help|--help) help ; STATUS=$? ;; + version|--version) version ; STATUS=$? ;; + with_logs|--logs) enablelogging ; STATUS=$? ;; + prep) $f_prep ; STATUS=$? ;; + mkdirs) $f_mkdirs ; STATUS=$? ;; + conf) $f_conf ; STATUS=$? ;; + configure) $f_conf ; STATUS=$? ;; + reconf) $f_reconf ; STATUS=$? ;; + build) $f_build ; STATUS=$? ;; + make) $f_build ; STATUS=$? ;; + check) $f_check ; STATUS=$? ;; + test) $f_check ; STATUS=$? ;; + clean) $f_clean ; STATUS=$? ;; + install) $f_install ; STATUS=$? ;; + list) list ; STATUS=$? ;; + depend) depend ; STATUS=$? ;; + strip) strip ; STATUS=$? ;; + package) pkg ; STATUS=$? ;; + pkg) pkg ; STATUS=$? ;; + mkpatch) mkpatch ; STATUS=$? ;; + acceptpatch) acceptpatch ; STATUS=$? ;; + src-package) $f_spkg ; STATUS=$? ;; + spkg) $f_spkg ; STATUS=$? ;; + finish) finish ; STATUS=$? ;; + checksig) checksig ; STATUS=$? ;; + first) $f_mkdirs && $f_spkg && finish ; STATUS=$? ;; + almostall) checksig && $f_prep && $f_conf && $f_build && \ + $f_install && strip && pkg && $f_spkg ; STATUS=$? ;; + all) checksig && $f_prep && $f_conf && $f_build && \ + $f_install && strip && pkg && $f_spkg && finish ; \ + STATUS=$? ;; + *) echo "Error: bad arguments" ; exit 1 ;; + esac + ( exit ${STATUS} ) || exit ${STATUS} + shift +done -- 1.7.10.4