1#!/bin/sh 2# 3# Shell script to create a MacOS X package of the library. 4# The package will hold an end-user version of Allegro, 5# installing just the system wide library framework. 6# The created package is compatible with MacOS X 10.2 and newer. 7# 8# Thanks to macosxhints.com for the hint! 9# 10# Usage: mkpkg <allegro_dir> 11# 12# Will create a package in the current directory; allegro_dir 13# must be a valid Allegro directory structure, holding the 14# previously compiled MacOS X dynamic library. 15# 16 17if [ ! $# -eq 1 ]; then 18 echo "Usage: mkpkg.sh <allegro_dir>" 19 exit 1 20fi 21 22 23echo "Checking version number" 24 version=$(sed -n -e 's/shared_version = //p' $1/makefile.ver) 25 major_minor_version=$(sed -n -e 's/shared_major_minor = //p' $1/makefile.ver) 26 27libname=$1/lib/macosx/liballeg-${version}.dylib 28 29if [ ! -f $libname ]; then 30 echo "Cannot find valid dynamic library archive" 31 exit 1 32fi 33 34 35if [ -d dstroot ]; then 36 rm -fr dstroot 37fi 38 39basename=allegro-enduser-${version} 40 41 42########################### 43# Prepare package structure 44########################### 45 46echo "Setting up package structure" 47 48framework=dstroot/Library/Frameworks/Allegro.framework 49mkdir -p $framework 50mkdir -p ${framework}/Versions/${version}/Resources 51cp $libname ${framework}/Versions/${version}/allegro 52(cd $framework && { 53 (cd Versions; ln -s $version Current) 54 ln -s Versions/Current/Resources Resources 55 ln -s Versions/Current/allegro allegro 56}) 57 58infofile=${framework}/Resources/Info.plist 59cat > $infofile << EOF 60<?xml version="1.0" encoding="UTF-8"?> 61<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 62<plist version="1.0"> 63<dict> 64 <key>CFBundleIdentifier</key> 65 <string>com.allegro.lib</string> 66 <key>CFBundleName</key> 67 <string>allegro</string> 68 <key>CFBundleShortVersionString</key> 69 <string>Allegro ${version}</string> 70</dict> 71</plist> 72EOF 73 74 75################## 76# Make the package 77################## 78 79echo "Creating package" 80 81packagefile=${basename}.pkg 82if [ -d $packagefile ]; then rm -fr $packagefile; fi 83mkdir -p -m 0755 ${packagefile}/Contents/Resources 84 85echo pmkrpkg1 > ${packagefile}/Contents/PkgInfo 86 87infofile=${packagefile}/Contents/Info.plist 88cat > $infofile << EOF 89<?xml version="1.0" encoding="UTF-8"?> 90<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 91<plist version="1.0"> 92<dict> 93 <key>CFBundleGetInfoString</key> 94 <string>Allegro $version (EndUser)</string> 95 <key>CFBundleName</key> 96 <string>Allegro $version (EndUser)</string> 97 <key>CFBundleShortVersionString</key> 98 <string>${version}</string> 99 <key>IFMajorVersion</key> 100 <integer>0</integer> 101 <key>IFMinorVersion</key> 102 <integer>0</integer> 103 <key>IFPkgFlagAllowBackRev</key> 104 <false/> 105 <key>IFPkgFlagAuthorizationAction</key> 106 <string>RootAuthorization</string> 107 <key>IFPkgFlagDefaultLocation</key> 108 <string>/</string> 109 <key>IFPkgFlagInstallFat</key> 110 <false/> 111 <key>IFPkgFlagIsRequired</key> 112 <false/> 113 <key>IFPkgFlagRelocatable</key> 114 <false/> 115 <key>IFPkgFlagRestartAction</key> 116 <string>NoRestart</string> 117 <key>IFPkgFlagRootVolumeOnly</key> 118 <true/> 119 <key>IFPkgFlagUpdateInstalledLanguages</key> 120 <false/> 121 <key>IFPkgFormatVersion</key> 122 <real>0.10000000149011612</real> 123</dict> 124</plist> 125EOF 126 127descfile=${packagefile}/Contents/Resources/Description.plist 128cat > $descfile << EOF 129<?xml version="1.0" encoding="UTF-8"?> 130<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 131<plist version="1.0"> 132<dict> 133 <key>IFPkgDescriptionDeleteWarning</key> 134 <string></string> 135 <key>IFPkgDescriptionDescription</key> 136 <string>Allegro $version end user package</string> 137 <key>IFPkgDescriptionTitle</key> 138 <string>Allegro $version (EndUser)</string> 139 <key>IFPkgDescriptionVersion</key> 140 <string>${version}</string> 141</dict> 142</plist> 143EOF 144 145gcc -o _makedoc $1/docs/src/makedoc/*.c 146./_makedoc -rtf ${packagefile}/Contents/Resources/ReadMe.rtf $1/misc/pkgreadme._tx 147 148bomfile=${packagefile}/Contents/Archive.bom 149mkbom dstroot $bomfile 150 151paxfile=${packagefile}/Contents/Archive.pax.gz 152(cd dstroot && pax -x cpio -w -z . > ../${paxfile}) 153 154postflight=${packagefile}/Contents/Resources/postflight 155cat > $postflight << EOF 156#!/bin/sh 157mkdir -p /usr/local/lib 158if [ -f /usr/local/lib/liballeg-${version}.dylib ]; then 159 rm -f /usr/local/lib/liballeg-${version}.dylib 160fi 161if [ -f /usr/local/lib/liballeg-${major_minor_version}.dylib ]; then 162 rm -f /usr/local/lib/liballeg-${major_minor_version}.dylib 163fi 164if [ -f /usr/local/lib/liballeg-4.dylib ]; then 165 rm -f /usr/local/lib/liballeg-4.dylib 166fi 167if [ -f /usr/local/lib/liballeg.dylib ]; then 168 rm -f /usr/local/lib/liballeg.dylib 169fi 170ln -s /Library/Frameworks/Allegro.framework/Versions/${version}/Allegro /usr/local/lib/liballeg-${version}.dylib 171ln -s /Library/Frameworks/Allegro.framework/Versions/${version}/Allegro /usr/local/lib/liballeg-${major_minor_version}.dylib 172ln -s /Library/Frameworks/Allegro.framework/Versions/${version}/Allegro /usr/local/lib/liballeg-4.dylib 173ln -s /Library/Frameworks/Allegro.framework/Versions/${version}/Allegro /usr/local/lib/liballeg.dylib 174 175EOF 176chmod a+x $postflight 177 178sizesfile=${packagefile}/Contents/Resources/Archive.sizes 179numfiles=`lsbom -s $bomfile | wc -l` 180size=`du -k dstroot | tail -n 1 | awk '{ print $1;}'` 181zippedsize=`du -k ${packagefile} | tail -n 1 | awk '{ print $1;}'` 182bomsize=`ls -l $bomfile | awk '{ print $5;}'` 183infosize=`ls -l $infofile | awk '{ print $5;}'` 184((size += (bomsize + infosize))) 185echo NumFiles $numfiles > $sizesfile 186echo InstalledSize $size >> $sizesfile 187echo CompressedSize $zippedsize >> $sizesfile 188 189 190###################### 191# Build the disk image 192###################### 193 194echo "Creating compressed disk image" 195volume=allegro-enduser-${version} 196diskimage=${volume}.dmg 197tempimage=temp.dmg 198mountpoint=temp_volume 199rm -fr $diskimage $tempimage $mountpoint 200hdiutil create $tempimage -megabytes 4 -layout NONE 201drive=`hdid -nomount $tempimage` 202newfs_hfs -v "$volume" $drive 203mkdir $mountpoint 204mount -t hfs $drive $mountpoint 205 206cp -r $packagefile $mountpoint 207./_makedoc -ascii ${mountpoint}/readme.txt $1/misc/pkgreadme._tx 208./_makedoc -ascii ${mountpoint}/CHANGES $1/docs/src/changes._tx 209./_makedoc -part -ascii ${mountpoint}/AUTHORS $1/docs/src/thanks._tx 210./_makedoc -part -ascii ${mountpoint}/THANKS $1/docs/src/thanks._tx 211 212umount $mountpoint 213hdiutil eject $drive 214hdiutil convert -format UDCO $tempimage -o $diskimage 215echo "Compressing image" 216gzip -f -9 $diskimage 217rm -fr $tempimage ${packagefile} dstroot _makedoc $mountpoint 218 219echo "Done!" 220