doc/build-macos.md
author Damiano Boppart <damiano@pep-security.net>
Tue, 29 Aug 2017 00:56:32 +0200
branchENGINE-237
changeset 2015 eefffcd9f781
parent 2014 4b6659d17b61
child 2019 6c2b325f2056
permissions -rw-r--r--
Formatting cleanup
     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
     4 See CC_BY-SA.txt -->
     5 
     6 # Build instructions for macOS Sierra and iOS
     7 
     8 # Installing packaged dependencies
     9 
    10 ## MacPorts
    11 
    12 MacPorts is needed to install some compile-time dependencies.
    13 Install MacPorts according to the instructions found [here](https://www.macports.org/install.php).
    14 Ensure that Macports' binary paths (`/opt/local/bin` and `/opt/local/sbin`) are in your `PATH` environment variable.
    15 
    16 ~~~
    17 # general
    18 sudo port install mercurial
    19 # YML2
    20 sudo port install py27-lxml
    21 # libetpan
    22 sudo port install git autoconf automake libtool
    23 # asn1c
    24 sudo port install asn1c
    25 # engine
    26 sudo port install gpgme
    27 ~~~
    28 
    29 FIXME Are `zlib openssl cyrus-sasl2` needed?
    30 They were present in an older revision of the build instructions.
    31 
    32 Ensure that `python` is Python 2.7:
    33 
    34 ~~~
    35 sudo port select python python27
    36 ~~~
    37 
    38 # Installing unpackaged dependencies
    39 ## YML2
    40 
    41 ~~~
    42 mkdir -p ~/code/yml2
    43 hg clone https://cacert.pep.foundation/dev/repos/yml2/ ~/code/yml2
    44 ~~~
    45 
    46 ## libetpan
    47 pEp Engine requires libetpan with a set of patches that have not been upstreamed yet.
    48 
    49 ~~~
    50 mkdir -p ~/code/libetpan
    51 git clone https://github.com/fdik/libetpan ~/code/libetpan
    52 cd ~/code/libetpan
    53 mkdir ~/code/libetpan/build
    54 ./autogen.sh --prefix="$HOME/code/libetpan/build"
    55 make
    56 make install
    57 ~~~
    58 
    59 ## GPGME
    60 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.
    61 
    62 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.
    63 
    64 ~~~
    65 mkdir -p ~/code/gpgme/build/include
    66 cp /opt/local/include/gpg*.h ~/code/gpgme/build/include
    67 mkdir -p ~/code/gpgme/build/lib
    68 cp -r /opt/local/lib/libgpg* ~/code/gpgme/build/lib
    69 ~~~
    70 
    71 It's of course possible to skip MacPort's version, and use a self-compiled GPGME/GPG.
    72 
    73 # pEp Engine
    74 
    75 ~~~
    76 mkdir -p ~/code/pep-engine
    77 hg clone https://cacert.pep.foundation/dev/repos/pEpEngine/ ~/code/pep-engine
    78 cd ~/code/pep-engine
    79 mkdir ~/code/pep-engine/build
    80 ~~~
    81 
    82 For an explanation of the mechanics of `PLATFORM_OVERRIDE`, see the inline comments in `Makefile.conf`.
    83 In this guide, the platform-specific configuration will be called `local`.
    84 The installation directory will be a subdirectory of the repository.
    85 This is useful for testing only.
    86 
    87 ~~~
    88 export PLATFORM_OVERRIDE=local
    89 ~~~
    90 
    91 `./build-config/local.conf`:
    92 
    93 ~~~
    94 PREFIX=$(HOME)/code/pep-engine/build
    95 SYSTEM_DB=$(PREFIX)/share/pEp/system.db
    96 
    97 YML2_PATH=$(HOME)/code/yml2
    98 
    99 ETPAN_LIB=-L$(HOME)/code/libetpan/build/lib
   100 ETPAN_INC=-I$(HOME)/code/libetpan/build/include
   101 
   102 GPGME_LIB=-L$(HOME)/code/gpgme/build/lib
   103 GPGME_INC=-I$(HOME)/code/gpgme/build/include
   104 ~~~
   105 
   106 The engine is built as follows:
   107 
   108 ~~~
   109 make all
   110 make db
   111 ~~~
   112 
   113 The unit tests can be run without the engine library being installed, however `system.db` must be installed:
   114 
   115 ~~~
   116 make -C db install
   117 ~~~
   118 
   119 Since `system.db` rarely changes, its installation is not needed for every build.
   120 
   121 Tests can be compiled and executed with the following commands:
   122 
   123 ~~~
   124 make -C test compile
   125 make test
   126 ~~~