]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/distrib/mac/wxPythonOSX/build
SetStringSelection and etc. fixes
[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
13#----------------------------------------------------------------------
14# Check Parameters
15
16function 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
35if [ $# -lt 1 ]; then
36 usage
37 exit 1
38fi
39
40KIND=$1
41case $KIND in
42 panther) PYTHON=/usr/bin/python ;;
43 jaguar) PYTHON=/usr/local/bin/python ;;
44 *) usage; exit 1 ;;
45esac
46PYTHONW=${PYTHON}w
47shift
48
49
50for 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
64done
65
66
67VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
68PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
69PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
70PYLIB=$PYPREFIX/lib/python$PYVER
71SITEPACKAGES=$PYLIB/site-packages
72
73TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
74TARBALL=$TARBALLDIR/wxPythonSrc-$VERSION.tar.gz
75
76PREFIX=/usr/lib/wxPython-$VERSION
77BINPREFIX=/usr/bin
78
79WXROOT=`dirname $PWD`
80PROGDIR="`dirname \"$0\"`"
81TMPDIR=$PWD/_build_dmg
82
83BUILDROOT=$TMPDIR/build
84INSTALLROOT=$TMPDIR/install
85INSTALLDEVEL=$TMPDIR/install-devel
86DMGDIR=$TMPDIR/dmg
87RESOURCEDIR=$PROGDIR/resources
88DESTDIR=$PWD/dist
89SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION
90
91
92#----------------------------------------------------------------------
93# Setup builddirs
94
95mkdir -p $BUILDROOT
96mkdir -p $INSTALLROOT
97#mkdir -p $INSTALLDEVEL
98rm -rf $DMGDIR
99mkdir -p $DMGDIR/root/Apps
100mkdir -p $DMGDIR/root/Docs
101mkdir -p $DMGDIR/root/Samples
102
103
104pushd $BUILDROOT
105
106
107#----------------------------------------------------------------------
108# Unpack the tarball
109
110if [ -z "$skiptar" ]; then
111 echo Unarchiving tarball...
112 tar xzf $TARBALL
113fi
114
115if [ "$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
143fi
144
145
146cd wxPythonSrc-$VERSION
147WXDIR=`pwd`
148mkdir -p $WXDIR/bld
149cd $WXDIR/bld
150
151#----------------------------------------------------------------------
152
153
154# Configure wxWidgets
155if [ -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
173fi
174
175# Build wxWidgets and wxPython
176if [ -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
205fi
206
207#----------------------------------------------------------------------
208
209if [ -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
259fi
260
261popd
262
263#----------------------------------------------------------------------
264
265# Make the Installer packages and disk image
266if [ -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
279Welcome!
280
281This program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
282
283You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work.
284
285Build date: `date`
286EOF
287
288 # make the preflight script
289 cat > $RESOURCEDIR/preflight <<EOF
290#!/bin/sh
291# Cleanup any old install of the wxPython package
292rm -rf \$2$SITEPACKAGES/wxPython
293rm -rf \$2$SITEPACKAGES/wx
294exit 0
295EOF
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
309chgrp -R admin \$2$SITEPACKAGES/wxPython
310chmod -R g+w \$2$SITEPACKAGES/wxPython
311chgrp -R admin \$2$SITEPACKAGES/wx
312chmod -R g+w \$2$SITEPACKAGES/wx
313
314exit 0
315EOF
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
338Welcome to wxPython!
339
340On 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
347Everything else here is optional and you can drag them out of the disk
348image and drop them whereever you want. You do need to install the above
349package 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.
370
371
372 Samples/samples Several small sample applications that
373 demonstrate how to use wxPython.
374
375 Samples/demo A copy of the wxPython demo source code,
376 just open the folder and run demo.pyw.
377
378Happy Hacking!
379EOF
380
381# PyAlaMode An extension of PyCrust that includes source
382# file editing capabilities.
383
384
385 # wxDocs
386 pushd $BUILDROOT
387 tar xzvf $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz
388 popd
389
390 # Make an app to launch viewdocs.py
391 $PYTHONW $PROGDIR/../buildapp.py \
392 --builddir=$DMGDIR/root/Docs \
393 --name=wxDocsViewer \
394 --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
395 --iconfile=$PROGDIR/Info.icns \
396 build
397
398 cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGDIR/root/Docs/wxDocsViewer.app/Contents/Resources
399
400 cat > "$DMGDIR/root/Docs/README 1st.txt" <<EOF
401
402The wxDocsViewer application needs to be copied to your Desktop (or
403someplace else you have write access to) before you can run it, so it
404can cache some indexes within its bundle.
405
406EOF
407
408 # license files, docs, etc.
409 pushd $DMGDIR/root/Docs
410 cp -pR $SRCROOT/wxPython/licence .
411 cp -pR $SRCROOT/wxPython/docs .
412 rm -rf docs/bin
413 rm -rf docs/xml-raw
414 mv docs other
415 popd
416
417 # Copy the demo and samples to the disk image from the tarball
418 pushd $DMGDIR/root/Samples
419 tar xzvf $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz
420 mv wxPython-$VERSION/* .
421 rm -rf wxPython-$VERSION
422 rm demo/b demo/.setup.sh
423 mv demo/demo.py demo/demo.pyw
424 popd
425
426
427 # Make an app bundle to launch PyCrust
428 $PYTHONW $PROGDIR/../buildapp.py \
429 --builddir=$DMGDIR/root/Apps \
430 --name=PyCrust \
431 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
432 --iconfile=$PROGDIR/PieShell.icns \
433 build
434
435# # and PyAlaMode
436# $PYTHONW $PROGDIR/../buildapp.py \
437# --builddir=$DMGDIR/root \
438# --name=PyAlaMode \
439# --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
440# --iconfile=$PROGDIR/PieShell.icns \
441# build
442
443 # Make an app to launch XRCed
444 $PYTHONW $PROGDIR/../buildapp.py \
445 --builddir=$DMGDIR/root/Apps \
446 --name=XRCed \
447 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
448 --iconfile=$PROGDIR/XRCed.icns \
449 build
450
451 # Make an app bundle to run the demo
452 $PYTHONW $PROGDIR/../buildapp.py \
453 --builddir=$DMGDIR/root/Apps \
454 --name="wxPython Demo" \
455 --mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
456 --iconfile=$PROGDIR/RunDemo.icns \
457 build
458 cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/wxPython Demo.app/Contents/Resources"
459
460
461 # and then finally make a disk image containing the packages and etc.
462 $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
463
464 echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
465 mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR
466fi
467
468
469# Cleanup build/install dirs
470if [ -z "$skipclean" ]; then
471 echo "Cleaning up..."
472 rm -rf $TMPDIR
473else
474 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
475fi
476