4 # Copyright (C) 2011,2012 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
='http://github.com/downloads/cgdb/cgdb/cgdb-0.6.6.tar.gz'
28 CGDB_MD5
=394b542b495755ab8392b7e88dace744
30 DMG_NAME
=cgdb-0.6
.6.dmg
35 if ! (tar --strip-path=1 ||
: ) 2>&1 |
grep -Eqi 'unrecognized option|not supported'; then
37 elif ! (tar --strip-components=1 ||
: ) 2>&1 |
grep -Eqi 'unrecognized option|not supported'; then
38 strip1
=--strip-components=1
40 if [ -z "$strip1" ]; then
41 echo "error: Cannot figure out tar option to strip top level path" >&2
45 if xs
="`type -P xcode-select`"; then
46 SDKROOT
="`xcode-select -print-path`"
48 if [ -z "$SDKROOT" ]; then
51 SDK104
="$SDKROOT/SDKs/MacOSX10.4u.sdk"
52 if [ ! -d "$SDK104" -o ! -r "$SDK104/usr/include/AvailabilityMacros.h" ]; then
53 echo "error: No Mac OS X 10.4u SDK found at $SDK104" >&2
57 if ! pm
="`PATH="$SDKROOT/usr
/bin
:$SDKROOT/Tools
" type -P packagemaker`"; then
58 echo "error: Cannot locate packagemaker executable" >&2
60 if ! sf
="`PATH="$SDKROOT/usr
/bin
:$SDKROOT/Tools
" type -P SetFile`"; then
61 echo "error: Cannot locate SetFile executable" >&2
64 if ! fr
="`PATH="$PATH:/usr
/local
/bin
:/opt
/local
/bin
:/sw
/bin
" type -P fakeroot`"; then
65 echo "*** ERROR: missing fakeroot"
67 echo "error: unable to find fakeroot installation" >&2
68 echo "warning: build proceeding, but no installer will be created" >&2
69 echo "info: see http://mackyle.github.com/fakeroot to install fakeroot" >&2
73 # try to trigger the fakeroot bug now if it's an old version
74 "$fr" find "$mydir" -print > /dev
/null
77 AGENT
='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
78 if [ ! -d "$mydir/sources" ]; then
79 mkdir
"$mydir/sources"
82 if [ ! -r "$mydir/sources/readline.tar.gz" ] ||
[ `md5 -q "$mydir/sources/readline.tar.gz"` != $READLINE_MD5 ]; then
83 echo "*** fetching readline sources from $READLINE"
85 rm -f "$mydir/sources/readline.tar.gz"
86 curl
-f -H "User-Agent: $AGENT" -L -o "$mydir/sources/readline.tar.gz" "$READLINE"
88 if [ `md5 -q "$mydir/sources/readline.tar.gz"` != $READLINE_MD5 ]; then
89 echo "error: readline sources md5 mismatch (expected $READLINE_MD5)" >&2
94 if [ ! -r "$mydir/sources/cgdb.tar.gz" ] ||
[ `md5 -q "$mydir/sources/cgdb.tar.gz"` != $CGDB_MD5 ]; then
95 echo "*** fetching cgdb sources from $CGDB"
97 rm -f "$mydir/sources/cgdb.tar.gz"
98 curl
-f -k -H "User-Agent:" -L -o "$mydir/sources/cgdb.tar.gz" "$CGDB"
100 if [ `md5 -q "$mydir/sources/cgdb.tar.gz"` != $CGDB_MD5 ]; then
101 echo "error: cgdb sources md5 mismatch (expected $CGDB_MD5)" >&2
106 echo "*** expanding sources"
107 rm -rf "$mydir/sources/cgdb" "$mydir/sources/readline"
108 mkdir
"$mydir/sources/cgdb" "$mydir/sources/readline"
109 tar -xzf "$mydir/sources/readline.tar.gz" $strip1 --directory="$mydir/sources/readline"
110 tar -xzf "$mydir/sources/cgdb.tar.gz" $strip1 --directory="$mydir/sources/cgdb"
113 echo "*** applying patches"
114 echo "tokenizer extensions: adding .cp, .m, .M and .mm"
115 patch "$mydir/sources/cgdb/cgdb/tokenizer/src/tokenizer.c" < "$mydir/patches/tokenizer-exts.patch"
116 echo "line listings: only list 1 line (fixes clang problem)"
117 patch -p1 -d "$mydir/sources/cgdb" < "$mydir/patches/cgdb-0.6.6_clang_fix.patch"
120 echo "*** preparing local install area"
121 rm -rf "$mydir/local"
122 mkdir
"$mydir/local" "$mydir/local/include" "$mydir/local/lib" "$mydir/local/bin" "$mydir/local/share"
123 mkdir
"$mydir/local/share/man" "$mydir/local/share/man/man1"
124 (umask 0; ln -s share
/man
"$mydir/local/man")
129 ARCH
="-arch i386 -arch ppc"
130 OSXDK
="-isysroot$SDK104"
131 OSXMN
="-mmacosx-version-min=10.4"
132 CFLAGS
="$ARCH $OSXDK $OSXMN $COPT"
133 LDFLAGS
="-Wl,-search_paths_first,-headerpad_max_install_names,-dead_strip_dylibs"
134 CPATH
="$mydir/local/include"
135 LIBRARY_PATH
="$mydir/local/lib"
143 echo "*** configuring readline"
144 rm -rf "$mydir/sources/readline-build"
145 mkdir
"$mydir/sources/readline-build"
146 (cd "$mydir/sources/readline-build" && ..
/readline
/configure
--enable-static --disable-shared --prefix="$mydir/local")
149 echo "*** building readline"
150 make -w -C "$mydir/sources/readline-build"
153 echo "*** installing readline to local area"
154 make -w -C "$mydir/sources/readline-build" install
157 echo "*** configuring cgdb"
158 rm -rf "$mydir/sources/cgdb-build"
159 mkdir
"$mydir/sources/cgdb-build"
160 (cd "$mydir/sources/cgdb-build" && ..
/cgdb
/configure
--disable-dependency-tracking --with-readline="$mydir/local" --prefix="$mydir/local")
163 echo "*** building cgdb"
164 make -w -C "$mydir/sources/cgdb-build"
167 echo "*** installing cgdb to local area"
168 make -w -C "$mydir/sources/cgdb-build" install
171 if [ -z "$fr" ]; then
172 echo "*** ERROR: missing fakeroot"
174 echo "error: unable to find fakeroot installation" >&2
175 echo "warning: no installer will be created" >&2
176 echo "warning: the completed build is in $mydir/local" >&2
177 echo "info: see http://mackyle.github.com/fakeroot to install fakeroot" >&2
181 echo "*** creating installer image area"
182 if [ -d "$mydir/installer" ]; then
183 chmod -R u
+w
"$mydir/installer"
185 rm -rf "$mydir/installer"
186 mkdir
"$mydir/installer" "$mydir/installer/usrlocal" "$mydir/installer/cgdb"
187 mkdir
"$mydir/installer/usrlocal/bin" "$mydir/installer/usrlocal/share"
188 mkdir
"$mydir/installer/usrlocal/share/man"
189 mkdir
"$mydir/installer/usrlocal/share/man/man1"
190 mkdir
"$mydir/installer/usrlocal/share/info"
191 mkdir
"$mydir/installer/usrlocal/share/cgdb"
192 cat "$mydir/local/bin/cgdb" > "$mydir/installer/usrlocal/bin/cgdb"
193 strip
"$mydir/installer/usrlocal/bin/cgdb"
194 cat "$mydir/local/share/man/man1/cgdb.1" > "$mydir/installer/usrlocal/share/man/man1/cgdb.1"
195 cat "$mydir/local/share/info/cgdb.info" > "$mydir/installer/usrlocal/share/info/cgdb.info"
196 cat "$mydir/local/share/cgdb/cgdb.txt" > "$mydir/installer/usrlocal/share/cgdb/cgdb.txt"
197 find "$mydir/installer/usrlocal" ! -type d
-print0 |
xargs -0 chmod 444
198 chmod 555 "$mydir/installer/usrlocal/bin/cgdb"
199 find "$mydir/installer/usrlocal" -type d
-print0 |
xargs -0 chmod 755
201 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"`"
202 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"`"
203 find "$mydir/installer/usrlocal" -print0 |
xargs -0n1 "$sf" -d "$stampsf"
204 find "$mydir/installer/usrlocal" -print0 |
xargs -0 touch -t "$stamp"
207 echo "*** preparing installer description files"
208 cat > "$mydir/installer/Description.plist" <<DESCRIPTION
209 <?xml version="1.0" encoding="UTF-8"?>
210 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
211 <plist version="1.0">
213 <key>IFPkgDescriptionDescription</key>
214 <string>cgdb: the curses debugger</string>
215 <key>IFPkgDescriptionTitle</key>
216 <string>cgdb</string>
220 cat > "$mydir/installer/Info.plist" <<INFOPLIST
221 <?xml version="1.0" encoding="UTF-8"?>
222 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
223 <plist version="1.0">
225 <key>CFBundleIdentifier</key>
226 <string>net.sourceforge.cgdb</string>
227 <key>CFBundleGetInfoString</key>
228 <string>cgdb 0.6.6_3</string>
229 <key>CFBundleShortVersionString</key>
230 <string>0.6.6_3</string>
231 <key>CFBundleVersion</key>
232 <string>06.6.3</string>
233 <key>IFMajorVersion</key>
235 <key>IFMinorVersion</key>
237 <key>IFPkgFlagAllowBackRev</key>
239 <key>IFPkgFlagAuthorizationAction</key>
240 <string>RootAuthorization</string>
241 <key>IFPkgFlagDefaultLocation</key>
242 <string>/usr/local</string>
243 <key>IFPkgFlagFollowLinks</key>
245 <key>IFPkgFlagInstallFat</key>
247 <key>IFPkgFlagIsRequired</key>
249 <key>IFPkgFlagOverwritePermissions</key>
251 <key>IFPkgFlagRelocatable</key>
253 <key>IFPkgFlagRestartAction</key>
254 <string>None</string>
255 <key>IFPkgFlagRootVolumeOnly</key>
257 <key>IFPkgFlagUpdateInstalledLanguages</key>
259 <key>IFPkgFormatVersion</key>
260 <real>0.10000000149011612</real>
266 echo "*** creating installer"
267 "$fr" bash
-s <<FAKEROOT
268 chown -R root:wheel "$mydir/installer/usrlocal"
269 "$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"
270 find "$mydir/installer/cgdb/cgdb.pkg/Contents/Resources" -type d -mindepth 1 -print0 | xargs -0 rm -rf
271 cat "$mydir/installer/Description.plist" > "$mydir/installer/cgdb/cgdb.pkg/Contents/Resources/Description.plist"
272 find "$mydir/installer/cgdb" ! -type d -print0 | xargs -0 chmod 444
273 find "$mydir/installer/cgdb" -type d -print0 | xargs -0 chmod 555
274 find "$mydir/installer/cgdb" -print0 | xargs -0n1 "$sf" -d "$stampsf"
275 find "$mydir/installer/cgdb" -print0 | xargs -0 touch -t "$stamp"
276 hdiutil create -scrub -srcfolder "$mydir/installer/cgdb" "$mydir/installer/cgdb.dmg" -format UDZO -imagekey zlib-level=9 -anyowners -skipunreadable
277 rm -f "$mydir/$DMG_NAME"
278 cat "$mydir/installer/cgdb.dmg" > "$mydir/$DMG_NAME"
279 "$sf" -d "$stampsf" "$mydir/$DMG_NAME"
280 touch -t "$stamp" "$mydir/$DMG_NAME"
284 echo "*** cleaning up"
285 rm -rf "$mydir/installer" "$mydir/local"
286 rm -rf "$mydir/sources/readline" "$mydir/sources/readline-build"
287 rm -rf "$mydir/sources/cgdb" "$mydir/sources/cgdb-build"
291 echo "Installer located at $mydir/$DMG_NAME"