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