Fix clang debug info startup problem
[build-cgdb.git] / build
blob5219c7b03db7febc451abb5729a2682a4a3d66c9
1 #!/bin/bash
3 # build cgdb script
4 # Copyright (C) 2011 Kyle J. McKay. All rights reserved.
6 set -e
7 PATH="`getconf PATH`"
8 export PATH
9 myname="$0"
10 while [ -L "$myname" ]; do
11 oldname="$myname"
12 myname="$(readlink "$myname")"
13 case "$myname" in /*) :;; *)
14 myname="$(dirname "$oldname")/$myname"
15 esac
16 done
17 unset oldname
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
31 echo ""
33 strip1=
34 if ! (tar --strip-path=1 || : ) 2>&1 | grep -qi 'unrecognized option'; then
35 strip1=--strip-path=1
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
41 exit 1
44 if xs="`type -P xcode-select`"; then
45 SDKROOT="`xcode-select -print-path`"
47 if [ -z "$SDKROOT" ]; then
48 SDKROOT=/Developer
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
53 exit 1
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"
65 echo ""
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
69 echo ""
70 sleep 2
71 else
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"
83 echo ""
84 rm -f "$mydir/sources/readline.tar.gz"
85 curl -f -H "User-Agent: $AGENT" -L -o "$mydir/sources/readline.tar.gz" "$READLINE"
86 echo ""
87 if [ `md5 -q "$mydir/sources/readline.tar.gz"` != $READLINE_MD5 ]; then
88 echo "error: readline sources md5 mismatch (expected $READLINE_MD5)" >&2
89 exit 1
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"
95 echo ""
96 rm -f "$mydir/sources/cgdb.tar.gz"
97 curl -f -H "User-Agent:" -L -o "$mydir/sources/cgdb.tar.gz" "$CGDB"
98 echo ""
99 if [ `md5 -q "$mydir/sources/cgdb.tar.gz"` != $CGDB_MD5 ]; then
100 echo "error: cgdb sources md5 mismatch (expected $CGDB_MD5)" >&2
101 exit 1
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"
110 echo ""
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"
117 echo ""
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")
124 echo ""
126 CC=gcc-4.0
127 COPT="-Os"
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"
136 export CC
137 export CFLAGS
138 export LDFLAGS
139 export CPATH
140 export LIBRARY_PATH
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")
146 echo ""
148 echo "*** building readline"
149 make -w -C "$mydir/sources/readline-build"
150 echo ""
152 echo "*** installing readline to local area"
153 make -w -C "$mydir/sources/readline-build" install
154 echo ""
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")
160 echo ""
162 echo "*** building cgdb"
163 make -w -C "$mydir/sources/cgdb-build"
164 echo ""
166 echo "*** installing cgdb to local area"
167 make -w -C "$mydir/sources/cgdb-build" install
168 echo ""
170 if [ -z "$fr" ]; then
171 echo "*** ERROR: missing fakeroot"
172 echo ""
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
177 exit 1
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
198 timenow="`date +%s`"
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"
203 echo ""
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">
210 <dict>
211 <key>IFPkgDescriptionDescription</key>
212 <string>cgdb: the curses debugger</string>
213 <key>IFPkgDescriptionTitle</key>
214 <string>cgdb</string>
215 </dict>
216 </plist>
217 DESCRIPTION
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">
222 <dict>
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>
232 <integer>6</integer>
233 <key>IFMinorVersion</key>
234 <integer>6</integer>
235 <key>IFPkgFlagAllowBackRev</key>
236 <true/>
237 <key>IFPkgFlagAuthorizationAction</key>
238 <string>RootAuthorization</string>
239 <key>IFPkgFlagDefaultLocation</key>
240 <string>/usr/local</string>
241 <key>IFPkgFlagFollowLinks</key>
242 <true/>
243 <key>IFPkgFlagInstallFat</key>
244 <true/>
245 <key>IFPkgFlagIsRequired</key>
246 <false/>
247 <key>IFPkgFlagOverwritePermissions</key>
248 <false/>
249 <key>IFPkgFlagRelocatable</key>
250 <false/>
251 <key>IFPkgFlagRestartAction</key>
252 <string>None</string>
253 <key>IFPkgFlagRootVolumeOnly</key>
254 <false/>
255 <key>IFPkgFlagUpdateInstalledLanguages</key>
256 <false/>
257 <key>IFPkgFormatVersion</key>
258 <real>0.10000000149011612</real>
259 </dict>
260 </plist>
261 INFOPLIST
262 echo ""
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"
279 FAKEROOT
280 echo ""
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"
286 echo ""
288 echo "*** success"
289 echo "Installer located at $mydir/$DMG_NAME"
290 exit 0