1 <!-- Copyright 2015-2017, pEp foundation, Switzerland
2 This file is part of the pEp Engine
3 This file may be used under the terms of the Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) License
6 # Build instructions for macOS Sierra
8 # Installing packaged dependencies
9 You will find instructions for using either Macports or Homebrew below to install the compile-time dependencies.
12 Install MacPorts according to the instructions found [here](https://www.macports.org/install.php).
13 Ensure that Macports' binary paths (`/opt/local/bin` and `/opt/local/sbin`) are in your `PATH` environment variable.
17 sudo port install mercurial
19 sudo port install py27-lxml
21 sudo port install git autoconf automake libtool
23 sudo port install asn1c
25 sudo port install gpgme
28 Ensure that `python` is Python 2.7:
31 sudo port select python python27
35 Install Homebrew according to the instructions found [here](https://docs.brew.sh/Installation.html).
36 Ensure that Homebrew's binary path (`/usr/local/bin`) is in your `PATH` environment variable.
40 brew install mercurial
42 # If you don't have pip with your Python 2 distribution, you can install it with brew
44 pip2 install --user lxml
46 brew install git autoconf automake libtool
53 # Installing unpackaged dependencies
55 To check if lxml is properly installed, you can use this lxml "hello world" command:
58 python2 -c 'from lxml import etree; root = etree.Element("root"); print(root.tag)'
61 It should generate the following output:
69 hg clone https://pep.foundation/dev/repos/yml2/ ~/code/yml2
73 pEp Engine requires libetpan with a set of patches that have not been upstreamed yet.
76 mkdir -p ~/code/libetpan
77 git clone https://github.com/fdik/libetpan ~/code/libetpan
79 mkdir ~/code/libetpan/build
80 ./autogen.sh --prefix="$HOME/code/libetpan/build"
86 The MacPorts-packaged GPGME links to a version of GNU libiconv that has files in the same include/library paths as GPGME. This version of libiconv must not be visible to the linker when the pEp Engine is build or run.
88 Thus the files of the GPGME distribution will have to be manually copied to separate include/library folders, so that no include or library paths used for building the pEp Engine contains files of MacPorts' libiconv distribution.
91 mkdir -p ~/code/gpgme/build/include
92 cp /opt/local/include/gpg*.h ~/code/gpgme/build/include
93 mkdir -p ~/code/gpgme/build/lib
94 cp -r /opt/local/lib/libgpg* ~/code/gpgme/build/lib
97 It's of course possible to skip MacPort's version, and use a self-compiled GPGME/GPG. The default build configuration assumes this case, and assumes you have installed your GPGME with `$(HOME)` as your prefix.
102 mkdir -p ~/code/pep-engine
103 hg clone https://pep.foundation/dev/repos/pEpEngine/ ~/code/pep-engine
105 mkdir ~/code/pep-engine/build
108 Edit the build configuration to your needs in `Makefile.conf`, or create a `local.conf` that sets any of the make variables documented in `Makefile.conf`. All the default values for the build configuration variables on each platform are documented in `default.conf`.
110 If a dependency is not found in your system's default include or library paths, you will have to specify the according paths in a make variable. Typically, this has to be done at least for YML2, and libetpan.
112 For a more detailed explanation of the mechanics of these build configuration files, and overriding defaults, see the comments in `default.conf`.
114 Below is a sample `./local.conf` file, for orientation.
117 PREFIX=$(HOME)/code/engine/build
118 SYSTEM_DB=$(PREFIX)/share/pEp/system.db
120 YML2_PATH=$(HOME)/code/yml2
122 ETPAN_LIB=-L$(HOME)/code/libetpan/build/lib
123 ETPAN_INC=-I$(HOME)/code/libetpan/build/include
125 GPGME_LIB=-L$(HOME)/lib
126 GPGME_INC=-I$(HOME)/include
129 The engine is built as follows:
136 If your build fails with an error message similar to the following:
139 File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 477, in _parse_localename
140 raise ValueError, 'unknown locale: %s' % localename
141 ValueError: unknown locale: UTF-8
144 or any other locale-related Python error, make sure Python does not have any locale-related environment variables set.
145 Usually, `unset LC_CTYPE` is sufficient to take care of the problem, but it depends on your macOS's regional and language settings and which terminal emulator you use.
146 This is a bug in Python, see [https://bugs.python.org/issue18378#msg215215](https://bugs.python.org/issue18378#msg215215).
148 The unit tests can be run without the engine library being installed, however `system.db` must be installed:
154 Since `system.db` rarely changes, its installation is not needed for every build.
156 Tests can be compiled and executed with the following commands: