Added SPECS/build-nmh-cygwin. This version isn't ready: it's
authorDavid Levine <levinedl@acm.org>
Sat, 5 May 2012 14:16:49 +0000 (09:16 -0500)
committerDavid Levine <levinedl@acm.org>
Sat, 5 May 2012 14:20:48 +0000 (09:20 -0500)
a renamed download of
http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/packaging/templates/generic-build-script?content-type=text/plain&amp;cvsroot=cygwin-apps
It's committed in its original form so we can easily view changes
to it.

SPECS/build-nmh-cygwin [new file with mode: 0755]

diff --git a/SPECS/build-nmh-cygwin b/SPECS/build-nmh-cygwin
new file mode 100755 (executable)
index 0000000..2f18d7e
--- /dev/null
@@ -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 <<EOF
+This is the cygwin packaging script for ${FULLPKG}.
+Usage: $0 [<option>...] <action>...
+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