From 2252f6fce512a80a7c340a81b166a751566a0e61 Mon Sep 17 00:00:00 2001 From: Dirk Zimmermann Date: Sat, 9 Jul 2016 10:49:10 +0200 Subject: [PATCH] Documenting macOS build, using MacPorts --- Makefile.conf | 3 -- README-OSX.md | 114 ++++++++++++++++++++++++++++++++++++++++++++---- macports_env.sh | 14 ++++++ src/Makefile | 2 +- 4 files changed, 120 insertions(+), 13 deletions(-) create mode 100644 macports_env.sh diff --git a/Makefile.conf b/Makefile.conf index bff20bb0..356a9a16 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -11,9 +11,6 @@ YML2PROC=$(HOME)/yml2/yml2proc YML_PATH=$(HOME)/yml2 ASN1C=asn1c -# TODO: For brew this is /usr/local/share/asn1c -# On BSDs, it might be that as well. How to check? -# For now, it just works, even when it doesn't exist. ASN1C_INCLUDE=/opt/local/share/asn1c # C makros (not environment variables) to overwrite: diff --git a/README-OSX.md b/README-OSX.md index 046ff01e..fccd2929 100644 --- a/README-OSX.md +++ b/README-OSX.md @@ -1,23 +1,119 @@ -# Dependencies +# Building for OS X/macOS -You need a working [asn1c](https://lionet.info/asn1c/blog/). +See also README.txt for general information. + +## Dependencies + +### MacPorts + +Install [MacPorts](https://www.macports.org/) for your +[version of OS X/macOS](https://www.macports.org/install.php). + +Note that you need [Xcode installed](https://www.macports.org/install.php) +for MacPorts, and for building the engine. You also need to accept Xcode's EULA. + +*Note*: Use the script `macports_env.sh` (or a similar one) to set up a clean build environment +before building the engine: ``` -brew install asn1c +. macports_env.sh ``` -# Building for OS X +If you don't use that environment, please make sure you've set up all search paths correctly. + +#### MacPorts dependencies + +``` +sudo port install mercurial +sudo port install py27-lxml +sudo port install gpgme +sudo port install autoconf +sudo port install asn1c +sudo port install zlib +``` + +### Other dependecies + +#### [yml2](https://fdik.org/yml/toolchain) -* TODO: which dependencies can be fetched via "brew" and which have to be compiled manually? +Install into your home directory: -## Build libetpan +``` +pushd ~ +curl -LO http://fdik.org/yml2.tar.bz2 +tar xf yml2.tar.bz2 +rm yml2.tar.bz2* +popd +``` + +#### libetpan + +Note: libetpan needs libz and libiconv, but the libiconv from MacPorts is not compatible, some +functions seem to have been renamed there. Therefore the dynlib from OS X is used. ``` -cd pEpEngine <--- huh? to build libetpan??? -autoreconf -vfi -./configure +git clone https://github.com/fdik/libetpan libetpan-osx +cd libetpan-osx/ +./autogen.sh make +cp ./src/.libs/libetpan.a ~/lib/ +``` + +##### libetpan with xcodebuild + +The build with autoconf (see previous section) is preferred. This is just for completeness. +*Don't actually build libetpan with xcodebuild.* + +``` +git clone https://github.com/fdik/libetpan libetpan-osx +cd libetpan-osx/build-mac +xcodebuild -project libetpan.xcodeproj/ -target "static libetpan" +mkdir ~/lib +cp build/Release/libetpan.a ~/lib/ +``` + +### Configuration + +You can change some defaults by editing `Makefile.conf`. But this readme assumes you don't. + +### Build + +``` +make clean +make all +make db +``` + +Done! The result should be (among others): + +``` +./src/libpEpEngine.a +./src/libpEpEngine.dylib +``` + +### Install + +Install (you might need sudo for some commands, depending on how your system is set up): + +``` make install +make -C db install +``` + +Since the `system.db` rarely changes, `make -C db install` is not needed for every build. + +### Run tests + +Make sure that you add `/opt/local/lib` to each definition of `LD_LIBRARY_PATH` +in `test/Makefile`. This ensures that libgpgme will be found: + +``` +test: pEpEngineTest + LD_LIBRARY_PATH=/opt/local/lib:~/lib:../src ./pEpEngineTest +``` + +``` +make test ``` # Building for iOS diff --git a/macports_env.sh b/macports_env.sh new file mode 100644 index 00000000..3e4c9397 --- /dev/null +++ b/macports_env.sh @@ -0,0 +1,14 @@ +# Typical pure MacPorts environment + +# Restrict to MacPorts +export PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin + +# Make sure the Apple python (which will be triggered by the makefile) +# has access to the Python libs installed for MacPorts +export PYTHONPATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ + +# YML processing might complain about that. Make sure the locale exists (locale -a) +export LC_ALL=en_US.UTF-8 + +# Search paths for includes used when doing YML processing +export YML_PATH=~/yml2/ diff --git a/src/Makefile b/src/Makefile index 1a3c68c7..243500a2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -14,7 +14,7 @@ LD?=clang CFLAGS?=-I$(GPGME_IN)/include -I$(HOME)/include -I/opt/local/include $(OPTIMIZE) -pedantic \ -DSYSTEM_DB=\"$(SYSTEM_DB)\" -DLIBGPGME=\"$(LIBGPGME)\" -I../asn.1 LDFLAGS?=-lc -shared -arch x86_64 \ - -L$(HOME)/lib -L/opt/local/lib -letpan -lsqlite3 -L../asn.1 -lasn1 + -L$(HOME)/lib -L/usr/lib -L/opt/local/lib -letpan -lsqlite3 -L../asn.1 -lasn1 -lz -liconv else $(error don't know how to make for $(BUILD_FOR) on $(BUILD_ON))