Make some not-so-important CPL read errors non-fatal (DoM #2797).
[libdcp.git] / README.md
1 # libdcp
2
3 Library for reading and writing Digital Cinema Packages (DCPs).
4
5
6 # Acknowledgements
7
8 Wolfgang Woehl's cinemaslides was most informative on the
9 nasty details of encryption.
10
11 libdcp is written by Carl Hetherington and Mart Jansink.
12 Bugfixes were received from Philip Tschiemer.
13
14
15 # Building
16
17 ```
18   ./waf configure
19   ./waf
20   sudo ./waf install
21 ```
22
23
24 # Dependencies
25
26 - pkg-config (for build system)
27 - boost (1.45 or above): filesystem, signals2, datetime and unit testing libraries
28 - openssl
29 - libxml++
30 - xmlsec
31 - sndfile
32 - openjpeg (1.5.0 or above)
33 - [libasdcp-cth](https://github.com/cth103/asdcplib-cth/tree/cth)
34 - [libcxml](https://github.com/cth103/libcxml)
35 - (optional) ImageMagick or GraphicsMagick (for examples)
36 - (optional) OpenMP
37 - (optional) gcov (for tests)
38
39
40 # Build options
41
42 ```
43   --target-windows      set up to do a cross-compile to Windows
44   --enable-debug        build with debugging information and without optimisation
45   --static              build libdcp statically, and link statically to openjpeg, cxml, asdcplib-cth
46   --disable-tests       disable building of tests
47   --disable-gcov        dont use gcov in tests
48   --disable-examples    disable building of examples
49   --enable-openmp       enable use of OpenMP
50   --openmp=OPENMP       Specify OpenMP Library to use: omp, gomp (default), iomp..
51   --jpeg=JPEG           specify JPEG library to build with: oj1 or oj2 for OpenJPEG 1.5.x or OpenJPEG 2.1.x respectively
52   --force-cpp11         force use of C++11
53 ```
54
55 # A note on building for macOS
56
57 As goto solution, all dependencies can be installed using [Homebrew](https://brew.sh/).
58 Make sure to add the respective `PKG_CONFIG_PATH` paths so the packages are indeed found.
59
60 ```bash
61 ## Default Homebrew paths
62 PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"
63 PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/pangomm/lib/pkgconfig"
64 PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libffi/lib/pkgconfig" # needed by gobject2
65 PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/openssl/lib/pkgconfig"
66 PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libxml2/lib/pkgconfig"
67
68 ## Set as installed
69 # PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/path-to-your-install-folder/libasdcp-cth"
70 # PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/path-to-your-install-folder/libcxml"
71
72 export PKG_CONFIG_PATH
73 ```
74
75 If you want support for *OpenMP*, the standard llvm compiler coming with Xcode (or rather its command line tools) does not support it such that you will have to override the compiler (using the `CXX` environment variable).
76 The version provided through Homebrew will work (or any of your choice) along with `--openmp=omp`.
77
78 ```bash
79 ## Default Homebrew path
80 export CXX=/usr/local/opt/llvm/bin/clang++
81 ```
82
83
84 # Documentation
85
86 Run doxygen in the top-level directory and then see build/doc/html/index.html.
87
88 There are some examples in the examples/ directory.
89
90
91 # Coding style
92
93 * Use C++11 but nothing higher, as we need the library to be usable on some quite old compilers.
94 * Put a Doxygen @file comment under the GPL banner in each source file.
95 * Two blank lines between methods, and between 'blocks' in headers.
96 * Doxygen comments in header files for public methods, source files for protected / private methods; no full stops after simple doxygen strings.
97 * Use `= delete` on copy constructors and assignment operators instead of boost::noncopyable.
98 * Initialise POD members in classes in the header.
99 * Use std::make_shared to create shared pointers to things.