]> git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/mac/wxPythonOSX/build
Make an app bundle for the doc viewer
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
1 #!/bin/sh -e
2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
5
6 spectemplate=distrib/wxPythonFull.spec.in
7
8 if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
9 echo "Please run this script from the root wxPython directory."
10 exit 1
11 fi
12
13 #----------------------------------------------------------------------
14 # Check Parameters
15
16 function usage {
17 echo ""
18 echo "Usage: $0 [panther|jaguar] [command flags...]"
19 echo ""
20 echo " panther Build for Apple's python in /usr/bin, such as on Panther"
21 echo " jaguar Build for a python in /usr/local/bin, such as on Jaguar"
22 echo ""
23 echo "optional command flags:"
24 echo " skiptar Don't unpack the tarball"
25 echo " use_cvs Use the CVS workspace instead of a tarfile"
26 echo " skipconfig Don't run configure"
27 echo " skipbuild Don't build wxWidgets or wxPython"
28 echo " skipinstall Don't do the installation step"
29 echo " skipdmg Don't make the package or diskimage"
30 echo " skipclean Don't do the cleanup at the end"
31 echo ""
32 }
33
34
35 if [ $# -lt 1 ]; then
36 usage
37 exit 1
38 fi
39
40 KIND=$1
41 case $KIND in
42 panther) PYTHON=/usr/bin/python ;;
43 jaguar) PYTHON=/usr/local/bin/python ;;
44 *) usage; exit 1 ;;
45 esac
46 PYTHONW=${PYTHON}w
47 shift
48
49
50 for flag in $*; do
51 case ${flag} in
52 skiptar) skiptar=1 ;;
53 use_cvs) skiptar=1; use_cvs=1 ;;
54 skipconfig) skipconfig=1; skiptar=1 ;;
55 skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;;
56 skipinstall) skipinstall=1 ;;
57 skipdmg) skipdmg=1 ;;
58 skipclean) skipclean=1 ;;
59
60 *) echo "Unknown flag \"${flag}\""
61 usage
62 exit 1
63 esac
64 done
65
66
67 VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
68 PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
69 PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
70 PYLIB=$PYPREFIX/lib/python$PYVER
71 SITEPACKAGES=$PYLIB/site-packages
72
73 TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
74 TARBALL=$TARBALLDIR/wxPythonSrc-$VERSION.tar.gz
75
76 PREFIX=/usr/lib/wxPython-$VERSION
77 BINPREFIX=/usr/bin
78
79 WXROOT=`dirname $PWD`
80 PROGDIR="`dirname \"$0\"`"
81 TMPDIR=$PWD/_build_dmg
82
83 BUILDROOT=$TMPDIR/build
84 INSTALLROOT=$TMPDIR/install
85 INSTALLDEVEL=$TMPDIR/install-devel
86 DMGDIR=$TMPDIR/dmg
87 RESOURCEDIR=$PROGDIR/resources
88 DESTDIR=$PWD/dist
89 SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION
90
91
92 #----------------------------------------------------------------------
93 # Setup builddirs
94
95 mkdir -p $BUILDROOT
96 mkdir -p $INSTALLROOT
97 #mkdir -p $INSTALLDEVEL
98 rm -rf $DMGDIR
99 mkdir -p $DMGDIR/root/Apps
100 mkdir -p $DMGDIR/root/Docs
101 mkdir -p $DMGDIR/root/Samples
102
103
104 pushd $BUILDROOT
105
106
107 #----------------------------------------------------------------------
108 # Unpack the tarball
109
110 if [ -z "$skiptar" ]; then
111 echo Unarchiving tarball...
112 tar xzf $TARBALL
113 fi
114
115 if [ "$use_cvs" = 1 ]; then
116 # copy the cvs workspace, except for build dirs
117
118 mkdir -p wxPythonSrc-$VERSION
119
120 echo Finding updated files...
121 if [ -e .last_copy ]; then
122 FEXPR="-cnewer .last_copy"
123 fi
124 MEASURE=$WXROOT//
125 find $WXROOT $FEXPR -print \
126 | grep -v $WXROOT/bld \
127 | grep -v wxPython/build \
128 | grep -v wxPython/_build \
129 | grep -v CVS \
130 | grep -v .pyc \
131 | cut -b ${#MEASURE}- > filelist
132
133 for x in `cat filelist`; do
134 if [ -d "$WXROOT/$x" ]; then
135 mkdir -p "wxPythonSrc-$VERSION/$x"
136 else
137 echo $x
138 cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x"
139 fi
140 done
141
142 touch .last_copy
143 fi
144
145
146 cd wxPythonSrc-$VERSION
147 WXDIR=`pwd`
148 mkdir -p $WXDIR/bld
149 cd $WXDIR/bld
150
151 #----------------------------------------------------------------------
152
153
154 # Configure wxWidgets
155 if [ -z "$skipconfig" ]; then
156 ../configure \
157 --prefix=$PREFIX \
158 --with-mac \
159 --disable-monolithic \
160 --with-opengl \
161 --enable-sound \
162 --enable-display \
163 --enable-geometry \
164 --enable-precomp=no \
165 --enable-debug_flag
166
167 ## --enable-optimise \
168 ## --with-libjpeg=builtin \
169 ## --with-libpng=builtin \
170 ## --with-libtiff=builtin \
171 ## --with-zlib=builtin \
172
173 fi
174
175 # Build wxWidgets and wxPython
176 if [ -z "$skipbuild" ]; then
177
178 # Make wxWidgets and some contribs
179 make
180 make -C contrib/src/gizmos
181 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
182 make -C contrib/src/stc
183 make -C contrib/src/xrc
184
185 if [ ! -e $WXDIR/include/wx/gizmos ]; then
186 # Make some links so the wxPython build can find all the headers it needs
187 pushd $WXDIR/include/wx
188 ln -s ../../contrib/include/wx/* .
189 popd
190 fi
191
192 # Build wxPython
193 cd $WXDIR/wxPython
194 $PYTHON setup.py \
195 NO_SCRIPTS=1 \
196 WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \
197 build
198
199
200 # Build wxrc (XRC resource tool)
201 cd $WXDIR/bld/contrib/utils/wxrc
202 make
203 strip wxrc
204
205 fi
206
207 #----------------------------------------------------------------------
208
209 if [ -z "$skipinstall" ]; then
210 # Install wxWidgets
211 cd $WXDIR/bld
212 make prefix=$INSTALLROOT$PREFIX install
213 make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
214 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install
215 make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
216 make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install
217
218
219 # and wxPython
220 cd $WXDIR/wxPython
221 $PYTHON setup.py \
222 NO_SCRIPTS=1 \
223 WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
224 install \
225 --root=$INSTALLROOT
226
227
228 # Apple's Python (on Panther) sym-links the site-packages dir to
229 # /Library/Python/$PYVER so we need to move the files so they are
230 # installed in the physical location, not the virtual one.
231 if [ "$KIND" = "panther" ]; then
232 mkdir -p $INSTALLROOT/Library/Python/$PYVER
233 mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
234 rm -r $INSTALLROOT/System
235 SITEPACKAGES=/Library/Python/$PYVER
236 fi
237
238
239 # install wxPython's tool scripts
240 mkdir -p $INSTALLROOT$BINPREFIX
241 cd $WXDIR/wxPython/scripts
242 python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
243
244
245 # Install wxrc
246 cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX
247
248
249 # # install the wxPython headers
250 # cd $WXDIR/wxPython
251 # cp -R include $INSTALLROOT$PREFIX
252 # mkdir -p $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
253 # cp src/*.i $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
254
255
256 # Set premissions for files in $INSTALLROOT
257 chown -R root:admin $INSTALLROOT
258 chmod -R g+w $INSTALLROOT
259 fi
260
261 popd
262
263 #----------------------------------------------------------------------
264
265 # Make the Installer packages and disk image
266 if [ -z "$skipdmg" ]; then
267
268 # Remove the .pyc/.pyo files they just take up space and can be recreated
269 # during the install.
270 $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT
271
272
273 # Make the welcome message
274 case $KIND in
275 panther) W_MSG="the Panther (OS X 10.3.x) version of" ;;
276 jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;;
277 esac
278 cat > $RESOURCEDIR/Welcome.txt <<EOF
279 Welcome!
280
281 This program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
282
283 You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work.
284
285 Build date: `date`
286 EOF
287
288 # make the preflight script
289 cat > $RESOURCEDIR/preflight <<EOF
290 #!/bin/sh
291 # Cleanup any old install of the wxPython package
292 rm -rf \$2$SITEPACKAGES/wxPython
293 rm -rf \$2$SITEPACKAGES/wx
294 exit 0
295 EOF
296 chmod +x $RESOURCEDIR/preflight
297
298 # make the postflight script
299 cat > $RESOURCEDIR/postflight <<EOF
300 #!/bin/sh -e
301 # Compile the .py files in the wxPython pacakge
302 $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
303 $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
304 $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
305 $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
306
307
308 # and all of the wxPython pacakge should be group writable
309 chgrp -R admin \$2$SITEPACKAGES/wxPython
310 chmod -R g+w \$2$SITEPACKAGES/wxPython
311 chgrp -R admin \$2$SITEPACKAGES/wx
312 chmod -R g+w \$2$SITEPACKAGES/wx
313
314 exit 0
315 EOF
316 chmod +x $RESOURCEDIR/postflight
317
318
319
320 # Build the main Installer Package...
321 rm -rf wxPythonOSX-$KIND.pkg
322 python $PROGDIR/../buildpkg.py \
323 --Title=wxPythonOSX-$KIND \
324 --Version=$VERSION \
325 --Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
326 --NeedsAuthorization="YES" \
327 --Relocatable="NO" \
328 --InstallOnly="YES" \
329 $INSTALLROOT \
330 $RESOURCEDIR
331
332 mv wxPythonOSX-$KIND.pkg $DMGDIR/root
333
334
335
336 # Make a README.txt to go on the disk image
337 cat > "$DMGDIR/root/README 1st.txt" <<EOF
338 Welcome to wxPython!
339
340 On this disk image you will find the installer for wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. MacPython-OSX is not included.
341
342 wxPython-$KIND.pkg The installer package. It contains the wxPython
343 extension modules, wxMac dynamic libraries and
344 headers, and some scripts for the command-line
345 tools.
346
347 Everything else here is optional and you can drag them out of the disk
348 image and drop them whereever you want. You do need to install the above
349 package before you can use any of the items below.
350
351
352 Apps/wxPython Demo An application bundle version of the demo.
353 (This has it's own copy of the sources within
354 the bundle.)
355
356 Apps/XRCed An application for editing wxPython resource
357 files (XRC files.)
358
359 Apps/PyCrust An application that provides an interactive
360 Python shell and also namespace inspectors.
361
362
363
364 Docs/wxDocsViewer An application that allows you to view the
365 wxWidgets documentation.
366
367 Docs/licence License files.
368
369 Docs/other A few readmes, change log, etc. The full
370 documentation is downloadable separately.
371
372
373 Samples/samples Several small sample applications that
374 demonstrate how to use wxPython.
375
376 Samples/demo A copy of the wxPython demo source code,
377 just open the folder and run demo.pyw.
378
379 Happy Hacking!
380 EOF
381
382 # PyAlaMode An extension of PyCrust that includes source
383 # file editing capabilities.
384
385
386 # wxDocs
387 pushd $BUILDROOT
388 tar xzvf $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz
389 popd
390
391 # Make an app to launch viewdocs.py
392 $PYTHONW $PROGDIR/../buildapp.py \
393 --builddir=$DMGDIR/root/Docs \
394 --name=wxDocsViewer \
395 --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
396 --iconfile=$PROGDIR/Info.icns \
397 build
398
399 cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGDIR/root/Docs/wxDocsViewer.app/Contents/Resources
400
401 cat > "$DMGDIR/root/Docs/README 1st.txt" <<EOF
402
403 The wxDocsViewer application needs to be copied to your Desktop (or
404 someplace else you have write access to) before you can run it, so it
405 can cache some indexes within its bundle.
406
407 EOF
408
409 # license files, docs, etc.
410 pushd $DMGDIR/root/Docs
411 cp -pR $SRCROOT/wxPython/licence .
412 cp -pR $SRCROOT/wxPython/docs .
413 rm -rf docs/bin
414 rm -rf docs/xml-raw
415 mv docs other
416 popd
417
418 # Copy the demo and samples to the disk image from the tarball
419 pushd $DMGDIR/root/Samples
420 tar xzvf $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz
421 mv wxPython-$VERSION/* .
422 rm -rf wxPython-$VERSION
423 rm demo/b demo/.setup.sh
424 mv demo/demo.py demo/demo.pyw
425 popd
426
427
428 # Make an app bundle to launch PyCrust
429 $PYTHONW $PROGDIR/../buildapp.py \
430 --builddir=$DMGDIR/root/Apps \
431 --name=PyCrust \
432 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
433 --iconfile=$PROGDIR/PieShell.icns \
434 build
435
436 # # and PyAlaMode
437 # $PYTHONW $PROGDIR/../buildapp.py \
438 # --builddir=$DMGDIR/root \
439 # --name=PyAlaMode \
440 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
441 # --iconfile=$PROGDIR/PieShell.icns \
442 # build
443
444 # Make an app to launch XRCed
445 $PYTHONW $PROGDIR/../buildapp.py \
446 --builddir=$DMGDIR/root/Apps \
447 --name=XRCed \
448 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
449 --iconfile=$PROGDIR/XRCed.icns \
450 build
451
452 # Make an app bundle to run the demo
453 $PYTHONW $PROGDIR/../buildapp.py \
454 --builddir=$DMGDIR/root/Apps \
455 --name="wxPython Demo" \
456 --mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
457 --iconfile=$PROGDIR/RunDemo.icns \
458 build
459 cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/wxPython Demo.app/Contents/Resources"
460
461
462 # and then finally make a disk image containing the packages and etc.
463 $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
464
465 echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
466 mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR
467 fi
468
469
470 # Cleanup build/install dirs
471 if [ -z "$skipclean" ]; then
472 echo "Cleaning up..."
473 rm -rf $TMPDIR
474 else
475 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
476 fi
477