1#!/bin/sh 2#- 3# Copyright (c) 2013-2014 Dag-Erling Sm��rgrav 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 3. The name of the author may not be used to endorse or promote 15# products derived from this software without specific prior written 16# permission. 17# 18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28# SUCH DAMAGE. 29# 30# $OpenPAM: mkpkgng.in 938 2017-04-30 21:34:42Z des $ 31# 32 33# Print an informational message 34info() { 35 echo "mkpkgng: $@" 36} 37 38# Print an error message and exit 39error() { 40 echo "mkpkgng: $@" 1>&2 41 exit 1 42} 43 44# Ask a yes / no question 45yesno() { 46 while :; do 47 echo -n "mkpkgng: $@ (yes/no) " 48 read answer 49 case $answer in 50 [Yy]|[Yy][Ee][Ss]) 51 return 0 52 ;; 53 [Nn]|[Nn][Oo]) 54 return 1 55 ;; 56 esac 57 done 58} 59 60# 61# Locate source and build directory 62# 63srcdir="@abs_top_srcdir@" 64builddir="@abs_top_builddir@" 65cd "$srcdir" 66 67# 68# Determine pkgng version and ABI 69# 70pkgver=$(pkg -v) 71[ -n "$pkgver" ] || error "Unable to determine pkgng version." 72pkgabi=$(pkg config abi) 73[ -n "$pkgabi" ] || error "Unable to determine package ABI." 74 75# 76# Determine package name and version 77# 78package="@PACKAGE@" 79version="@PACKAGE_VERSION@" 80if ! expr "$version" : "[0-9]{1,}$" >/dev/null ; then 81 svnversion="$(svnversion 2>&1)" 82 svnversion=$(expr "$svnversion" : '\([0-9][0-9]*\)[A-Z]\{0,1\}$') 83 if [ -n "$svnversion" ] ; then 84 package="$package-$version" 85 version="r$svnversion" 86 fi 87fi 88 89# 90# Locate GNU make 91# 92if which gmake >/dev/null ; then 93 make=gmake 94else 95 make=make 96fi 97make="$make --no-print-directory --quiet V=0" 98 99# 100# Create temporary directory 101# 102info "Creating the temporary directory." 103tmproot=$(mktemp -d "${TMPDIR:-/tmp}/$package-$version.XXXXXX") 104[ -n "$tmproot" -a -d "$tmproot" ] || \ 105 error "Unable to create the temporary directory." 106trap "exit 1" INT 107trap "info Deleting the temporary directory. ; rm -rf '$tmproot'" EXIT 108set -e 109 110# 111# Install into tmproot 112# 113info "Installing into the temporary directory." 114$make install DESTDIR="$tmproot" 115 116# 117# Compress man pages 118# 119find $tmproot -type d -name 'man[0-9]' | 120while read mandir ; do 121 find $mandir -type f -name '*.[0-9]' | 122 while read manpage ; do 123 gzip "$manpage" 124 done 125 find $mandir -type l -name '*.[0-9]' | 126 while read manlink ; do 127 ln -s "$(readlink $manlink).gz" "$manlink.gz" 128 done 129done 130 131# 132# Generate stub manifest 133# 134info "Generating the stub manifest." 135manifest="$tmproot/+MANIFEST" 136cat >"$manifest" <<EOF 137name: $package 138version: $version 139origin: local/$package 140comment: BSD-licensed PAM implementation 141arch: $pkgabi 142www: @PACKAGE_URL@ 143maintainer: @PACKAGE_BUGREPORT@ 144prefix: @prefix@ 145categories: [ local, security ] 146EOF 147cp "$srcdir/README" "$tmproot/+DESC" 148 149# 150# Generate file list 151# 152info "Generating the file list." 153( 154 echo "files: {" 155 find -s "$tmproot@prefix@" -type f -or -type l | while read file ; do 156 case $file in 157 *.la) 158 continue 159 ;; 160 esac 161 mode=$(stat -f%p "$file" | cut -c 3-) 162 file="${file#$tmproot}" 163 echo " $file: { uname: root, gname: wheel, perm: $mode }" 164 done 165 echo "}" 166)>>"$manifest" 167 168# 169# Create the package 170# 171info "Creating the package." 172pkg create -r "$tmproot" -m "$tmproot" -o "$builddir" 173 174# 175# Done 176# 177info "Package created for $package-$version." 178