source: git/buildmacosx.sh @ c72a344

line_contentsstereotravis-osx
Last change on this file since c72a344 was c72a344, checked in by Olly Betts <olly@…>, 5 years ago

buildmacosx.sh: Move the instructions about specifying the
architecture to the top of the file with the other instructions.

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