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