source: git/buildmacosx.sh @ 9d49627

RELEASE/1.2debug-cidebug-ci-sanitisersstereowalls-datawalls-data-hanging-as-warning
Last change on this file since 9d49627 was 9d49627, checked in by Olly Betts <olly@…>, 9 years ago

buildmacosx.sh: Allow specifying arch to build for on the command
line, and update comments documenting usage.

  • Property mode set to 100755
File size: 8.7 KB
RevLine 
[6df03c1]1#!/bin/sh
2#
[9d49627]3# You'll need some development tools which aren't installed by default.  To
4# get these you can install Xcode (which is a free download from Apple):
[0580c6a]5#
[9d49627]6#   https://developer.apple.com/xcode/downloads/
[2032841]7#
[9d49627]8# To build, open a terminal (Terminal.app in the "Utils" folder in
9# "Applications") and unpack the downloaded survex source code. E.g. for
10# 1.2.17:
[cc83ec9]11#
[9d49627]12#   tar xf survex-1.2.17.tar.gz
13#
14# Then change directory into the unpacked sources:
15#
16#   cd survex-1.2.17
17#
18# And then run this script:
[6df03c1]19#
[2032841]20#   ./buildmacosx.sh
[0580c6a]21#
[9d49627]22# This will automatically download and temporarily install wxWidgets in
23# a subdirectory of the source tree (this script is smart enough not to
24# download or build it if it already has).
[0580c6a]25#
[1324d6c]26# If you already have wxWidgets installed permanently, use:
[0580c6a]27#
[2032841]28#   ./buildmacosx.sh --no-install-wx
[6df03c1]29#
[1324d6c]30# If wxWidgets is installed somewhere such that wx-config isn't on your
[6df03c1]31# PATH you need to indicate where wx-config is by running this script
32# something like this:
33#
[b7510ee]34#   env WX_CONFIG=/path/to/wx-config ./buildmacosx.sh
[b72f4b5]35#
[2032841]36# (If you set WX_CONFIG, there's no need to pass --no-install-wx).
37#
[1324d6c]38# If using a pre-installed wxWidgets, note that it must satisfy the
[b72f4b5]39# following requirements:
40#   - It must be built with OpenGL support (--with-opengl).
[9aa30e7]41#   - If you build with wx < 3, it probably should be a "Unicode" build
42#     (--enable-unicode); wx >= 3 dropped support for non-Unicode builds.
[9d49627]43#
44# This script builds diskimages which are known to work at least as far back
45# as OS X 10.6.8.  A build of wxWidgets 3.0.2 with the options we pass will
46# default to assuming at least OS X 10.5, but we've not heard from anyone
47# trying with such an old version.
[6df03c1]48
49set -e
[0580c6a]50
[9d49627]51install_wx=yes
52install_proj=yes
53while [ "$#" != 0 ] ; do
54  case $1 in
55    --no-install-wx)
56      install_wx=no
57      shift
58      ;;
59    --no-install-proj)
60      install_proj=no
61      shift
62      ;;
63    --help|-h)
64      echo "Usage: $0 [--no-install-wx] [--no-install-proj] [ppc|i386|x86_86]"
65      exit 0
66      ;;
67    -*)
68      echo "Unknown option - try --help" >&2
69      exit 1
70      ;;
71    *)
72      break
73      ;;
74  esac
75done
76
77# Mac OS X support "fat" binaries which contain code for more than one
78# processor, but the wxWidgets build system doesn't seem to allow creating
79# these.
80#
81# We default to using -arch x86_64 which produces a build which will only work
82# on # 64-bit Intel Macs, but that's probably all machines modern enough to
83# worry about.
84#
85# If you want a build which also works on 32 bit Intel Macs, then run this
86# script passing i386:
87#
88#   ./buildmacosx.sh i386
89#
90# Or to build for much older machines with a Power PC processor, use:
91#
92#   ./buildmacosx.sh ppc
93arch_flags='-arch '${1:-x86_64}
94
[fb880024]95WX_VERSION=3.0.2
[2f92df0]96WX_SHA256=346879dc554f3ab8d6da2704f651ecb504a22e9d31c17ef5449b129ed711585d
[b72f4b5]97
[fb880024]98PROJ_VERSION=4.8.0
99PROJ_SHA256=2db2dbf0fece8d9880679154e0d6d1ce7c694dd8e08b4d091028093d87a9d1b5
100
[9d49627]101if [ -z "${WX_CONFIG+set}" ] && [ "$install_wx" != no ] ; then
[0580c6a]102  if test -x WXINSTALL/bin/wx-config ; then
103    :
104  else
[deb58b87]105    prefix=`pwd`/WXINSTALL
[fb880024]106    wxtarball=wxWidgets-$WX_VERSION.tar.bz2
[56980d4]107    test -f "$wxtarball" || \
[4dcf45a]108      curl -L -O "http://downloads.sourceforge.net/project/wxwindows/$WX_VERSION/$wxtarball"
[d752afd]109    if echo "$WX_SHA256  $wxtarball" | shasum -a256 -c ; then
110      : # OK
111    else
112      echo "Checksum of downloaded file '$wxtarball' is incorrect, aborting."
113      exit 1
114    fi
[56980d4]115    echo "+++ Extracting $wxtarball"
[fb880024]116    test -d "wxWidgets-$WX_VERSION" || tar jxf "$wxtarball"
[976a038]117    test -d "wxWidgets-$WX_VERSION/BUILD" || mkdir "wxWidgets-$WX_VERSION/BUILD"
118    cd "wxWidgets-$WX_VERSION/BUILD"
[1fce809]119    # Compliation of wx 3.0.2 fails on OS X 10.10.1 with webview enabled.
120    # A build with liblzma enabled doesn't work on OS X 10.6.8.
121    ../configure --disable-shared --prefix="$prefix" \
122        --with-opengl --enable-unicode \
123        --disable-webview --without-liblzma \
124        CC="gcc $arch_flags" CXX="g++ $arch_flags"
[0580c6a]125    make -s
126    make -s install
127    cd ../..
128  fi
[b7510ee]129  WX_CONFIG=`pwd`/WXINSTALL/bin/wx-config
[0580c6a]130fi
131
[fb880024]132CC=`$WX_CONFIG --cc`
133CXX=`$WX_CONFIG --cxx`
134
[9d49627]135if [ "$install_proj" != no ] ; then
[fb880024]136  if test -f PROJINSTALL/include/proj_api.h ; then
137    :
138  else
139    prefix=`pwd`/PROJINSTALL
140    projtarball=proj-$PROJ_VERSION.tar.gz
141    test -f "$projtarball" || \
142      curl -O "http://download.osgeo.org/proj/$projtarball"
143    if echo "$PROJ_SHA256  $projtarball" | shasum -a256 -c ; then
144      : # OK
145    else
146      echo "Checksum of downloaded file '$projtarball' is incorrect, aborting."
147      exit 1
148    fi
149    echo "+++ Extracting $projtarball"
150    test -d "proj-$PROJ_VERSION" || tar jxf "$projtarball"
[976a038]151    test -d "proj-$PROJ_VERSION/BUILD" || mkdir "proj-$PROJ_VERSION/BUILD"
152    cd "proj-$PROJ_VERSION/BUILD"
[fb880024]153    ../configure --disable-shared --prefix="$prefix" CC="$CC" CXX="$CXX"
154    make -s
155    make -s install
156    cd ../..
157  fi
158fi
159
[b7510ee]160test -n "$WX_CONFIG" || WX_CONFIG=`which wx-config`
161if test -z "$WX_CONFIG" ; then
162  echo "WX_CONFIG not set and wx-config not on your PATH"
[6df03c1]163  exit 1
164fi
[1324d6c]165# Force static linking so the user doesn't need to install wxWidgets.
[b7510ee]166WX_CONFIG=$WX_CONFIG' --static'
[0580c6a]167rm -rf *.dmg Survex macosxtmp
[deb58b87]168D=`pwd`/Survex
169T=`pwd`/macosxtmp
[fb880024]170./configure --prefix="$D" --bindir="$D" --mandir="$T" WX_CONFIG="$WX_CONFIG" CC="$CC" CXX="$CXX" CPPFLAGS=-I"`pwd`/PROJINSTALL/include" LDFLAGS=-L"`pwd`/PROJINSTALL/lib"
[6df03c1]171make
172make install
173#mv Survex/survex Survex/Survex
174
[b72f4b5]175# Construct the Aven application bundle.
[9e44985]176mkdir -p Survex/Aven.app/Contents/MacOS Survex/Aven.app/Contents/Resources
[2032841]177cp lib/Info.plist Survex/Aven.app/Contents
178printf APPLAVEN > Survex/Aven.app/Contents/PkgInfo
[56980d4]179cp -r "$D"/share/survex/* Survex/Aven.app/Contents/Resources/
[58e9ce0]180rm Survex/Aven.app/Contents/Resources/bcra*.svx
181rm Survex/Aven.app/Contents/Resources/icons/3d.png
182rm Survex/Aven.app/Contents/Resources/icons/err.png
183rm Survex/Aven.app/Contents/Resources/icons/plt.png
184rm Survex/Aven.app/Contents/Resources/icons/pos.png
185rm Survex/Aven.app/Contents/Resources/icons/svx.png
[b72f4b5]186mv Survex/aven Survex/Aven.app/Contents/MacOS/
[87aa9ce]187ln Survex/cavern Survex/Aven.app/Contents/MacOS/
[58e9ce0]188mv Survex/share/doc/survex Survex/Docs
[4e95cff]189rmdir Survex/share/doc
[1aa3fb7]190rm -f Survex/share/survex/unifont.pixelfont
[b72f4b5]191rm -rf Survex/share/survex/icons
[58e9ce0]192rm -rf Survex/share/applications Survex/share/mime-info Survex/share/pixmaps
[b72f4b5]193
[e157b8f]194# Create .icns files in the bundle's "Resources" directory.
[4cc264e]195for i in Aven svxedit 3d err plt pos svx ; do
[e157b8f]196  unzip -d Survex/Aven.app/Contents/Resources "lib/icons/$i.iconset.zip"
197  iconutil --convert icns "Survex/Aven.app/Contents/Resources/$i.iconset"
198  rm -rf "Survex/Aven.app/Contents/Resources/$i.iconset"
199done
200
[20dfc50]201# Construct the svxedit application bundle.
202mkdir -p Survex/svxedit.App/Contents/MacOS Survex/svxedit.App/Contents/Resources
203cp lib/svxedit_Info.plist Survex/svxedit.App/Contents/Info.plist
204printf APPLSVXE > Survex/svxedit.App/Contents/PkgInfo
[c1a9449]205mv Survex/svxedit Survex/svxedit_wrap Survex/svxedit.App/Contents/MacOS/
[20dfc50]206
207mv Survex/Aven.app/Contents/Resources/svxedit.icns \
208  Survex/svxedit.App/Contents/Resources
209ln Survex/Aven.app/Contents/Resources/svx.icns \
210  Survex/svxedit.App/Contents/Resources
211
[6df03c1]212size=`du -s Survex|sed 's/[^0-9].*//'`
213# Allow 1000 extra sectors for various overheads (500 wasn't enough).
[56980d4]214sectors=`expr 1000 + "$size"`
[6df03c1]215# Partition needs to be at least 4M and sectors are 512 bytes.
[56980d4]216if test "$sectors" -lt 8192 ; then
[6df03c1]217  sectors=8192
218fi
219echo "Creating new blank image survex-macosx.dmg of $sectors sectors"
[0580c6a]220# This creates the diskimage file and initialises it as an HFS+ volume.
[56980d4]221hdiutil create -sectors "$sectors" survex-macosx -layout NONE -fs HFS+ -volname Survex
[6df03c1]222
[b72f4b5]223echo "Presenting image to the filesystems for mounting."
[6df03c1]224# This will mount the image onto the Desktop.
[ab66f3c]225# Get the name of the device it is mounted on and the mount point.
226
227# man hdiutil says:
228# "The output of [hdiutil] attach has been stable since OS X 10.0 (though it
229# was called hdid(8) then) and is intended to be program-readable.  It consists
230# of the /dev node, a tab, a content hint (if applicable), another tab, and a
231# mount point (if any filesystems were mounted)."
[f04ae51]232#
233# In reality, it seems there are also some spaces before each tab character.
[ab66f3c]234hdid_output=`hdid survex-macosx.dmg|tail -1`
235echo "Last line of hdid output was: $hdid_output"
[f04ae51]236dev=`echo "$hdid_output"|sed 's!/dev/\([^        ]*\).*!\1!'`
[fc4d068]237mount_point=`echo "$hdid_output"|sed 's!.*      !!'`
[ab66f3c]238
239echo "Device $dev mounted on $mount_point, copying files into image."
240ditto -rsrcFork Survex "$mount_point/Survex"
241ditto lib/INSTALL.OSX "$mount_point/INSTALL"
242
[0580c6a]243echo "Detaching image."
[56980d4]244hdiutil detach "$dev"
[6df03c1]245
[d260645]246version=`sed 's/^VERSION *= *//p;d' Makefile`
[56980d4]247file=survex-macosx-$version.dmg
[6df03c1]248echo "Compressing image file survex-macosx.dmg to $file"
[7303bda]249# UDBZ means the resultant disk image will only open on OS X 10.4 or above.
250# UDZO works on 10.1 and later, but is larger,  UDCO works on 10.0 as well.
251hdiutil convert survex-macosx.dmg -format UDBZ -o "$file"
[0580c6a]252rm survex-macosx.dmg
[6df03c1]253
254echo "$file created successfully."
Note: See TracBrowser for help on using the repository browser.