4 # Copyright (C) 2011 Kyle J. McKay. All rights reserved.
10 while [ -L "$myname" ]; do
12 myname
="$(readlink "$myname")"
13 case "$myname" in /*) :;; *)
14 myname
="$(dirname "$oldname")/$myname"
18 mydir
="$(cd "$
(dirname "$myname")" && pwd -P)"
19 myname
="$(basename "$myname")"
21 # Version 5.2 is the last GPLv2 version of readline
22 # cgdb requires readline version 5.1 or later
23 READLINE
='http://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz'
24 READLINE_MD5
=e39331f32ad14009b9ff49cc10c5e751
26 CGDB
='http://downloads.sourceforge.net/cgdb/cgdb-0.6.6.tar.gz'
27 CGDB_MD5
=394b542b495755ab8392b7e88dace744
29 DMG_NAME
=cgdb-0.6
.6.dmg
34 if ! (tar --strip-path=1 ||
: ) 2>&1 |
grep -qi 'unrecognized option'; then
36 elif ! (tar --strip-components=1 ||
: ) 2>&1 |
grep -qi 'unrecognized option'; then
37 strip1
=--strip-components=1
39 if [ -z "$strip1" ]; then
40 echo "error: Cannot figure out tar option to strip top level path" >&2
44 if xs
="`type -P xcode-select`"; then
45 SDKROOT
="`xcode-select -print-path`"
47 if [ -z "$SDKROOT" ]; then
50 SDK104
="$SDKROOT/SDKs/MacOSX10.4u.sdk"
51 if [ ! -d "$SDK104" -o ! -r "$SDK104/usr/include/AvailabilityMacros.h" ]; then
52 echo "error: No Mac OS X 10.4u SDK found at $SDK104" >&2
56 if ! pm
="`PATH="$SDKROOT/usr
/bin
:$SDKROOT/Tools
" type -P packagemaker`"; then
57 echo "error: Cannot locate packagemaker executable" >&2
59 if ! sf
="`PATH="$SDKROOT/usr
/bin
:$SDKROOT/Tools
" type -P SetFile`"; then
60 echo "error: Cannot locate SetFile executable" >&2
63 if ! fr
="`PATH="$PATH:/usr
/local
/bin
:/opt
/local
/bin
:/sw
/bin
" type -P fakeroot`"; then
64 echo "*** ERROR: missing fakeroot"
66 echo "error: unable to find fakeroot installation" >&2
67 echo "warning: build proceeding, but no installer will be created" >&2
68 echo "info: see http://mackyle.github.com/fakeroot to install fakeroot" >&2
72 # try to trigger the fakeroot bug now if it's an old version
73 "$fr" find "$mydir" -print > /dev
/null
76 AGENT
='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
77 if [ ! -d "$mydir/sources" ]; then
78 mkdir
"$mydir/sources"
81 if [ ! -r "$mydir/sources/readline.tar.gz" ] ||
[ `md5 -q "$mydir/sources/readline.tar.gz"` != $READLINE_MD5 ]; then
82 echo "*** fetching readline sources from $READLINE"
84 rm -f "$mydir/sources/readline.tar.gz"
85 curl
-f -H "User-Agent: $AGENT" -L -o "$mydir/sources/readline.tar.gz" "$READLINE"
87 if [ `md5 -q "$mydir/sources/readline.tar.gz"` != $READLINE_MD5 ]; then
88 echo "error: readline sources md5 mismatch (expected $READLINE_MD5)" >&2
93 if [ ! -r "$mydir/sources/cgdb.tar.gz" ] ||
[ `md5 -q "$mydir/sources/cgdb.tar.gz"` != $CGDB_MD5 ]; then
94 echo "*** fetching cgdb sources from $CGDB"
96 rm -f "$mydir/sources/cgdb.tar.gz"
97 curl
-f -H "User-Agent:" -L -o "$mydir/sources/cgdb.tar.gz" "$CGDB"
99 if [ `md5 -q "$mydir/sources/cgdb.tar.gz"` != $CGDB_MD5 ]; then
100 echo "error: cgdb sources md5 mismatch (expected $CGDB_MD5)" >&2
105 echo "*** expanding sources"
106 rm -rf "$mydir/sources/cgdb" "$mydir/sources/readline"
107 mkdir
"$mydir/sources/cgdb" "$mydir/sources/readline"
108 tar -xzf "$mydir/sources/readline.tar.gz" $strip1 --directory="$mydir/sources/readline"
109 tar -xzf "$mydir/sources/cgdb.tar.gz" $strip1 --directory="$mydir/sources/cgdb"
112 echo "*** applying patches"
113 echo "tokenizer extensions: adding .cp, .m, .M and .mm"
114 patch "$mydir/sources/cgdb/cgdb/tokenizer/src/tokenizer.c" < "$mydir/patches/tokenizer-exts.patch"
115 echo "line listings: only list 1 line (fixes clang problem)"
116 patch -p1 -d "$mydir/sources/cgdb" < "$mydir/patches/cgdb-0.6.6_clang_fix.patch"
119 echo "*** preparing local install area"
120 rm -rf "$mydir/local"
121 mkdir
"$mydir/local" "$mydir/local/include" "$mydir/local/lib" "$mydir/local/bin" "$mydir/local/share"
122 mkdir
"$mydir/local/share/man" "$mydir/local/share/man/man1"
123 (umask 0; ln -s share
/man
"$mydir/local/man")
128 ARCH
="-arch i386 -arch ppc"
129 OSXDK
="-isysroot$SDK104"
130 OSXMN
="-mmacosx-version-min=10.4"
131 CFLAGS
="$ARCH $OSXDK $OSXMN $COPT"
132 LDFLAGS
="-Wl,-search_paths_first,-headerpad_max_install_names"
133 CPATH
="$mydir/local/include"
134 LIBRARY_PATH
="$mydir/local/lib"
142 echo "*** configuring readline"
143 rm -rf "$mydir/sources/readline-build"
144 mkdir
"$mydir/sources/readline-build"
145 (cd "$mydir/sources/readline-build" && ..
/readline
/configure
--enable-static --disable-shared --prefix="$mydir/local")
148 echo "*** building readline"
149 make -w -C "$mydir/sources/readline-build"
152 echo "*** installing readline to local area"
153 make -w -C "$mydir/sources/readline-build" install
156 echo "*** configuring cgdb"
157 rm -rf "$mydir/sources/cgdb-build"
158 mkdir
"$mydir/sources/cgdb-build"
159 (cd "$mydir/sources/cgdb-build" && ..
/cgdb
/configure
--disable-dependency-tracking --with-readline="$mydir/local" --prefix="$mydir/local")
162 echo "*** building cgdb"
163 make -w -C "$mydir/sources/cgdb-build"
166 echo "*** installing cgdb to local area"
167 make -w -C "$mydir/sources/cgdb-build" install
170 if [ -z "$fr" ]; then
171 echo "*** ERROR: missing fakeroot"
173 echo "error: unable to find fakeroot installation" >&2
174 echo "warning: no installer will be created" >&2
175 echo "warning: the completed build is in $mydir/local" >&2
176 echo "info: see http://mackyle.github.com/fakeroot to install fakeroot" >&2
180 echo "*** creating installer image area"
181 if [ -d "$mydir/installer" ]; then
182 chmod -R u
+w
"$mydir/installer"
184 rm -rf "$mydir/installer"
185 mkdir
"$mydir/installer" "$mydir/installer/usrlocal" "$mydir/installer/cgdb"
186 mkdir
"$mydir/installer/usrlocal/bin" "$mydir/installer/usrlocal/share"
187 mkdir
"$mydir/installer/usrlocal/share/man"
188 mkdir
"$mydir/installer/usrlocal/share/man/man1"
189 mkdir
"$mydir/installer/usrlocal/share/info"
190 mkdir
"$mydir/installer/usrlocal/share/cgdb"
191 cat "$mydir/local/bin/cgdb" > "$mydir/installer/usrlocal/bin/cgdb"
192 cat "$mydir/local/share/man/man1/cgdb.1" > "$mydir/installer/usrlocal/share/man/man1/cgdb.1"
193 cat "$mydir/local/share/info/cgdb.info" > "$mydir/installer/usrlocal/share/info/cgdb.info"
194 cat "$mydir/local/share/cgdb/cgdb.txt" > "$mydir/installer/usrlocal/share/cgdb/cgdb.txt"
195 find "$mydir/installer/usrlocal" ! -type d
-print0 |
xargs -0 chmod 444
196 chmod 555 "$mydir/installer/usrlocal/bin/cgdb"
197 find "$mydir/installer/usrlocal" -type d
-print0 |
xargs -0 chmod 755
199 stamp
="`perl -e '@x=localtime(86400*int($ARGV[0]/86400));printf("%04d
%02d
%02d
%02d
%02d.
%02d
",$x[5]+1900,$x[4]+1,$x[3],$x[2],$x[1],$x[0])' "$timenow"`"
200 stampsf
="`perl -e '@x=localtime(86400*int($ARGV[0]/86400));printf("%02d
/%02d
/%04d
%02d
:%02d
:%02d
",$x[4]+1,$x[3],$x[5]+1900,$x[2],$x[1],$x[0])' "$timenow"`"
201 find "$mydir/installer/usrlocal" -print0 |
xargs -0n1 "$sf" -d "$stampsf"
202 find "$mydir/installer/usrlocal" -print0 |
xargs -0 touch -t "$stamp"
205 echo "*** preparing installer description files"
206 cat > "$mydir/installer/Description.plist" <<DESCRIPTION
207 <?xml version="1.0" encoding="UTF-8"?>
208 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
209 <plist version="1.0">
211 <key>IFPkgDescriptionDescription</key>
212 <string>cgdb: the curses debugger</string>
213 <key>IFPkgDescriptionTitle</key>
214 <string>cgdb</string>
218 cat > "$mydir/installer/Info.plist" <<INFOPLIST
219 <?xml version="1.0" encoding="UTF-8"?>
220 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
221 <plist version="1.0">
223 <key>CFBundleIdentifier</key>
224 <string>net.sourceforge.cgdb</string>
225 <key>CFBundleGetInfoString</key>
226 <string>cgdb 0.6.6_2</string>
227 <key>CFBundleShortVersionString</key>
228 <string>0.6.6_2</string>
229 <key>CFBundleVersion</key>
230 <string>06.6.2</string>
231 <key>IFMajorVersion</key>
233 <key>IFMinorVersion</key>
235 <key>IFPkgFlagAllowBackRev</key>
237 <key>IFPkgFlagAuthorizationAction</key>
238 <string>RootAuthorization</string>
239 <key>IFPkgFlagDefaultLocation</key>
240 <string>/usr/local</string>
241 <key>IFPkgFlagFollowLinks</key>
243 <key>IFPkgFlagInstallFat</key>
245 <key>IFPkgFlagIsRequired</key>
247 <key>IFPkgFlagOverwritePermissions</key>
249 <key>IFPkgFlagRelocatable</key>
251 <key>IFPkgFlagRestartAction</key>
252 <string>None</string>
253 <key>IFPkgFlagRootVolumeOnly</key>
255 <key>IFPkgFlagUpdateInstalledLanguages</key>
257 <key>IFPkgFormatVersion</key>
258 <real>0.10000000149011612</real>
264 echo "*** creating installer"
265 "$fr" bash
-s <<FAKEROOT
266 chown -R root:wheel "$mydir/installer/usrlocal"
267 "$pm" -build -v -u -p "$mydir/installer/cgdb/cgdb.pkg" -ds -f "$mydir/installer/usrlocal" -i "$mydir/installer/Info.plist" -d "$mydir/installer/Description.plist" -r "$mydir/resources"
268 find "$mydir/installer/cgdb/cgdb.pkg/Contents/Resources" -type d -mindepth 1 -print0 | xargs -0 rm -rf
269 cat "$mydir/installer/Description.plist" > "$mydir/installer/cgdb/cgdb.pkg/Contents/Resources/Description.plist"
270 find "$mydir/installer/cgdb" ! -type d -print0 | xargs -0 chmod 444
271 find "$mydir/installer/cgdb" -type d -print0 | xargs -0 chmod 555
272 find "$mydir/installer/cgdb" -print0 | xargs -0n1 "$sf" -d "$stampsf"
273 find "$mydir/installer/cgdb" -print0 | xargs -0 touch -t "$stamp"
274 hdiutil create -scrub -srcfolder "$mydir/installer/cgdb" "$mydir/installer/cgdb.dmg" -format UDZO -imagekey zlib-level=9 -anyowners -skipunreadable
275 rm -f "$mydir/$DMG_NAME"
276 cat "$mydir/installer/cgdb.dmg" > "$mydir/$DMG_NAME"
277 "$sf" -d "$stampsf" "$mydir/$DMG_NAME"
278 touch -t "$stamp" "$mydir/$DMG_NAME"
282 echo "*** cleaning up"
283 rm -rf "$mydir/installer" "$mydir/local"
284 rm -rf "$mydir/sources/readline" "$mydir/sources/readline-build"
285 rm -rf "$mydir/sources/cgdb" "$mydir/sources/cgdb-build"
289 echo "Installer located at $mydir/$DMG_NAME"