Plug a leak in CPDF_StreamParser::ReadInlineStream
[pdfium.git] / README.md
1 # Building PDFium
2
3 ## Prerequisites
4
5 Get the chromium depot tools via the instructions at
6 http://www.chromium.org/developers/how-tos/install-depot-tools (this provides
7 the gclient utilty needed below).
8
9 Also install Python, Subversion, and Git and make sure they're in your path.
10
11 Optionally, you may want to install the [Ninja](http://martine.github.io/ninja/)
12 build system (recommended) rather than using your platform-specific build
13 system.
14
15 ## Get the code
16
17 ```
18 mkdir pdfium
19 cd pdfium
20 gclient config --name . --unmanaged https://pdfium.googlesource.com/pdfium.git
21 gclient sync
22 ```
23
24 ## Generate the build files
25
26 Now we use the GYP library to generate the build files.
27
28 At this point, you have two options. The first option is to use the [Ninja]
29 (http://martine.github.io/ninja/) build system. This is the default as of
30 mid-September, 2015. Previously, the second option was the default. Most PDFium
31 developers use Ninja, as does our [continuous build system]
32 (http://build.chromium.org/p/client.pdfium/).
33
34 On Windows: `build\gyp_pdfium
35 ` For all other platforms: `build/gyp_pdfium
36 `
37
38 The second option is to generate platform-specific build files, i.e. Makefiles
39 on Linux, sln files on Windows, and xcodeproj files on Mac. To do so, set the
40 GYP\_GENERATORS environment variable appropriately (e.g. "make", "msvs", or
41 "xcode") before running the above command.
42
43 ## Building the code
44
45 If you used Ninja, you can build the sample program by: `ninja -C out/Debug
46 pdfium_test
47 ` You can build the entire product (which includes a few unit tests) by: `ninja
48 -C out/Debug
49 `
50
51 If you're not using Ninja, then building is platform-specific.
52
53 On Linux: `make pdfium_test
54 `
55
56 On Mac, open build/all.xcodeproj
57
58 On Windows, open build\all.sln
59
60 ## Running the sample program
61
62 The pdfium\_test program supports reading, parsing, and rasterizing the pages of
63 a .pdf file to .ppm or .png output image files (windows supports two other
64 formats). For example: `out/Debug/pdfium_test --ppm path/to/myfile.pdf
65 `
66
67 ## Waterfall
68
69 The current health of the source tree can be found at
70 http://build.chromium.org/p/client.pdfium/console
71
72 ## Bugs
73
74  We will be using this
75 [bug tracker](https://code.google.com/p/pdfium/issues/list), but for security
76 bugs, please use [Chromium's security bug template]
77 (https://code.google.com/p/chromium/issues/entry?template=Security%20Bug)
78 and add the "Cr-Internals-Plugins-PDF" label.
79
80 ## Contributing code
81
82 For contributing code, we will follow
83 [Chromium's process](http://dev.chromium.org/developers/contributing-code)
84 as much as possible. The main exceptions are:
85
86 1. Code has to conform to the existing style and not Chromium/Google style.
87 2. There is no commit queue, approved committers can land their changes via
88 `git cl land`
89 3. Changes must be merged to the XFA branch as well (see below).
90
91 ## Branches
92
93 There is a branch for a forthcoming feature called XFA that you can get by
94 following the steps above, then:
95
96 ```
97 git checkout origin/xfa
98 build/gyp_pdfium
99 ninja -C out/Debug
100 ```
101
102 Merging to XFA requires:
103
104 ```
105 git checkout origin/xfa
106 git checkout -b merge_branch
107 git branch --set-upstream-to=origin/xfa
108 git cherry-pick -x <commit hash>
109 git commit --amend # add Merge to XFA
110 git cl upload
111 ```
112
113 Then wait for approval, and `git cl land`