xref: /freebsd/crypto/openssl/INSTALL.md (revision a7148ab39c03abd4d1a84997c70bf96f15dd2a09)
1b077aed3SPierre ProncheryBuild and Install
2b077aed3SPierre Pronchery=================
3b077aed3SPierre Pronchery
4b077aed3SPierre ProncheryThis document describes installation on all supported operating
5ad991e4cSEd Mastesystems: the Unix/Linux family (including macOS), OpenVMS,
6ad991e4cSEd Masteand Windows.
7b077aed3SPierre Pronchery
8b077aed3SPierre ProncheryTable of Contents
9b077aed3SPierre Pronchery=================
10b077aed3SPierre Pronchery
11b077aed3SPierre Pronchery - [Prerequisites](#prerequisites)
12b077aed3SPierre Pronchery - [Notational Conventions](#notational-conventions)
13b077aed3SPierre Pronchery - [Quick Installation Guide](#quick-installation-guide)
14b077aed3SPierre Pronchery   - [Building OpenSSL](#building-openssl)
15b077aed3SPierre Pronchery   - [Installing OpenSSL](#installing-openssl)
16b077aed3SPierre Pronchery - [Configuration Options](#configuration-options)
17b077aed3SPierre Pronchery   - [API Level](#api-level)
18b077aed3SPierre Pronchery   - [Cross Compile Prefix](#cross-compile-prefix)
19b077aed3SPierre Pronchery   - [Build Type](#build-type)
20b077aed3SPierre Pronchery   - [Directories](#directories)
21b077aed3SPierre Pronchery   - [Compiler Warnings](#compiler-warnings)
22b077aed3SPierre Pronchery   - [ZLib Flags](#zlib-flags)
23b077aed3SPierre Pronchery   - [Seeding the Random Generator](#seeding-the-random-generator)
24b077aed3SPierre Pronchery   - [Setting the FIPS HMAC key](#setting-the-FIPS-HMAC-key)
25b077aed3SPierre Pronchery   - [Enable and Disable Features](#enable-and-disable-features)
26b077aed3SPierre Pronchery   - [Displaying configuration data](#displaying-configuration-data)
27b077aed3SPierre Pronchery - [Installation Steps in Detail](#installation-steps-in-detail)
28b077aed3SPierre Pronchery   - [Configure](#configure-openssl)
29b077aed3SPierre Pronchery   - [Build](#build-openssl)
30b077aed3SPierre Pronchery   - [Test](#test-openssl)
31b077aed3SPierre Pronchery   - [Install](#install-openssl)
32b077aed3SPierre Pronchery - [Advanced Build Options](#advanced-build-options)
33b077aed3SPierre Pronchery   - [Environment Variables](#environment-variables)
34b077aed3SPierre Pronchery   - [Makefile Targets](#makefile-targets)
35b077aed3SPierre Pronchery   - [Running Selected Tests](#running-selected-tests)
36b077aed3SPierre Pronchery - [Troubleshooting](#troubleshooting)
37b077aed3SPierre Pronchery   - [Configuration Problems](#configuration-problems)
38b077aed3SPierre Pronchery   - [Build Failures](#build-failures)
39b077aed3SPierre Pronchery   - [Test Failures](#test-failures)
40b077aed3SPierre Pronchery - [Notes](#notes)
41b077aed3SPierre Pronchery   - [Notes on multi-threading](#notes-on-multi-threading)
42b077aed3SPierre Pronchery   - [Notes on shared libraries](#notes-on-shared-libraries)
43b077aed3SPierre Pronchery   - [Notes on random number generation](#notes-on-random-number-generation)
44b077aed3SPierre Pronchery   - [Notes on assembler modules compilation](#notes-on-assembler-modules-compilation)
45b077aed3SPierre Pronchery
46b077aed3SPierre ProncheryPrerequisites
47b077aed3SPierre Pronchery=============
48b077aed3SPierre Pronchery
49b077aed3SPierre ProncheryTo install OpenSSL, you will need:
50b077aed3SPierre Pronchery
51b077aed3SPierre Pronchery * A "make" implementation
52b077aed3SPierre Pronchery * Perl 5 with core modules (please read [NOTES-PERL.md](NOTES-PERL.md))
53b077aed3SPierre Pronchery * The Perl module `Text::Template` (please read [NOTES-PERL.md](NOTES-PERL.md))
54b077aed3SPierre Pronchery * an ANSI C compiler
55b077aed3SPierre Pronchery * a development environment in the form of development libraries and C
56b077aed3SPierre Pronchery   header files
57b077aed3SPierre Pronchery * a supported operating system
58b077aed3SPierre Pronchery
59b077aed3SPierre ProncheryFor additional platform specific requirements, solutions to specific
60b077aed3SPierre Proncheryissues and other details, please read one of these:
61b077aed3SPierre Pronchery
62b077aed3SPierre Pronchery * [Notes for UNIX-like platforms](NOTES-UNIX.md)
63b077aed3SPierre Pronchery * [Notes for Android platforms](NOTES-ANDROID.md)
64b077aed3SPierre Pronchery * [Notes for Windows platforms](NOTES-WINDOWS.md)
65b077aed3SPierre Pronchery * [Notes for the DOS platform with DJGPP](NOTES-DJGPP.md)
66b077aed3SPierre Pronchery * [Notes for the OpenVMS platform](NOTES-VMS.md)
67b077aed3SPierre Pronchery * [Notes on Perl](NOTES-PERL.md)
68b077aed3SPierre Pronchery * [Notes on Valgrind](NOTES-VALGRIND.md)
69b077aed3SPierre Pronchery
70b077aed3SPierre ProncheryNotational conventions
71b077aed3SPierre Pronchery======================
72b077aed3SPierre Pronchery
73b077aed3SPierre ProncheryThroughout this document, we use the following conventions.
74b077aed3SPierre Pronchery
75b077aed3SPierre ProncheryCommands
76b077aed3SPierre Pronchery--------
77b077aed3SPierre Pronchery
78b077aed3SPierre ProncheryAny line starting with a dollar sign is a command line.
79b077aed3SPierre Pronchery
80b077aed3SPierre Pronchery    $ command
81b077aed3SPierre Pronchery
82b077aed3SPierre ProncheryThe dollar sign indicates the shell prompt and is not to be entered as
83b077aed3SPierre Proncherypart of the command.
84b077aed3SPierre Pronchery
85b077aed3SPierre ProncheryChoices
86b077aed3SPierre Pronchery-------
87b077aed3SPierre Pronchery
88b077aed3SPierre ProncherySeveral words in curly braces separated by pipe characters indicate a
89b077aed3SPierre Pronchery**mandatory choice**, to be replaced with one of the given words.
90b077aed3SPierre ProncheryFor example, the line
91b077aed3SPierre Pronchery
92b077aed3SPierre Pronchery    $ echo { WORD1 | WORD2 | WORD3 }
93b077aed3SPierre Pronchery
94b077aed3SPierre Proncheryrepresents one of the following three commands
95b077aed3SPierre Pronchery
96b077aed3SPierre Pronchery    $ echo WORD1
97b077aed3SPierre Pronchery    - or -
98b077aed3SPierre Pronchery    $ echo WORD2
99b077aed3SPierre Pronchery    - or -
100b077aed3SPierre Pronchery    $ echo WORD3
101b077aed3SPierre Pronchery
102b077aed3SPierre ProncheryOne or several words in square brackets separated by pipe characters
103b077aed3SPierre Proncherydenote an **optional choice**.  It is similar to the mandatory choice,
104b077aed3SPierre Proncherybut it can also be omitted entirely.
105b077aed3SPierre Pronchery
106b077aed3SPierre ProncherySo the line
107b077aed3SPierre Pronchery
108b077aed3SPierre Pronchery    $ echo [ WORD1 | WORD2 | WORD3 ]
109b077aed3SPierre Pronchery
110b077aed3SPierre Proncheryrepresents one of the four commands
111b077aed3SPierre Pronchery
112b077aed3SPierre Pronchery    $ echo WORD1
113b077aed3SPierre Pronchery    - or -
114b077aed3SPierre Pronchery    $ echo WORD2
115b077aed3SPierre Pronchery    - or -
116b077aed3SPierre Pronchery    $ echo WORD3
117b077aed3SPierre Pronchery    - or -
118b077aed3SPierre Pronchery    $ echo
119b077aed3SPierre Pronchery
120b077aed3SPierre ProncheryArguments
121b077aed3SPierre Pronchery---------
122b077aed3SPierre Pronchery
123b077aed3SPierre Pronchery**Mandatory arguments** are enclosed in double curly braces.
124b077aed3SPierre ProncheryA simple example would be
125b077aed3SPierre Pronchery
126b077aed3SPierre Pronchery    $ type {{ filename }}
127b077aed3SPierre Pronchery
128b077aed3SPierre Proncherywhich is to be understood to use the command `type` on some file name
129b077aed3SPierre Proncherydetermined by the user.
130b077aed3SPierre Pronchery
131b077aed3SPierre Pronchery**Optional Arguments** are enclosed in double square brackets.
132b077aed3SPierre Pronchery
133b077aed3SPierre Pronchery    [[ options ]]
134b077aed3SPierre Pronchery
135b077aed3SPierre ProncheryNote that the notation assumes spaces around `{`, `}`, `[`, `]`, `{{`, `}}` and
136b077aed3SPierre Pronchery`[[`, `]]`.  This is to differentiate from OpenVMS directory
137b077aed3SPierre Proncheryspecifications, which also use [ and ], but without spaces.
138b077aed3SPierre Pronchery
139b077aed3SPierre ProncheryQuick Installation Guide
140b077aed3SPierre Pronchery========================
141b077aed3SPierre Pronchery
142b077aed3SPierre ProncheryIf you just want to get OpenSSL installed without bothering too much
143b077aed3SPierre Proncheryabout the details, here is the short version of how to build and install
144b077aed3SPierre ProncheryOpenSSL.  If any of the following steps fails, please consult the
145b077aed3SPierre Pronchery[Installation in Detail](#installation-steps-in-detail) section below.
146b077aed3SPierre Pronchery
147b077aed3SPierre ProncheryBuilding OpenSSL
148b077aed3SPierre Pronchery----------------
149b077aed3SPierre Pronchery
150b077aed3SPierre ProncheryUse the following commands to configure, build and test OpenSSL.
151b077aed3SPierre ProncheryThe testing is optional, but recommended if you intend to install
152b077aed3SPierre ProncheryOpenSSL for production use.
153b077aed3SPierre Pronchery
154b077aed3SPierre Pronchery### Unix / Linux / macOS
155b077aed3SPierre Pronchery
156b077aed3SPierre Pronchery    $ ./Configure
157b077aed3SPierre Pronchery    $ make
158b077aed3SPierre Pronchery    $ make test
159b077aed3SPierre Pronchery
160b077aed3SPierre Pronchery### OpenVMS
161b077aed3SPierre Pronchery
162b077aed3SPierre ProncheryUse the following commands to build OpenSSL:
163b077aed3SPierre Pronchery
164b077aed3SPierre Pronchery    $ perl Configure
165b077aed3SPierre Pronchery    $ mms
166b077aed3SPierre Pronchery    $ mms test
167b077aed3SPierre Pronchery
168b077aed3SPierre Pronchery### Windows
169b077aed3SPierre Pronchery
170b077aed3SPierre ProncheryIf you are using Visual Studio, open a Developer Command Prompt and
171b077aed3SPierre Proncheryissue the following commands to build OpenSSL.
172b077aed3SPierre Pronchery
173b077aed3SPierre Pronchery    $ perl Configure
174b077aed3SPierre Pronchery    $ nmake
175b077aed3SPierre Pronchery    $ nmake test
176b077aed3SPierre Pronchery
177b077aed3SPierre ProncheryAs mentioned in the [Choices](#choices) section, you need to pick one
178b077aed3SPierre Proncheryof the four Configure targets in the first command.
179b077aed3SPierre Pronchery
180b077aed3SPierre ProncheryMost likely you will be using the `VC-WIN64A` target for 64bit Windows
181b077aed3SPierre Proncherybinaries (AMD64) or `VC-WIN32` for 32bit Windows binaries (X86).
182b077aed3SPierre ProncheryThe other two options are `VC-WIN64I` (Intel IA64, Itanium) and
183b077aed3SPierre Pronchery`VC-CE` (Windows CE) are rather uncommon nowadays.
184b077aed3SPierre Pronchery
185b077aed3SPierre ProncheryInstalling OpenSSL
186b077aed3SPierre Pronchery------------------
187b077aed3SPierre Pronchery
188b077aed3SPierre ProncheryThe following commands will install OpenSSL to a default system location.
189b077aed3SPierre Pronchery
190b077aed3SPierre Pronchery**Danger Zone:** even if you are impatient, please read the following two
191b077aed3SPierre Proncheryparagraphs carefully before you install OpenSSL.
192b077aed3SPierre Pronchery
193b077aed3SPierre ProncheryFor security reasons the default system location is by default not writable
194b077aed3SPierre Proncheryfor unprivileged users.  So for the final installation step administrative
195b077aed3SPierre Proncheryprivileges are required.  The default system location and the procedure to
196b077aed3SPierre Proncheryobtain administrative privileges depends on the operating system.
197b077aed3SPierre ProncheryIt is recommended to compile and test OpenSSL with normal user privileges
198b077aed3SPierre Proncheryand use administrative privileges only for the final installation step.
199b077aed3SPierre Pronchery
200b077aed3SPierre ProncheryOn some platforms OpenSSL is preinstalled as part of the Operating System.
201b077aed3SPierre ProncheryIn this case it is highly recommended not to overwrite the system versions,
202b077aed3SPierre Proncherybecause other applications or libraries might depend on it.
203b077aed3SPierre ProncheryTo avoid breaking other applications, install your copy of OpenSSL to a
204b077aed3SPierre Pronchery[different location](#installing-to-a-different-location) which is not in
205b077aed3SPierre Proncherythe global search path for system libraries.
206b077aed3SPierre Pronchery
207b077aed3SPierre ProncheryFinally, if you plan on using the FIPS module, you need to read the
208b077aed3SPierre Pronchery[Post-installation Notes](#post-installation-notes) further down.
209b077aed3SPierre Pronchery
210b077aed3SPierre Pronchery### Unix / Linux / macOS
211b077aed3SPierre Pronchery
212b077aed3SPierre ProncheryDepending on your distribution, you need to run the following command as
213b077aed3SPierre Proncheryroot user or prepend `sudo` to the command:
214b077aed3SPierre Pronchery
215b077aed3SPierre Pronchery    $ make install
216b077aed3SPierre Pronchery
217b077aed3SPierre ProncheryBy default, OpenSSL will be installed to
218b077aed3SPierre Pronchery
219b077aed3SPierre Pronchery    /usr/local
220b077aed3SPierre Pronchery
221b077aed3SPierre ProncheryMore precisely, the files will be installed into the  subdirectories
222b077aed3SPierre Pronchery
223b077aed3SPierre Pronchery    /usr/local/bin
224b077aed3SPierre Pronchery    /usr/local/lib
225b077aed3SPierre Pronchery    /usr/local/include
226b077aed3SPierre Pronchery    ...
227b077aed3SPierre Pronchery
228b077aed3SPierre Proncherydepending on the file type, as it is custom on Unix-like operating systems.
229b077aed3SPierre Pronchery
230b077aed3SPierre Pronchery### OpenVMS
231b077aed3SPierre Pronchery
232b077aed3SPierre ProncheryUse the following command to install OpenSSL.
233b077aed3SPierre Pronchery
234b077aed3SPierre Pronchery    $ mms install
235b077aed3SPierre Pronchery
236b077aed3SPierre ProncheryBy default, OpenSSL will be installed to
237b077aed3SPierre Pronchery
238b077aed3SPierre Pronchery    SYS$COMMON:[OPENSSL]
239b077aed3SPierre Pronchery
240b077aed3SPierre Pronchery### Windows
241b077aed3SPierre Pronchery
242b077aed3SPierre ProncheryIf you are using Visual Studio, open the Developer Command Prompt _elevated_
243b077aed3SPierre Proncheryand issue the following command.
244b077aed3SPierre Pronchery
245b077aed3SPierre Pronchery    $ nmake install
246b077aed3SPierre Pronchery
247b077aed3SPierre ProncheryThe easiest way to elevate the Command Prompt is to press and hold down both
248b077aed3SPierre Proncherythe `<CTRL>` and `<SHIFT>` keys while clicking the menu item in the task menu.
249b077aed3SPierre Pronchery
250b077aed3SPierre ProncheryThe default installation location is
251b077aed3SPierre Pronchery
252b077aed3SPierre Pronchery    C:\Program Files\OpenSSL
253b077aed3SPierre Pronchery
254b077aed3SPierre Proncheryfor native binaries, or
255b077aed3SPierre Pronchery
256b077aed3SPierre Pronchery    C:\Program Files (x86)\OpenSSL
257b077aed3SPierre Pronchery
258b077aed3SPierre Proncheryfor 32bit binaries on 64bit Windows (WOW64).
259b077aed3SPierre Pronchery
260b077aed3SPierre Pronchery#### Installing to a different location
261b077aed3SPierre Pronchery
262b077aed3SPierre ProncheryTo install OpenSSL to a different location (for example into your home
263b077aed3SPierre Proncherydirectory for testing purposes) run `Configure` as shown in the following
264b077aed3SPierre Proncheryexamples.
265b077aed3SPierre Pronchery
266b077aed3SPierre ProncheryThe options `--prefix` and `--openssldir` are explained in further detail in
267b077aed3SPierre Pronchery[Directories](#directories) below, and the values used here are mere examples.
268b077aed3SPierre Pronchery
269b077aed3SPierre ProncheryOn Unix:
270b077aed3SPierre Pronchery
271b077aed3SPierre Pronchery    $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl
272b077aed3SPierre Pronchery
273b077aed3SPierre ProncheryOn OpenVMS:
274b077aed3SPierre Pronchery
275b077aed3SPierre Pronchery    $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
276b077aed3SPierre Pronchery
277b077aed3SPierre ProncheryNote: if you do add options to the configuration command, please make sure
278b077aed3SPierre Proncheryyou've read more than just this Quick Start, such as relevant `NOTES-*` files,
279b077aed3SPierre Proncherythe options outline below, as configuration options may change the outcome
280b077aed3SPierre Proncheryin otherwise unexpected ways.
281b077aed3SPierre Pronchery
282b077aed3SPierre ProncheryConfiguration Options
283b077aed3SPierre Pronchery=====================
284b077aed3SPierre Pronchery
285b077aed3SPierre ProncheryThere are several options to `./Configure` to customize the build (note that
286b077aed3SPierre Proncheryfor Windows, the defaults for `--prefix` and `--openssldir` depend on what
287b077aed3SPierre Proncheryconfiguration is used and what Windows implementation OpenSSL is built on.
288b077aed3SPierre ProncheryFor more information, see the [Notes for Windows platforms](NOTES-WINDOWS.md).
289b077aed3SPierre Pronchery
290b077aed3SPierre ProncheryAPI Level
291b077aed3SPierre Pronchery---------
292b077aed3SPierre Pronchery
293b077aed3SPierre Pronchery    --api=x.y[.z]
294b077aed3SPierre Pronchery
295b077aed3SPierre ProncheryBuild the OpenSSL libraries to support the API for the specified version.
296b077aed3SPierre ProncheryIf [no-deprecated](#no-deprecated) is also given, don't build with support
297b077aed3SPierre Proncheryfor deprecated APIs in or below the specified version number.  For example,
298b077aed3SPierre Proncheryadding
299b077aed3SPierre Pronchery
300b077aed3SPierre Pronchery    --api=1.1.0 no-deprecated
301b077aed3SPierre Pronchery
302b077aed3SPierre Proncherywill remove support for all APIs that were deprecated in OpenSSL version
303b077aed3SPierre Pronchery1.1.0 or below.  This is a rather specialized option for developers.
304b077aed3SPierre ProncheryIf you just intend to remove all deprecated APIs up to the current version
305b077aed3SPierre Proncheryentirely, just specify [no-deprecated](#no-deprecated).
306b077aed3SPierre ProncheryIf `--api` isn't given, it defaults to the current (minor) OpenSSL version.
307b077aed3SPierre Pronchery
308b077aed3SPierre ProncheryCross Compile Prefix
309b077aed3SPierre Pronchery--------------------
310b077aed3SPierre Pronchery
311b077aed3SPierre Pronchery    --cross-compile-prefix=<PREFIX>
312b077aed3SPierre Pronchery
313b077aed3SPierre ProncheryThe `<PREFIX>` to include in front of commands for your toolchain.
314b077aed3SPierre Pronchery
315b077aed3SPierre ProncheryIt is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler
316b077aed3SPierre Proncheryas `a-b-c-gcc`, etc.  Unfortunately cross-compiling is too case-specific to put
317b077aed3SPierre Proncherytogether one-size-fits-all instructions.  You might have to pass more flags or
318b077aed3SPierre Proncheryset up environment variables to actually make it work.  Android and iOS cases
319b077aed3SPierre Proncheryare discussed in corresponding `Configurations/15-*.conf` files.  But there are
320b077aed3SPierre Proncherycases when this option alone is sufficient.  For example to build the mingw64
321b077aed3SPierre Proncherytarget on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works.  Naturally
322b077aed3SPierre Proncheryprovided that mingw packages are installed.  Today Debian and Ubuntu users
323b077aed3SPierre Proncheryhave option to install a number of prepackaged cross-compilers along with
324b077aed3SPierre Proncherycorresponding run-time and development packages for "alien" hardware.  To give
325b077aed3SPierre Proncheryanother example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such
326b077aed3SPierre Proncherycase.
327b077aed3SPierre Pronchery
328b077aed3SPierre ProncheryFor cross compilation, you must [configure manually](#manual-configuration).
329b077aed3SPierre ProncheryAlso, note that `--openssldir` refers to target's file system, not one you are
330b077aed3SPierre Proncherybuilding on.
331b077aed3SPierre Pronchery
332b077aed3SPierre ProncheryBuild Type
333b077aed3SPierre Pronchery----------
334b077aed3SPierre Pronchery
335b077aed3SPierre Pronchery    --debug
336b077aed3SPierre Pronchery
337b077aed3SPierre ProncheryBuild OpenSSL with debugging symbols and zero optimization level.
338b077aed3SPierre Pronchery
339b077aed3SPierre Pronchery    --release
340b077aed3SPierre Pronchery
341b077aed3SPierre ProncheryBuild OpenSSL without debugging symbols.  This is the default.
342b077aed3SPierre Pronchery
343b077aed3SPierre ProncheryDirectories
344b077aed3SPierre Pronchery-----------
345b077aed3SPierre Pronchery
346b077aed3SPierre Pronchery### libdir
347b077aed3SPierre Pronchery
348b077aed3SPierre Pronchery    --libdir=DIR
349b077aed3SPierre Pronchery
350b077aed3SPierre ProncheryThe name of the directory under the top of the installation directory tree
351b077aed3SPierre Pronchery(see the `--prefix` option) where libraries will be installed.  By default
352b077aed3SPierre Proncherythis is `lib`. Note that on Windows only static libraries (`*.lib`) will
353b077aed3SPierre Proncherybe stored in this location. Shared libraries (`*.dll`) will always be
354b077aed3SPierre Proncheryinstalled to the `bin` directory.
355b077aed3SPierre Pronchery
356b077aed3SPierre ProncherySome build targets have a multilib postfix set in the build configuration.
357b077aed3SPierre ProncheryFor these targets the default libdir is `lib<multilib-postfix>`. Please use
358b077aed3SPierre Pronchery`--libdir=lib` to override the libdir if adding the postfix is undesirable.
359b077aed3SPierre Pronchery
360b077aed3SPierre Pronchery### openssldir
361b077aed3SPierre Pronchery
362b077aed3SPierre Pronchery    --openssldir=DIR
363b077aed3SPierre Pronchery
364b077aed3SPierre ProncheryDirectory for OpenSSL configuration files, and also the default certificate
365b077aed3SPierre Proncheryand key store.  Defaults are:
366b077aed3SPierre Pronchery
367b077aed3SPierre Pronchery    Unix:           /usr/local/ssl
368b077aed3SPierre Pronchery    Windows:        C:\Program Files\Common Files\SSL
369b077aed3SPierre Pronchery    OpenVMS:        SYS$COMMON:[OPENSSL-COMMON]
370b077aed3SPierre Pronchery
371b077aed3SPierre ProncheryFor 32bit Windows applications on Windows 64bit (WOW64), always replace
372b077aed3SPierre Pronchery`C:\Program Files` by `C:\Program Files (x86)`.
373b077aed3SPierre Pronchery
374b077aed3SPierre Pronchery### prefix
375b077aed3SPierre Pronchery
376b077aed3SPierre Pronchery    --prefix=DIR
377b077aed3SPierre Pronchery
378b077aed3SPierre ProncheryThe top of the installation directory tree.  Defaults are:
379b077aed3SPierre Pronchery
380b077aed3SPierre Pronchery    Unix:           /usr/local
381b077aed3SPierre Pronchery    Windows:        C:\Program Files\OpenSSL
382b077aed3SPierre Pronchery    OpenVMS:        SYS$COMMON:[OPENSSL]
383b077aed3SPierre Pronchery
384b077aed3SPierre ProncheryCompiler Warnings
385b077aed3SPierre Pronchery-----------------
386b077aed3SPierre Pronchery
387b077aed3SPierre Pronchery    --strict-warnings
388b077aed3SPierre Pronchery
389b077aed3SPierre ProncheryThis is a developer flag that switches on various compiler options recommended
390b077aed3SPierre Proncheryfor OpenSSL development.  It only works when using gcc or clang as the compiler.
391b077aed3SPierre ProncheryIf you are developing a patch for OpenSSL then it is recommended that you use
392b077aed3SPierre Proncherythis option where possible.
393b077aed3SPierre Pronchery
394b077aed3SPierre ProncheryZLib Flags
395b077aed3SPierre Pronchery----------
396b077aed3SPierre Pronchery
397b077aed3SPierre Pronchery### with-zlib-include
398b077aed3SPierre Pronchery
399b077aed3SPierre Pronchery    --with-zlib-include=DIR
400b077aed3SPierre Pronchery
401b077aed3SPierre ProncheryThe directory for the location of the zlib include file.  This option is only
402b077aed3SPierre Proncherynecessary if [zlib](#zlib) is used and the include file is not
403b077aed3SPierre Proncheryalready on the system include path.
404b077aed3SPierre Pronchery
405b077aed3SPierre Pronchery### with-zlib-lib
406b077aed3SPierre Pronchery
407b077aed3SPierre Pronchery    --with-zlib-lib=LIB
408b077aed3SPierre Pronchery
409b077aed3SPierre Pronchery**On Unix**: this is the directory containing the zlib library.
410b077aed3SPierre ProncheryIf not provided the system library path will be used.
411b077aed3SPierre Pronchery
412b077aed3SPierre Pronchery**On Windows:** this is the filename of the zlib library (with or
413b077aed3SPierre Proncherywithout a path).  This flag must be provided if the
414b077aed3SPierre Pronchery[zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used
415b077aed3SPierre Proncherythen this flag is optional and defaults to `ZLIB1` if not provided.
416b077aed3SPierre Pronchery
417b077aed3SPierre Pronchery**On VMS:** this is the filename of the zlib library (with or without a path).
418b077aed3SPierre ProncheryThis flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32`
419b077aed3SPierre Proncheryor `GNV$LIBZSHR64` is used by default depending on the pointer size chosen.
420b077aed3SPierre Pronchery
421b077aed3SPierre ProncherySeeding the Random Generator
422b077aed3SPierre Pronchery----------------------------
423b077aed3SPierre Pronchery
424b077aed3SPierre Pronchery    --with-rand-seed=seed1[,seed2,...]
425b077aed3SPierre Pronchery
426b077aed3SPierre ProncheryA comma separated list of seeding methods which will be tried by OpenSSL
427b077aed3SPierre Proncheryin order to obtain random input (a.k.a "entropy") for seeding its
428b077aed3SPierre Proncherycryptographically secure random number generator (CSPRNG).
429b077aed3SPierre ProncheryThe current seeding methods are:
430b077aed3SPierre Pronchery
431b077aed3SPierre Pronchery### os
432b077aed3SPierre Pronchery
433b077aed3SPierre ProncheryUse a trusted operating system entropy source.
434b077aed3SPierre ProncheryThis is the default method if such an entropy source exists.
435b077aed3SPierre Pronchery
436b077aed3SPierre Pronchery### getrandom
437b077aed3SPierre Pronchery
438b077aed3SPierre ProncheryUse the [getrandom(2)][man-getrandom] or equivalent system call.
439b077aed3SPierre Pronchery
440b077aed3SPierre Pronchery[man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html
441b077aed3SPierre Pronchery
442b077aed3SPierre Pronchery### devrandom
443b077aed3SPierre Pronchery
444b077aed3SPierre ProncheryUse the first device from the `DEVRANDOM` list which can be opened to read
445b077aed3SPierre Proncheryrandom bytes.  The `DEVRANDOM` preprocessor constant expands to
446b077aed3SPierre Pronchery
447b077aed3SPierre Pronchery    "/dev/urandom","/dev/random","/dev/srandom"
448b077aed3SPierre Pronchery
449b077aed3SPierre Proncheryon most unix-ish operating systems.
450b077aed3SPierre Pronchery
451b077aed3SPierre Pronchery### egd
452b077aed3SPierre Pronchery
453b077aed3SPierre ProncheryCheck for an entropy generating daemon.
454b077aed3SPierre ProncheryThis source is ignored by the FIPS provider.
455b077aed3SPierre Pronchery
456b077aed3SPierre Pronchery### rdcpu
457b077aed3SPierre Pronchery
458b077aed3SPierre ProncheryUse the `RDSEED` or `RDRAND` command if provided by the CPU.
459b077aed3SPierre Pronchery
460b077aed3SPierre Pronchery### librandom
461b077aed3SPierre Pronchery
462b077aed3SPierre ProncheryUse librandom (not implemented yet).
463b077aed3SPierre ProncheryThis source is ignored by the FIPS provider.
464b077aed3SPierre Pronchery
465b077aed3SPierre Pronchery### none
466b077aed3SPierre Pronchery
467b077aed3SPierre ProncheryDisable automatic seeding.  This is the default on some operating systems where
468b077aed3SPierre Proncheryno suitable entropy source exists, or no support for it is implemented yet.
469b077aed3SPierre ProncheryThis option is ignored by the FIPS provider.
470b077aed3SPierre Pronchery
471b077aed3SPierre ProncheryFor more information, see the section [Notes on random number generation][rng]
472b077aed3SPierre Proncheryat the end of this document.
473b077aed3SPierre Pronchery
474b077aed3SPierre Pronchery[rng]: #notes-on-random-number-generation
475b077aed3SPierre Pronchery
476b077aed3SPierre ProncherySetting the FIPS HMAC key
477b077aed3SPierre Pronchery-------------------------
478b077aed3SPierre Pronchery
479b077aed3SPierre Pronchery    --fips-key=value
480b077aed3SPierre Pronchery
481b077aed3SPierre ProncheryAs part of its self-test validation, the FIPS module must verify itself
482b077aed3SPierre Proncheryby performing a SHA-256 HMAC computation on itself. The default key is
48344096ebdSEnji Cooperthe SHA256 value of "holy hand grenade of antioch" and is sufficient
484b077aed3SPierre Proncheryfor meeting the FIPS requirements.
485b077aed3SPierre Pronchery
486b077aed3SPierre ProncheryTo change the key to a different value, use this flag. The value should
487b077aed3SPierre Proncherybe a hex string no more than 64 characters.
488b077aed3SPierre Pronchery
489b077aed3SPierre ProncheryEnable and Disable Features
490b077aed3SPierre Pronchery---------------------------
491b077aed3SPierre Pronchery
492b077aed3SPierre ProncheryFeature options always come in pairs, an option to enable feature
493b077aed3SPierre Pronchery`xxxx`, and an option to disable it:
494b077aed3SPierre Pronchery
495b077aed3SPierre Pronchery    [ enable-xxxx | no-xxxx ]
496b077aed3SPierre Pronchery
497b077aed3SPierre ProncheryWhether a feature is enabled or disabled by default, depends on the feature.
498b077aed3SPierre ProncheryIn the following list, always the non-default variant is documented: if
499b077aed3SPierre Proncheryfeature `xxxx` is disabled by default then `enable-xxxx` is documented and
500b077aed3SPierre Proncheryif feature `xxxx` is enabled by default then `no-xxxx` is documented.
501b077aed3SPierre Pronchery
502b077aed3SPierre Pronchery### no-afalgeng
503b077aed3SPierre Pronchery
504b077aed3SPierre ProncheryDon't build the AFALG engine.
505b077aed3SPierre Pronchery
506b077aed3SPierre ProncheryThis option will be forced on a platform that does not support AFALG.
507b077aed3SPierre Pronchery
508b077aed3SPierre Pronchery### enable-ktls
509b077aed3SPierre Pronchery
510b077aed3SPierre ProncheryBuild with Kernel TLS support.
511b077aed3SPierre Pronchery
512b077aed3SPierre ProncheryThis option will enable the use of the Kernel TLS data-path, which can improve
513b077aed3SPierre Proncheryperformance and allow for the use of sendfile and splice system calls on
514b077aed3SPierre ProncheryTLS sockets.  The Kernel may use TLS accelerators if any are available on the
515b077aed3SPierre Proncherysystem.  This option will be forced off on systems that do not support the
516b077aed3SPierre ProncheryKernel TLS data-path.
517b077aed3SPierre Pronchery
518b077aed3SPierre Pronchery### enable-asan
519b077aed3SPierre Pronchery
520b077aed3SPierre ProncheryBuild with the Address sanitiser.
521b077aed3SPierre Pronchery
522b077aed3SPierre ProncheryThis is a developer option only.  It may not work on all platforms and should
523b077aed3SPierre Proncherynever be used in production environments.  It will only work when used with
524b077aed3SPierre Proncherygcc or clang and should be used in conjunction with the [no-shared](#no-shared)
525b077aed3SPierre Proncheryoption.
526b077aed3SPierre Pronchery
527b077aed3SPierre Pronchery### enable-acvp-tests
528b077aed3SPierre Pronchery
529b077aed3SPierre ProncheryBuild support for Automated Cryptographic Validation Protocol (ACVP)
530b077aed3SPierre Proncherytests.
531b077aed3SPierre Pronchery
532b077aed3SPierre ProncheryThis is required for FIPS validation purposes. Certain ACVP tests require
533b077aed3SPierre Proncheryaccess to algorithm internals that are not normally accessible.
534b077aed3SPierre ProncheryAdditional information related to ACVP can be found at
535b077aed3SPierre Pronchery<https://github.com/usnistgov/ACVP>.
536b077aed3SPierre Pronchery
537b077aed3SPierre Pronchery### no-asm
538b077aed3SPierre Pronchery
539b077aed3SPierre ProncheryDo not use assembler code.
540b077aed3SPierre Pronchery
541b077aed3SPierre ProncheryThis should be viewed as debugging/troubleshooting option rather than for
542b077aed3SPierre Proncheryproduction use.  On some platforms a small amount of assembler code may still
543b077aed3SPierre Proncherybe used even with this option.
544b077aed3SPierre Pronchery
545b077aed3SPierre Pronchery### no-async
546b077aed3SPierre Pronchery
547b077aed3SPierre ProncheryDo not build support for async operations.
548b077aed3SPierre Pronchery
54944096ebdSEnji Cooper### no-atexit
55044096ebdSEnji Cooper
55144096ebdSEnji CooperDo not use `atexit()` in libcrypto builds.
55244096ebdSEnji Cooper
55344096ebdSEnji Cooper`atexit()` has varied semantics between platforms and can cause SIGSEGV in some
55444096ebdSEnji Coopercircumstances. This option disables the atexit registration of OPENSSL_cleanup.
55544096ebdSEnji Cooper
556b077aed3SPierre Pronchery### no-autoalginit
557b077aed3SPierre Pronchery
558b077aed3SPierre ProncheryDon't automatically load all supported ciphers and digests.
559b077aed3SPierre Pronchery
560b077aed3SPierre ProncheryTypically OpenSSL will make available all of its supported ciphers and digests.
561b077aed3SPierre ProncheryFor a statically linked application this may be undesirable if small executable
562b077aed3SPierre Proncherysize is an objective.  This only affects libcrypto.  Ciphers and digests will
563b077aed3SPierre Proncheryhave to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
564b077aed3SPierre Proncheryif this option is used.  This option will force a non-shared build.
565b077aed3SPierre Pronchery
566b077aed3SPierre Pronchery### no-autoerrinit
567b077aed3SPierre Pronchery
568b077aed3SPierre ProncheryDon't automatically load all libcrypto/libssl error strings.
569b077aed3SPierre Pronchery
570b077aed3SPierre ProncheryTypically OpenSSL will automatically load human readable error strings.  For a
571b077aed3SPierre Proncherystatically linked application this may be undesirable if small executable size
572b077aed3SPierre Proncheryis an objective.
573b077aed3SPierre Pronchery
574b077aed3SPierre Pronchery### no-autoload-config
575b077aed3SPierre Pronchery
576b077aed3SPierre ProncheryDon't automatically load the default `openssl.cnf` file.
577b077aed3SPierre Pronchery
578b077aed3SPierre ProncheryTypically OpenSSL will automatically load a system config file which configures
579b077aed3SPierre Proncherydefault SSL options.
580b077aed3SPierre Pronchery
581b077aed3SPierre Pronchery### enable-buildtest-c++
582b077aed3SPierre Pronchery
583b077aed3SPierre ProncheryWhile testing, generate C++ buildtest files that simply check that the public
584b077aed3SPierre ProncheryOpenSSL header files are usable standalone with C++.
585b077aed3SPierre Pronchery
586b077aed3SPierre ProncheryEnabling this option demands extra care.  For any compiler flag given directly
587b077aed3SPierre Proncheryas configuration option, you must ensure that it's valid for both the C and
588b077aed3SPierre Proncherythe C++ compiler.  If not, the C++ build test will most likely break.  As an
589b077aed3SPierre Proncheryalternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
590b077aed3SPierre Pronchery
591b077aed3SPierre Pronchery### --banner=text
592b077aed3SPierre Pronchery
593b077aed3SPierre ProncheryUse the specified text instead of the default banner at the end of
594b077aed3SPierre Proncheryconfiguration.
595b077aed3SPierre Pronchery
596b077aed3SPierre Pronchery### --w
597b077aed3SPierre Pronchery
598b077aed3SPierre ProncheryOn platforms where the choice of 32-bit or 64-bit architecture
599b077aed3SPierre Proncheryis not explicitly specified, `Configure` will print a warning
600b077aed3SPierre Proncherymessage and wait for a few seconds to let you interrupt the
601b077aed3SPierre Proncheryconfiguration. Using this flag skips the wait.
602b077aed3SPierre Pronchery
603b077aed3SPierre Pronchery### no-bulk
604b077aed3SPierre Pronchery
605b077aed3SPierre ProncheryBuild only some minimal set of features.
606b077aed3SPierre ProncheryThis is a developer option used internally for CI build tests of the project.
607b077aed3SPierre Pronchery
608b077aed3SPierre Pronchery### no-cached-fetch
609b077aed3SPierre Pronchery
610b077aed3SPierre ProncheryNever cache algorithms when they are fetched from a provider.  Normally, a
611b077aed3SPierre Proncheryprovider indicates if the algorithms it supplies can be cached or not.  Using
612b077aed3SPierre Proncherythis option will reduce run-time memory usage but it also introduces a
613b077aed3SPierre Proncherysignificant performance penalty.  This option is primarily designed to help
614b077aed3SPierre Proncherywith detecting incorrect reference counting.
615b077aed3SPierre Pronchery
616b077aed3SPierre Pronchery### no-capieng
617b077aed3SPierre Pronchery
618b077aed3SPierre ProncheryDon't build the CAPI engine.
619b077aed3SPierre Pronchery
620b077aed3SPierre ProncheryThis option will be forced if on a platform that does not support CAPI.
621b077aed3SPierre Pronchery
622b077aed3SPierre Pronchery### no-cmp
623b077aed3SPierre Pronchery
624b077aed3SPierre ProncheryDon't build support for Certificate Management Protocol (CMP)
625b077aed3SPierre Proncheryand Certificate Request Message Format (CRMF).
626b077aed3SPierre Pronchery
627b077aed3SPierre Pronchery### no-cms
628b077aed3SPierre Pronchery
629b077aed3SPierre ProncheryDon't build support for Cryptographic Message Syntax (CMS).
630b077aed3SPierre Pronchery
631b077aed3SPierre Pronchery### no-comp
632b077aed3SPierre Pronchery
633b077aed3SPierre ProncheryDon't build support for SSL/TLS compression.
634b077aed3SPierre Pronchery
635b077aed3SPierre ProncheryIf this option is enabled (the default), then compression will only work if
636b077aed3SPierre Proncherythe zlib or `zlib-dynamic` options are also chosen.
637b077aed3SPierre Pronchery
638b077aed3SPierre Pronchery### enable-crypto-mdebug
639b077aed3SPierre Pronchery
640b077aed3SPierre ProncheryThis now only enables the `failed-malloc` feature.
641b077aed3SPierre Pronchery
642b077aed3SPierre Pronchery### enable-crypto-mdebug-backtrace
643b077aed3SPierre Pronchery
644b077aed3SPierre ProncheryThis is a no-op; the project uses the compiler's address/leak sanitizer instead.
645b077aed3SPierre Pronchery
646b077aed3SPierre Pronchery### no-ct
647b077aed3SPierre Pronchery
648b077aed3SPierre ProncheryDon't build support for Certificate Transparency (CT).
649b077aed3SPierre Pronchery
650b077aed3SPierre Pronchery### no-deprecated
651b077aed3SPierre Pronchery
652b077aed3SPierre ProncheryDon't build with support for deprecated APIs up until and including the version
653b077aed3SPierre Proncherygiven with `--api` (or the current version, if `--api` wasn't specified).
654b077aed3SPierre Pronchery
655b077aed3SPierre Pronchery### no-dgram
656b077aed3SPierre Pronchery
657b077aed3SPierre ProncheryDon't build support for datagram based BIOs.
658b077aed3SPierre Pronchery
659b077aed3SPierre ProncherySelecting this option will also force the disabling of DTLS.
660b077aed3SPierre Pronchery
661b077aed3SPierre Pronchery### no-dso
662b077aed3SPierre Pronchery
663b077aed3SPierre ProncheryDon't build support for loading Dynamic Shared Objects (DSO)
664b077aed3SPierre Pronchery
665b077aed3SPierre Pronchery### enable-devcryptoeng
666b077aed3SPierre Pronchery
667b077aed3SPierre ProncheryBuild the `/dev/crypto` engine.
668b077aed3SPierre Pronchery
669b077aed3SPierre ProncheryThis option is automatically selected on the BSD platform, in which case it can
670b077aed3SPierre Proncherybe disabled with `no-devcryptoeng`.
671b077aed3SPierre Pronchery
672b077aed3SPierre Pronchery### no-dynamic-engine
673b077aed3SPierre Pronchery
674b077aed3SPierre ProncheryDon't build the dynamically loaded engines.
675b077aed3SPierre Pronchery
676b077aed3SPierre ProncheryThis only has an effect in a shared build.
677b077aed3SPierre Pronchery
678b077aed3SPierre Pronchery### no-ec
679b077aed3SPierre Pronchery
680b077aed3SPierre ProncheryDon't build support for Elliptic Curves.
681b077aed3SPierre Pronchery
682b077aed3SPierre Pronchery### no-ec2m
683b077aed3SPierre Pronchery
684b077aed3SPierre ProncheryDon't build support for binary Elliptic Curves
685b077aed3SPierre Pronchery
686b077aed3SPierre Pronchery### enable-ec_nistp_64_gcc_128
687b077aed3SPierre Pronchery
688b077aed3SPierre ProncheryEnable support for optimised implementations of some commonly used NIST
689b077aed3SPierre Proncheryelliptic curves.
690b077aed3SPierre Pronchery
691b077aed3SPierre ProncheryThis option is only supported on platforms:
692b077aed3SPierre Pronchery
693b077aed3SPierre Pronchery - with little-endian storage of non-byte types
694b077aed3SPierre Pronchery - that tolerate misaligned memory references
695b077aed3SPierre Pronchery - where the compiler:
696b077aed3SPierre Pronchery   - supports the non-standard type `__uint128_t`
697b077aed3SPierre Pronchery   - defines the built-in macro `__SIZEOF_INT128__`
698b077aed3SPierre Pronchery
699b077aed3SPierre Pronchery### enable-egd
700b077aed3SPierre Pronchery
701b077aed3SPierre ProncheryBuild support for gathering entropy from the Entropy Gathering Daemon (EGD).
702b077aed3SPierre Pronchery
703b077aed3SPierre Pronchery### no-engine
704b077aed3SPierre Pronchery
705b077aed3SPierre ProncheryDon't build support for loading engines.
706b077aed3SPierre Pronchery
707b077aed3SPierre Pronchery### no-err
708b077aed3SPierre Pronchery
709b077aed3SPierre ProncheryDon't compile in any error strings.
710b077aed3SPierre Pronchery
711b077aed3SPierre Pronchery### enable-external-tests
712b077aed3SPierre Pronchery
713b077aed3SPierre ProncheryEnable building of integration with external test suites.
714b077aed3SPierre Pronchery
715b077aed3SPierre ProncheryThis is a developer option and may not work on all platforms.  The following
716b077aed3SPierre Proncheryexternal test suites are currently supported:
717b077aed3SPierre Pronchery
718b077aed3SPierre Pronchery - GOST engine test suite
719b077aed3SPierre Pronchery - Python PYCA/Cryptography test suite
720b077aed3SPierre Pronchery - krb5 test suite
721b077aed3SPierre Pronchery
722b077aed3SPierre ProncherySee the file [test/README-external.md](test/README-external.md)
723b077aed3SPierre Proncheryfor further details.
724b077aed3SPierre Pronchery
725b077aed3SPierre Pronchery### no-filenames
726b077aed3SPierre Pronchery
727b077aed3SPierre ProncheryDon't compile in filename and line number information (e.g.  for errors and
728b077aed3SPierre Proncherymemory allocation).
729b077aed3SPierre Pronchery
730b077aed3SPierre Pronchery### enable-fips
731b077aed3SPierre Pronchery
732b077aed3SPierre ProncheryBuild (and install) the FIPS provider
733b077aed3SPierre Pronchery
734b077aed3SPierre Pronchery### no-fips-securitychecks
735b077aed3SPierre Pronchery
736b077aed3SPierre ProncheryDon't perform FIPS module run-time checks related to enforcement of security
737b077aed3SPierre Proncheryparameters such as minimum security strength of keys.
738b077aed3SPierre Pronchery
739b077aed3SPierre Pronchery### enable-fuzz-libfuzzer, enable-fuzz-afl
740b077aed3SPierre Pronchery
741b077aed3SPierre ProncheryBuild with support for fuzzing using either libfuzzer or AFL.
742b077aed3SPierre Pronchery
743b077aed3SPierre ProncheryThese are developer options only.  They may not work on all  platforms and
744b077aed3SPierre Proncheryshould never be used in production environments.
745b077aed3SPierre Pronchery
746b077aed3SPierre ProncherySee the file [fuzz/README.md](fuzz/README.md) for further details.
747b077aed3SPierre Pronchery
748b077aed3SPierre Pronchery### no-gost
749b077aed3SPierre Pronchery
750b077aed3SPierre ProncheryDon't build support for GOST based ciphersuites.
751b077aed3SPierre Pronchery
752b077aed3SPierre ProncheryNote that if this feature is enabled then GOST ciphersuites are only available
753b077aed3SPierre Proncheryif the GOST algorithms are also available through loading an externally supplied
754b077aed3SPierre Proncheryengine.
755b077aed3SPierre Pronchery
756b077aed3SPierre Pronchery### no-legacy
757b077aed3SPierre Pronchery
758b077aed3SPierre ProncheryDon't build the legacy provider.
759b077aed3SPierre Pronchery
760b077aed3SPierre ProncheryDisabling this also disables the legacy algorithms: MD2 (already disabled by default).
761b077aed3SPierre Pronchery
762b077aed3SPierre Pronchery### no-makedepend
763b077aed3SPierre Pronchery
764b077aed3SPierre ProncheryDon't generate dependencies.
765b077aed3SPierre Pronchery
766b077aed3SPierre Pronchery### no-module
767b077aed3SPierre Pronchery
768b077aed3SPierre ProncheryDon't build any dynamically loadable engines.
769b077aed3SPierre Pronchery
770b077aed3SPierre ProncheryThis also implies `no-dynamic-engine`.
771b077aed3SPierre Pronchery
772b077aed3SPierre Pronchery### no-multiblock
773b077aed3SPierre Pronchery
774b077aed3SPierre ProncheryDon't build support for writing multiple records in one go in libssl
775b077aed3SPierre Pronchery
776b077aed3SPierre ProncheryNote: this is a different capability to the pipelining functionality.
777b077aed3SPierre Pronchery
778b077aed3SPierre Pronchery### no-nextprotoneg
779b077aed3SPierre Pronchery
780b077aed3SPierre ProncheryDon't build support for the Next Protocol Negotiation (NPN) TLS extension.
781b077aed3SPierre Pronchery
782b077aed3SPierre Pronchery### no-ocsp
783b077aed3SPierre Pronchery
784b077aed3SPierre ProncheryDon't build support for Online Certificate Status Protocol (OCSP).
785b077aed3SPierre Pronchery
786b077aed3SPierre Pronchery### no-padlockeng
787b077aed3SPierre Pronchery
788b077aed3SPierre ProncheryDon't build the padlock engine.
789b077aed3SPierre Pronchery
790b077aed3SPierre Pronchery### no-hw-padlock
791b077aed3SPierre Pronchery
792b077aed3SPierre ProncheryAs synonym for `no-padlockeng`.  Deprecated and should not be used.
793b077aed3SPierre Pronchery
794b077aed3SPierre Pronchery### no-pic
795b077aed3SPierre Pronchery
796b077aed3SPierre ProncheryDon't build with support for Position Independent Code.
797b077aed3SPierre Pronchery
798b077aed3SPierre Pronchery### no-pinshared
799b077aed3SPierre Pronchery
800b077aed3SPierre ProncheryDon't pin the shared libraries.
801b077aed3SPierre Pronchery
802b077aed3SPierre ProncheryBy default OpenSSL will attempt to stay in memory until the process exits.
803b077aed3SPierre ProncheryThis is so that libcrypto and libssl can be properly cleaned up automatically
804b077aed3SPierre Proncheryvia an `atexit()` handler.  The handler is registered by libcrypto and cleans
805b077aed3SPierre Proncheryup both libraries.  On some platforms the `atexit()` handler will run on unload of
806aa795734SPierre Proncherylibcrypto (if it has been dynamically loaded) rather than at process exit.
807aa795734SPierre Pronchery
808aa795734SPierre ProncheryThis option can be used to stop OpenSSL from attempting to stay in memory until the
809b077aed3SPierre Proncheryprocess exits.  This could lead to crashes if either libcrypto or libssl have
810b077aed3SPierre Proncheryalready been unloaded at the point that the atexit handler is invoked, e.g.  on a
811b077aed3SPierre Proncheryplatform which calls `atexit()` on unload of the library, and libssl is unloaded
812aa795734SPierre Proncherybefore libcrypto then a crash is likely to happen.
813aa795734SPierre Pronchery
814aa795734SPierre ProncheryNote that shared library pinning is not automatically disabled for static builds,
815aa795734SPierre Proncheryi.e., `no-shared` does not imply `no-pinshared`. This may come as a surprise when
816aa795734SPierre Proncherylinking libcrypto statically into a shared third-party library, because in this
817aa795734SPierre Proncherycase the shared library will be pinned. To prevent this behaviour, you need to
818aa795734SPierre Proncheryconfigure the static build using `no-shared` and `no-pinshared` together.
819aa795734SPierre Pronchery
820aa795734SPierre ProncheryApplications can suppress running of the `atexit()` handler at run time by
821aa795734SPierre Proncheryusing the `OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
822b077aed3SPierre ProncherySee the man page for it for further details.
823b077aed3SPierre Pronchery
824b077aed3SPierre Pronchery### no-posix-io
825b077aed3SPierre Pronchery
826b077aed3SPierre ProncheryDon't use POSIX IO capabilities.
827b077aed3SPierre Pronchery
828b077aed3SPierre Pronchery### no-psk
829b077aed3SPierre Pronchery
830b077aed3SPierre ProncheryDon't build support for Pre-Shared Key based ciphersuites.
831b077aed3SPierre Pronchery
832b077aed3SPierre Pronchery### no-rdrand
833b077aed3SPierre Pronchery
834b077aed3SPierre ProncheryDon't use hardware RDRAND capabilities.
835b077aed3SPierre Pronchery
836b077aed3SPierre Pronchery### no-rfc3779
837b077aed3SPierre Pronchery
838b077aed3SPierre ProncheryDon't build support for RFC3779, "X.509 Extensions for IP Addresses and
839b077aed3SPierre ProncheryAS Identifiers".
840b077aed3SPierre Pronchery
841b077aed3SPierre Pronchery### sctp
842b077aed3SPierre Pronchery
843b077aed3SPierre ProncheryBuild support for Stream Control Transmission Protocol (SCTP).
844b077aed3SPierre Pronchery
845b077aed3SPierre Pronchery### no-shared
846b077aed3SPierre Pronchery
847b077aed3SPierre ProncheryDo not create shared libraries, only static ones.
848b077aed3SPierre Pronchery
849b077aed3SPierre ProncherySee [Notes on shared libraries](#notes-on-shared-libraries) below.
850b077aed3SPierre Pronchery
851b077aed3SPierre Pronchery### no-sock
852b077aed3SPierre Pronchery
853b077aed3SPierre ProncheryDon't build support for socket BIOs.
854b077aed3SPierre Pronchery
855b077aed3SPierre Pronchery### no-srp
856b077aed3SPierre Pronchery
857b077aed3SPierre ProncheryDon't build support for Secure Remote Password (SRP) protocol or
858b077aed3SPierre ProncherySRP based ciphersuites.
859b077aed3SPierre Pronchery
860b077aed3SPierre Pronchery### no-srtp
861b077aed3SPierre Pronchery
862b077aed3SPierre ProncheryDon't build Secure Real-Time Transport Protocol (SRTP) support.
863b077aed3SPierre Pronchery
864b077aed3SPierre Pronchery### no-sse2
865b077aed3SPierre Pronchery
866b077aed3SPierre ProncheryExclude SSE2 code paths from 32-bit x86 assembly modules.
867b077aed3SPierre Pronchery
868b077aed3SPierre ProncheryNormally SSE2 extension is detected at run-time, but the decision whether or not
869b077aed3SPierre Proncherythe machine code will be executed is taken solely on CPU capability vector.  This
870b077aed3SPierre Proncherymeans that if you happen to run OS kernel which does not support SSE2 extension
871b077aed3SPierre Proncheryon Intel P4 processor, then your application might be exposed to "illegal
872b077aed3SPierre Proncheryinstruction" exception.  There might be a way to enable support in kernel, e.g.
873b077aed3SPierre ProncheryFreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
874b077aed3SPierre Proncherydisengage SSE2 code paths upon application start-up, but if you aim for wider
875b077aed3SPierre Pronchery"audience" running such kernel, consider `no-sse2`.  Both the `386` and `no-asm`
876b077aed3SPierre Proncheryoptions imply `no-sse2`.
877b077aed3SPierre Pronchery
878b077aed3SPierre Pronchery### no-ssl-trace
879b077aed3SPierre Pronchery
880b077aed3SPierre ProncheryDon't build with SSL Trace capabilities.
881b077aed3SPierre Pronchery
882b077aed3SPierre ProncheryThis removes the `-trace` option from `s_client` and `s_server`, and omits the
883b077aed3SPierre Pronchery`SSL_trace()` function from libssl.
884b077aed3SPierre Pronchery
885b077aed3SPierre ProncheryDisabling `ssl-trace` may provide a small reduction in libssl binary size.
886b077aed3SPierre Pronchery
887b077aed3SPierre Pronchery### no-static-engine
888b077aed3SPierre Pronchery
889b077aed3SPierre ProncheryDon't build the statically linked engines.
890b077aed3SPierre Pronchery
891b077aed3SPierre ProncheryThis only has an impact when not built "shared".
892b077aed3SPierre Pronchery
893b077aed3SPierre Pronchery### no-stdio
894b077aed3SPierre Pronchery
895b077aed3SPierre ProncheryDon't use anything from the C header file `stdio.h` that makes use of the `FILE`
896b077aed3SPierre Proncherytype.  Only libcrypto and libssl can be built in this way.  Using this option will
897b077aed3SPierre Proncherysuppress building the command line applications.  Additionally, since the OpenSSL
898b077aed3SPierre Proncherytests also use the command line applications, the tests will also be skipped.
899b077aed3SPierre Pronchery
900b077aed3SPierre Pronchery### no-tests
901b077aed3SPierre Pronchery
902b077aed3SPierre ProncheryDon't build test programs or run any tests.
903b077aed3SPierre Pronchery
904b077aed3SPierre Pronchery### no-threads
905b077aed3SPierre Pronchery
906b077aed3SPierre ProncheryDon't build with support for multi-threaded applications.
907b077aed3SPierre Pronchery
908b077aed3SPierre Pronchery### threads
909b077aed3SPierre Pronchery
910b077aed3SPierre ProncheryBuild with support for multi-threaded applications.  Most platforms will enable
911b077aed3SPierre Proncherythis by default.  However, if on a platform where this is not the case then this
912b077aed3SPierre Proncherywill usually require additional system-dependent options!
913b077aed3SPierre Pronchery
914b077aed3SPierre ProncherySee [Notes on multi-threading](#notes-on-multi-threading) below.
915b077aed3SPierre Pronchery
916b077aed3SPierre Pronchery### enable-trace
917b077aed3SPierre Pronchery
918b077aed3SPierre ProncheryBuild with support for the integrated tracing api.
919b077aed3SPierre Pronchery
920b077aed3SPierre ProncherySee manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
921b077aed3SPierre Pronchery
922b077aed3SPierre Pronchery### no-ts
923b077aed3SPierre Pronchery
924b077aed3SPierre ProncheryDon't build Time Stamping (TS) Authority support.
925b077aed3SPierre Pronchery
926b077aed3SPierre Pronchery### enable-ubsan
927b077aed3SPierre Pronchery
928b077aed3SPierre ProncheryBuild with the Undefined Behaviour sanitiser (UBSAN).
929b077aed3SPierre Pronchery
930b077aed3SPierre ProncheryThis is a developer option only.  It may not work on all platforms and should
931b077aed3SPierre Proncherynever be used in production environments.  It will only work when used with
932b077aed3SPierre Proncherygcc or clang and should be used in conjunction with the `-DPEDANTIC` option
933b077aed3SPierre Pronchery(or the `--strict-warnings` option).
934b077aed3SPierre Pronchery
935b077aed3SPierre Pronchery### no-ui-console
936b077aed3SPierre Pronchery
937b077aed3SPierre ProncheryDon't build with the User Interface (UI) console method
938b077aed3SPierre Pronchery
939b077aed3SPierre ProncheryThe User Interface console method enables text based console prompts.
940b077aed3SPierre Pronchery
941b077aed3SPierre Pronchery### enable-unit-test
942b077aed3SPierre Pronchery
943b077aed3SPierre ProncheryEnable additional unit test APIs.
944b077aed3SPierre Pronchery
945b077aed3SPierre ProncheryThis should not typically be used in production deployments.
946b077aed3SPierre Pronchery
947b077aed3SPierre Pronchery### no-uplink
948b077aed3SPierre Pronchery
949b077aed3SPierre ProncheryDon't build support for UPLINK interface.
950b077aed3SPierre Pronchery
951b077aed3SPierre Pronchery### enable-weak-ssl-ciphers
952b077aed3SPierre Pronchery
953b077aed3SPierre ProncheryBuild support for SSL/TLS ciphers that are considered "weak"
954b077aed3SPierre Pronchery
955b077aed3SPierre ProncheryEnabling this includes for example the RC4 based ciphersuites.
956b077aed3SPierre Pronchery
957b077aed3SPierre Pronchery### zlib
958b077aed3SPierre Pronchery
959b077aed3SPierre ProncheryBuild with support for zlib compression/decompression.
960b077aed3SPierre Pronchery
961b077aed3SPierre Pronchery### zlib-dynamic
962b077aed3SPierre Pronchery
963b077aed3SPierre ProncheryLike the zlib option, but has OpenSSL load the zlib library dynamically
964b077aed3SPierre Proncherywhen needed.
965b077aed3SPierre Pronchery
966b077aed3SPierre ProncheryThis is only supported on systems where loading of shared libraries is supported.
967b077aed3SPierre Pronchery
968b077aed3SPierre Pronchery### 386
969b077aed3SPierre Pronchery
970b077aed3SPierre ProncheryIn 32-bit x86 builds, use the 80386 instruction set only in assembly modules
971b077aed3SPierre Pronchery
972b077aed3SPierre ProncheryThe default x86 code is more efficient, but requires at least an 486 processor.
973b077aed3SPierre ProncheryNote: This doesn't affect compiler generated code, so this option needs to be
974b077aed3SPierre Proncheryaccompanied by a corresponding compiler-specific option.
975b077aed3SPierre Pronchery
976b077aed3SPierre Pronchery### no-{protocol}
977b077aed3SPierre Pronchery
978b077aed3SPierre Pronchery    no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
979b077aed3SPierre Pronchery
980b077aed3SPierre ProncheryDon't build support for negotiating the specified SSL/TLS protocol.
981b077aed3SPierre Pronchery
982b077aed3SPierre ProncheryIf `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
983b077aed3SPierre Proncheryare disabled.
984b077aed3SPierre ProncherySimilarly `no-dtls` will disable `dtls1` and `dtls1_2`.  The `no-ssl` option is
985b077aed3SPierre Proncherysynonymous with `no-ssl3`.  Note this only affects version negotiation.
986b077aed3SPierre ProncheryOpenSSL will still provide the methods for applications to explicitly select
987b077aed3SPierre Proncherythe individual protocol versions.
988b077aed3SPierre Pronchery
989b077aed3SPierre Pronchery### no-{protocol}-method
990b077aed3SPierre Pronchery
991b077aed3SPierre Pronchery    no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
992b077aed3SPierre Pronchery
993b077aed3SPierre ProncheryAnalogous to `no-{protocol}` but in addition do not build the methods for
994b077aed3SPierre Proncheryapplications to explicitly select individual protocol versions.  Note that there
995b077aed3SPierre Proncheryis no `no-tls1_3-method` option because there is no application method for
996b077aed3SPierre ProncheryTLSv1.3.
997b077aed3SPierre Pronchery
998b077aed3SPierre ProncheryUsing individual protocol methods directly is deprecated.  Applications should
999b077aed3SPierre Proncheryuse `TLS_method()` instead.
1000b077aed3SPierre Pronchery
1001b077aed3SPierre Pronchery### enable-{algorithm}
1002b077aed3SPierre Pronchery
1003b077aed3SPierre Pronchery    enable-{md2|rc5}
1004b077aed3SPierre Pronchery
1005b077aed3SPierre ProncheryBuild with support for the specified algorithm.
1006b077aed3SPierre Pronchery
1007b077aed3SPierre Pronchery### no-{algorithm}
1008b077aed3SPierre Pronchery
1009b077aed3SPierre Pronchery    no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1010b077aed3SPierre Pronchery        des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb|
1011b077aed3SPierre Pronchery        poly1305|rc2|rc4|rmd160|scrypt|seed|
1012b077aed3SPierre Pronchery        siphash|siv|sm2|sm3|sm4|whirlpool}
1013b077aed3SPierre Pronchery
1014b077aed3SPierre ProncheryBuild without support for the specified algorithm.
1015b077aed3SPierre Pronchery
1016b077aed3SPierre ProncheryThe `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
1017b077aed3SPierre Pronchery
1018b077aed3SPierre Pronchery### Compiler-specific options
1019b077aed3SPierre Pronchery
1020b077aed3SPierre Pronchery    -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
1021b077aed3SPierre Pronchery
1022b077aed3SPierre ProncheryThese system specific options will be recognised and passed through to the
1023b077aed3SPierre Proncherycompiler to allow you to define preprocessor symbols, specify additional
1024b077aed3SPierre Proncherylibraries, library directories or other compiler options.  It might be worth
1025b077aed3SPierre Proncherynoting that some compilers generate code specifically for processor the
1026b077aed3SPierre Proncherycompiler currently executes on.  This is not necessarily what you might have
1027b077aed3SPierre Proncheryin mind, since it might be unsuitable for execution on other, typically older,
1028b077aed3SPierre Proncheryprocessor.  Consult your compiler documentation.
1029b077aed3SPierre Pronchery
1030b077aed3SPierre ProncheryTake note of the [Environment Variables](#environment-variables) documentation
1031b077aed3SPierre Proncherybelow and how these flags interact with those variables.
1032b077aed3SPierre Pronchery
1033b077aed3SPierre Pronchery    -xxx, +xxx, /xxx
1034b077aed3SPierre Pronchery
1035b077aed3SPierre ProncheryAdditional options that are not otherwise recognised are passed through as
1036b077aed3SPierre Proncherythey are to the compiler as well.  Unix-style options beginning with a
1037b077aed3SPierre Pronchery`-` or `+` and Windows-style options beginning with a `/` are recognized.
1038b077aed3SPierre ProncheryAgain, consult your compiler documentation.
1039b077aed3SPierre Pronchery
1040b077aed3SPierre ProncheryIf the option contains arguments separated by spaces, then the URL-style
1041b077aed3SPierre Proncherynotation `%20` can be used for the space character in order to avoid having
1042b077aed3SPierre Proncheryto quote the option.  For example, `-opt%20arg` gets expanded to `-opt arg`.
1043b077aed3SPierre ProncheryIn fact, any ASCII character can be encoded as %xx using its hexadecimal
1044b077aed3SPierre Proncheryencoding.
1045b077aed3SPierre Pronchery
1046b077aed3SPierre ProncheryTake note of the [Environment Variables](#environment-variables) documentation
1047b077aed3SPierre Proncherybelow and how these flags interact with those variables.
1048b077aed3SPierre Pronchery
1049b077aed3SPierre Pronchery### Environment Variables
1050b077aed3SPierre Pronchery
1051b077aed3SPierre Pronchery    VAR=value
1052b077aed3SPierre Pronchery
1053b077aed3SPierre ProncheryAssign the given value to the environment variable `VAR` for `Configure`.
1054b077aed3SPierre Pronchery
1055b077aed3SPierre ProncheryThese work just like normal environment variable assignments, but are supported
1056b077aed3SPierre Proncheryon all platforms and are confined to the configuration scripts only.
1057b077aed3SPierre ProncheryThese assignments override the corresponding value in the inherited environment,
1058b077aed3SPierre Proncheryif there is one.
1059b077aed3SPierre Pronchery
1060b077aed3SPierre ProncheryThe following variables are used as "`make` variables" and can be used as an
1061b077aed3SPierre Proncheryalternative to giving preprocessor, compiler and linker options directly as
1062b077aed3SPierre Proncheryconfiguration.  The following variables are supported:
1063b077aed3SPierre Pronchery
1064b077aed3SPierre Pronchery    AR              The static library archiver.
1065b077aed3SPierre Pronchery    ARFLAGS         Flags for the static library archiver.
1066b077aed3SPierre Pronchery    AS              The assembler compiler.
1067b077aed3SPierre Pronchery    ASFLAGS         Flags for the assembler compiler.
1068b077aed3SPierre Pronchery    CC              The C compiler.
1069b077aed3SPierre Pronchery    CFLAGS          Flags for the C compiler.
1070b077aed3SPierre Pronchery    CXX             The C++ compiler.
1071b077aed3SPierre Pronchery    CXXFLAGS        Flags for the C++ compiler.
1072b077aed3SPierre Pronchery    CPP             The C/C++ preprocessor.
1073b077aed3SPierre Pronchery    CPPFLAGS        Flags for the C/C++ preprocessor.
1074b077aed3SPierre Pronchery    CPPDEFINES      List of CPP macro definitions, separated
1075b077aed3SPierre Pronchery                    by a platform specific character (':' or
1076b077aed3SPierre Pronchery                    space for Unix, ';' for Windows, ',' for
1077b077aed3SPierre Pronchery                    VMS).  This can be used instead of using
1078b077aed3SPierre Pronchery                    -D (or what corresponds to that on your
1079b077aed3SPierre Pronchery                    compiler) in CPPFLAGS.
1080b077aed3SPierre Pronchery    CPPINCLUDES     List of CPP inclusion directories, separated
1081b077aed3SPierre Pronchery                    the same way as for CPPDEFINES.  This can
1082b077aed3SPierre Pronchery                    be used instead of -I (or what corresponds
1083b077aed3SPierre Pronchery                    to that on your compiler) in CPPFLAGS.
1084b077aed3SPierre Pronchery    HASHBANGPERL    Perl invocation to be inserted after '#!'
1085b077aed3SPierre Pronchery                    in public perl scripts (only relevant on
1086b077aed3SPierre Pronchery                    Unix).
1087b077aed3SPierre Pronchery    LD              The program linker (not used on Unix, $(CC)
1088b077aed3SPierre Pronchery                    is used there).
1089b077aed3SPierre Pronchery    LDFLAGS         Flags for the shared library, DSO and
1090b077aed3SPierre Pronchery                    program linker.
1091b077aed3SPierre Pronchery    LDLIBS          Extra libraries to use when linking.
1092b077aed3SPierre Pronchery                    Takes the form of a space separated list
1093b077aed3SPierre Pronchery                    of library specifications on Unix and
1094b077aed3SPierre Pronchery                    Windows, and as a comma separated list of
1095b077aed3SPierre Pronchery                    libraries on VMS.
1096b077aed3SPierre Pronchery    RANLIB          The library archive indexer.
1097b077aed3SPierre Pronchery    RC              The Windows resource compiler.
1098b077aed3SPierre Pronchery    RCFLAGS         Flags for the Windows resource compiler.
1099b077aed3SPierre Pronchery    RM              The command to remove files and directories.
1100b077aed3SPierre Pronchery
1101b077aed3SPierre ProncheryThese cannot be mixed with compiling/linking flags given on the command line.
1102b077aed3SPierre ProncheryIn other words, something like this isn't permitted.
1103b077aed3SPierre Pronchery
1104b077aed3SPierre Pronchery    $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
1105b077aed3SPierre Pronchery
1106b077aed3SPierre ProncheryBackward compatibility note:
1107b077aed3SPierre Pronchery
1108b077aed3SPierre ProncheryTo be compatible with older configuration scripts, the environment variables
1109b077aed3SPierre Proncheryare ignored if compiling/linking flags are given on the command line, except
1110b077aed3SPierre Proncheryfor the following:
1111b077aed3SPierre Pronchery
1112b077aed3SPierre Pronchery    AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1113b077aed3SPierre Pronchery
1114b077aed3SPierre ProncheryFor example, the following command will not see `-DBAR`:
1115b077aed3SPierre Pronchery
1116b077aed3SPierre Pronchery    $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
1117b077aed3SPierre Pronchery
1118b077aed3SPierre ProncheryHowever, the following will see both set variables:
1119b077aed3SPierre Pronchery
1120b077aed3SPierre Pronchery    $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
1121b077aed3SPierre Pronchery
1122b077aed3SPierre ProncheryIf `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
1123b077aed3SPierre Proncherycompiler are in the same "family".  This becomes relevant with
1124b077aed3SPierre Pronchery`enable-external-tests` and `enable-buildtest-c++`.
1125b077aed3SPierre Pronchery
1126b077aed3SPierre Pronchery### Reconfigure
1127b077aed3SPierre Pronchery
1128b077aed3SPierre Pronchery    reconf
1129b077aed3SPierre Pronchery    reconfigure
1130b077aed3SPierre Pronchery
1131b077aed3SPierre ProncheryReconfigure from earlier data.
1132b077aed3SPierre Pronchery
1133b077aed3SPierre ProncheryThis fetches the previous command line options and environment from data
1134b077aed3SPierre Proncherysaved in `configdata.pm` and runs the configuration process again, using
1135b077aed3SPierre Proncherythese options and environment.  Note: NO other option is permitted together
1136b077aed3SPierre Proncherywith `reconf`.  Note: The original configuration saves away values for ALL
1137b077aed3SPierre Proncheryenvironment variables that were used, and if they weren't defined, they are
1138b077aed3SPierre Proncherystill saved away with information that they weren't originally defined.
1139b077aed3SPierre ProncheryThis information takes precedence over environment variables that are
1140b077aed3SPierre Proncherydefined when reconfiguring.
1141b077aed3SPierre Pronchery
1142b077aed3SPierre ProncheryDisplaying configuration data
1143b077aed3SPierre Pronchery-----------------------------
1144b077aed3SPierre Pronchery
1145b077aed3SPierre ProncheryThe configuration script itself will say very little, and finishes by
1146b077aed3SPierre Proncherycreating `configdata.pm`.  This perl module can be loaded by other scripts
1147b077aed3SPierre Proncheryto find all the configuration data, and it can also be used as a script to
1148b077aed3SPierre Proncherydisplay all sorts of configuration data in a human readable form.
1149b077aed3SPierre Pronchery
1150b077aed3SPierre ProncheryFor more information, please do:
1151b077aed3SPierre Pronchery
1152b077aed3SPierre Pronchery    $ ./configdata.pm --help                         # Unix
1153b077aed3SPierre Pronchery
1154b077aed3SPierre Proncheryor
1155b077aed3SPierre Pronchery
1156b077aed3SPierre Pronchery    $ perl configdata.pm --help                      # Windows and VMS
1157b077aed3SPierre Pronchery
1158b077aed3SPierre ProncheryInstallation Steps in Detail
1159b077aed3SPierre Pronchery============================
1160b077aed3SPierre Pronchery
1161b077aed3SPierre ProncheryConfigure OpenSSL
1162b077aed3SPierre Pronchery-----------------
1163b077aed3SPierre Pronchery
1164b077aed3SPierre Pronchery### Automatic Configuration
1165b077aed3SPierre Pronchery
1166b077aed3SPierre ProncheryIn previous version, the `config` script determined the platform type and
1167*a7148ab3SEnji Coopercompiler and then called `Configure`. Starting with version 3.0, they are
1168b077aed3SPierre Proncherythe same.
1169b077aed3SPierre Pronchery
1170b077aed3SPierre Pronchery#### Unix / Linux / macOS
1171b077aed3SPierre Pronchery
1172b077aed3SPierre Pronchery    $ ./Configure [[ options ]]
1173b077aed3SPierre Pronchery
1174b077aed3SPierre Pronchery#### OpenVMS
1175b077aed3SPierre Pronchery
1176b077aed3SPierre Pronchery    $ perl Configure [[ options ]]
1177b077aed3SPierre Pronchery
1178b077aed3SPierre Pronchery#### Windows
1179b077aed3SPierre Pronchery
1180b077aed3SPierre Pronchery    $ perl Configure [[ options ]]
1181b077aed3SPierre Pronchery
1182b077aed3SPierre Pronchery### Manual Configuration
1183b077aed3SPierre Pronchery
1184b077aed3SPierre ProncheryOpenSSL knows about a range of different operating system, hardware and
1185b077aed3SPierre Proncherycompiler combinations.  To see the ones it knows about, run
1186b077aed3SPierre Pronchery
1187b077aed3SPierre Pronchery    $ ./Configure LIST                               # Unix
1188b077aed3SPierre Pronchery
1189b077aed3SPierre Proncheryor
1190b077aed3SPierre Pronchery
1191b077aed3SPierre Pronchery    $ perl Configure LIST                            # All other platforms
1192b077aed3SPierre Pronchery
1193b077aed3SPierre ProncheryFor the remainder of this text, the Unix form will be used in all examples.
1194b077aed3SPierre ProncheryPlease use the appropriate form for your platform.
1195b077aed3SPierre Pronchery
1196b077aed3SPierre ProncheryPick a suitable name from the list that matches your system.  For most
1197b077aed3SPierre Proncheryoperating systems there is a choice between using cc or gcc.
1198b077aed3SPierre ProncheryWhen you have identified your system (and if necessary compiler) use this
1199b077aed3SPierre Proncheryname as the argument to `Configure`.  For example, a `linux-elf` user would
1200b077aed3SPierre Proncheryrun:
1201b077aed3SPierre Pronchery
1202b077aed3SPierre Pronchery    $ ./Configure linux-elf [[ options ]]
1203b077aed3SPierre Pronchery
1204b077aed3SPierre Pronchery### Creating your own Configuration
1205b077aed3SPierre Pronchery
1206b077aed3SPierre ProncheryIf your system isn't listed, you will have to create a configuration
1207b077aed3SPierre Proncheryfile named `Configurations/{{ something }}.conf` and add the correct
1208b077aed3SPierre Proncheryconfiguration for your system.  See the available configs as examples
1209b077aed3SPierre Proncheryand read [Configurations/README.md](Configurations/README.md) and
1210b077aed3SPierre Pronchery[Configurations/README-design.md](Configurations/README-design.md)
1211b077aed3SPierre Proncheryfor more information.
1212b077aed3SPierre Pronchery
1213b077aed3SPierre ProncheryThe generic configurations `cc` or `gcc` should usually work on 32 bit
1214b077aed3SPierre ProncheryUnix-like systems.
1215b077aed3SPierre Pronchery
1216b077aed3SPierre Pronchery`Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1217b077aed3SPierre Proncheryand `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1218b077aed3SPierre Proncheryand defines various macros in `include/openssl/configuration.h` (generated
1219b077aed3SPierre Proncheryfrom `include/openssl/configuration.h.in`.
1220b077aed3SPierre Pronchery
1221b077aed3SPierre ProncheryIf none of the generated build files suit your purpose, it's possible to
1222b077aed3SPierre Proncherywrite your own build file template and give its name through the environment
1223b077aed3SPierre Proncheryvariable `BUILDFILE`.  For example, Ninja build files could be supported by
1224b077aed3SPierre Proncherywriting `Configurations/build.ninja.tmpl` and then configure with `BUILDFILE`
1225b077aed3SPierre Proncheryset like this (Unix syntax shown, you'll have to adapt for other platforms):
1226b077aed3SPierre Pronchery
1227b077aed3SPierre Pronchery    $ BUILDFILE=build.ninja perl Configure [options...]
1228b077aed3SPierre Pronchery
1229b077aed3SPierre Pronchery### Out of Tree Builds
1230b077aed3SPierre Pronchery
1231b077aed3SPierre ProncheryOpenSSL can be configured to build in a build directory separate from the
1232b077aed3SPierre Proncherysource code directory.  It's done by placing yourself in some other
1233b077aed3SPierre Proncherydirectory and invoking the configuration commands from there.
1234b077aed3SPierre Pronchery
1235b077aed3SPierre Pronchery#### Unix example
1236b077aed3SPierre Pronchery
1237b077aed3SPierre Pronchery    $ mkdir /var/tmp/openssl-build
1238b077aed3SPierre Pronchery    $ cd /var/tmp/openssl-build
1239b077aed3SPierre Pronchery    $ /PATH/TO/OPENSSL/SOURCE/Configure [[ options ]]
1240b077aed3SPierre Pronchery
1241b077aed3SPierre Pronchery#### OpenVMS example
1242b077aed3SPierre Pronchery
1243b077aed3SPierre Pronchery    $ set default sys$login:
1244b077aed3SPierre Pronchery    $ create/dir [.tmp.openssl-build]
1245b077aed3SPierre Pronchery    $ set default [.tmp.openssl-build]
1246b077aed3SPierre Pronchery    $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [[ options ]]
1247b077aed3SPierre Pronchery
1248b077aed3SPierre Pronchery#### Windows example
1249b077aed3SPierre Pronchery
1250b077aed3SPierre Pronchery    $ C:
1251b077aed3SPierre Pronchery    $ mkdir \temp-openssl
1252b077aed3SPierre Pronchery    $ cd \temp-openssl
1253b077aed3SPierre Pronchery    $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [[ options ]]
1254b077aed3SPierre Pronchery
1255b077aed3SPierre ProncheryPaths can be relative just as well as absolute.  `Configure` will do its best
1256b077aed3SPierre Proncheryto translate them to relative paths whenever possible.
1257b077aed3SPierre Pronchery
1258b077aed3SPierre ProncheryBuild OpenSSL
1259b077aed3SPierre Pronchery-------------
1260b077aed3SPierre Pronchery
1261b077aed3SPierre ProncheryBuild OpenSSL by running:
1262b077aed3SPierre Pronchery
1263b077aed3SPierre Pronchery    $ make                                           # Unix
1264b077aed3SPierre Pronchery    $ mms                                            ! (or mmk) OpenVMS
1265b077aed3SPierre Pronchery    $ nmake                                          # Windows
1266b077aed3SPierre Pronchery
1267b077aed3SPierre ProncheryThis will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
1268b077aed3SPierre ProncheryUnix, corresponding on other platforms) and the OpenSSL binary
1269b077aed3SPierre Pronchery(`openssl`).  The libraries will be built in the top-level directory,
1270b077aed3SPierre Proncheryand the binary will be in the `apps/` subdirectory.
1271b077aed3SPierre Pronchery
1272b077aed3SPierre ProncheryIf the build fails, take a look at the [Build Failures](#build-failures)
1273b077aed3SPierre Proncherysubsection of the [Troubleshooting](#troubleshooting) section.
1274b077aed3SPierre Pronchery
1275b077aed3SPierre ProncheryTest OpenSSL
1276b077aed3SPierre Pronchery------------
1277b077aed3SPierre Pronchery
1278b077aed3SPierre ProncheryAfter a successful build, and before installing, the libraries should
1279b077aed3SPierre Proncherybe tested.  Run:
1280b077aed3SPierre Pronchery
1281b077aed3SPierre Pronchery    $ make test                                      # Unix
1282b077aed3SPierre Pronchery    $ mms test                                       ! OpenVMS
1283b077aed3SPierre Pronchery    $ nmake test                                     # Windows
1284b077aed3SPierre Pronchery
1285b077aed3SPierre Pronchery**Warning:** you MUST run the tests from an unprivileged account (or disable
1286b077aed3SPierre Proncheryyour privileges temporarily if your platform allows it).
1287b077aed3SPierre Pronchery
1288b077aed3SPierre ProncherySee [test/README.md](test/README.md) for further details how run tests.
1289b077aed3SPierre Pronchery
1290b077aed3SPierre ProncherySee [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
1291b077aed3SPierre Pronchery
1292b077aed3SPierre ProncheryInstall OpenSSL
1293b077aed3SPierre Pronchery---------------
1294b077aed3SPierre Pronchery
1295b077aed3SPierre ProncheryIf everything tests ok, install OpenSSL with
1296b077aed3SPierre Pronchery
1297b077aed3SPierre Pronchery    $ make install                                   # Unix
1298b077aed3SPierre Pronchery    $ mms install                                    ! OpenVMS
1299b077aed3SPierre Pronchery    $ nmake install                                  # Windows
1300b077aed3SPierre Pronchery
1301b077aed3SPierre ProncheryNote that in order to perform the install step above you need to have
1302b077aed3SPierre Proncheryappropriate permissions to write to the installation directory.
1303b077aed3SPierre Pronchery
1304b077aed3SPierre ProncheryThe above commands will install all the software components in this
1305b077aed3SPierre Proncherydirectory tree under `<PREFIX>` (the directory given with `--prefix` or
1306b077aed3SPierre Proncheryits default):
1307b077aed3SPierre Pronchery
1308b077aed3SPierre Pronchery### Unix / Linux / macOS
1309b077aed3SPierre Pronchery
1310b077aed3SPierre Pronchery    bin/           Contains the openssl binary and a few other
1311b077aed3SPierre Pronchery                   utility scripts.
1312b077aed3SPierre Pronchery    include/openssl
1313b077aed3SPierre Pronchery                   Contains the header files needed if you want
1314b077aed3SPierre Pronchery                   to build your own programs that use libcrypto
1315b077aed3SPierre Pronchery                   or libssl.
1316b077aed3SPierre Pronchery    lib            Contains the OpenSSL library files.
1317b077aed3SPierre Pronchery    lib/engines    Contains the OpenSSL dynamically loadable engines.
1318b077aed3SPierre Pronchery
1319b077aed3SPierre Pronchery    share/man/man1 Contains the OpenSSL command line man-pages.
1320b077aed3SPierre Pronchery    share/man/man3 Contains the OpenSSL library calls man-pages.
1321b077aed3SPierre Pronchery    share/man/man5 Contains the OpenSSL configuration format man-pages.
1322b077aed3SPierre Pronchery    share/man/man7 Contains the OpenSSL other misc man-pages.
1323b077aed3SPierre Pronchery
1324b077aed3SPierre Pronchery    share/doc/openssl/html/man1
1325b077aed3SPierre Pronchery    share/doc/openssl/html/man3
1326b077aed3SPierre Pronchery    share/doc/openssl/html/man5
1327b077aed3SPierre Pronchery    share/doc/openssl/html/man7
1328b077aed3SPierre Pronchery                   Contains the HTML rendition of the man-pages.
1329b077aed3SPierre Pronchery
1330b077aed3SPierre Pronchery### OpenVMS
1331b077aed3SPierre Pronchery
1332b077aed3SPierre Pronchery'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
1333b077aed3SPierre Pronchery'sover' is replaced with the shared library version (`0101` for 1.1), and
1334b077aed3SPierre Pronchery'pz' is replaced with the pointer size OpenSSL was built with:
1335b077aed3SPierre Pronchery
1336b077aed3SPierre Pronchery    [.EXE.'arch']  Contains the openssl binary.
1337b077aed3SPierre Pronchery    [.EXE]         Contains a few utility scripts.
1338b077aed3SPierre Pronchery    [.include.openssl]
1339b077aed3SPierre Pronchery                   Contains the header files needed if you want
1340b077aed3SPierre Pronchery                   to build your own programs that use libcrypto
1341b077aed3SPierre Pronchery                   or libssl.
1342b077aed3SPierre Pronchery    [.LIB.'arch']  Contains the OpenSSL library files.
1343b077aed3SPierre Pronchery    [.ENGINES'sover''pz'.'arch']
1344b077aed3SPierre Pronchery                   Contains the OpenSSL dynamically loadable engines.
1345b077aed3SPierre Pronchery    [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1346b077aed3SPierre Pronchery                   These define appropriate logical names and
1347b077aed3SPierre Pronchery                   command symbols.
1348b077aed3SPierre Pronchery    [.SYSTEST]     Contains the installation verification procedure.
1349b077aed3SPierre Pronchery    [.HTML]        Contains the HTML rendition of the manual pages.
1350b077aed3SPierre Pronchery
1351b077aed3SPierre Pronchery### Additional Directories
1352b077aed3SPierre Pronchery
1353b077aed3SPierre ProncheryAdditionally, install will add the following directories under
1354b077aed3SPierre ProncheryOPENSSLDIR (the directory given with `--openssldir` or its default)
1355b077aed3SPierre Proncheryfor you convenience:
1356b077aed3SPierre Pronchery
1357b077aed3SPierre Pronchery    certs          Initially empty, this is the default location
1358b077aed3SPierre Pronchery                   for certificate files.
1359b077aed3SPierre Pronchery    private        Initially empty, this is the default location
1360b077aed3SPierre Pronchery                   for private key files.
1361b077aed3SPierre Pronchery    misc           Various scripts.
1362b077aed3SPierre Pronchery
1363b077aed3SPierre ProncheryThe installation directory should be appropriately protected to ensure
1364b077aed3SPierre Proncheryunprivileged users cannot make changes to OpenSSL binaries or files, or
1365b077aed3SPierre Proncheryinstall engines.  If you already have a pre-installed version of OpenSSL as
1366b077aed3SPierre Proncherypart of your Operating System it is recommended that you do not overwrite
1367b077aed3SPierre Proncherythe system version and instead install to somewhere else.
1368b077aed3SPierre Pronchery
1369b077aed3SPierre ProncheryPackage builders who want to configure the library for standard locations,
1370b077aed3SPierre Proncherybut have the package installed somewhere else so that it can easily be
1371b077aed3SPierre Proncherypackaged, can use
1372b077aed3SPierre Pronchery
1373b077aed3SPierre Pronchery    $ make DESTDIR=/tmp/package-root install         # Unix
1374b077aed3SPierre Pronchery    $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
1375b077aed3SPierre Pronchery
1376b077aed3SPierre ProncheryThe specified destination directory will be prepended to all installation
1377b077aed3SPierre Proncherytarget paths.
1378b077aed3SPierre Pronchery
1379b077aed3SPierre ProncheryCompatibility issues with previous OpenSSL versions
1380b077aed3SPierre Pronchery---------------------------------------------------
1381b077aed3SPierre Pronchery
1382b077aed3SPierre Pronchery### COMPILING existing applications
1383b077aed3SPierre Pronchery
1384b077aed3SPierre ProncheryStarting with version 1.1.0, OpenSSL hides a number of structures that were
1385b077aed3SPierre Proncherypreviously open.  This includes all internal libssl structures and a number
1386b077aed3SPierre Proncheryof EVP types.  Accessor functions have been added to allow controlled access
1387b077aed3SPierre Proncheryto the structures' data.
1388b077aed3SPierre Pronchery
1389b077aed3SPierre ProncheryThis means that some software needs to be rewritten to adapt to the new ways
1390b077aed3SPierre Proncheryof doing things.  This often amounts to allocating an instance of a structure
1391b077aed3SPierre Proncheryexplicitly where you could previously allocate them on the stack as automatic
1392b077aed3SPierre Proncheryvariables, and using the provided accessor functions where you would previously
1393b077aed3SPierre Proncheryaccess a structure's field directly.
1394b077aed3SPierre Pronchery
1395b077aed3SPierre ProncherySome APIs have changed as well.  However, older APIs have been preserved when
1396b077aed3SPierre Proncherypossible.
1397b077aed3SPierre Pronchery
1398b077aed3SPierre ProncheryPost-installation Notes
1399b077aed3SPierre Pronchery-----------------------
1400b077aed3SPierre Pronchery
1401b077aed3SPierre ProncheryWith the default OpenSSL installation comes a FIPS provider module, which
1402b077aed3SPierre Proncheryneeds some post-installation attention, without which it will not be usable.
1403b077aed3SPierre ProncheryThis involves using the following command:
1404b077aed3SPierre Pronchery
1405b077aed3SPierre Pronchery    $ openssl fipsinstall
1406b077aed3SPierre Pronchery
1407b077aed3SPierre ProncherySee the openssl-fipsinstall(1) manual for details and examples.
1408b077aed3SPierre Pronchery
1409b077aed3SPierre ProncheryAdvanced Build Options
1410b077aed3SPierre Pronchery======================
1411b077aed3SPierre Pronchery
1412b077aed3SPierre ProncheryEnvironment Variables
1413b077aed3SPierre Pronchery---------------------
1414b077aed3SPierre Pronchery
1415b077aed3SPierre ProncheryA number of environment variables can be used to provide additional control
1416b077aed3SPierre Proncheryover the build process.  Typically these should be defined prior to running
1417b077aed3SPierre Pronchery`Configure`.  Not all environment variables are relevant to all platforms.
1418b077aed3SPierre Pronchery
1419b077aed3SPierre Pronchery    AR
1420b077aed3SPierre Pronchery                   The name of the ar executable to use.
1421b077aed3SPierre Pronchery
1422b077aed3SPierre Pronchery    BUILDFILE
1423b077aed3SPierre Pronchery                   Use a different build file name than the platform default
1424b077aed3SPierre Pronchery                   ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1425b077aed3SPierre Pronchery                   "descrip.mms" on OpenVMS).  This requires that there is a
1426b077aed3SPierre Pronchery                   corresponding build file template.
1427b077aed3SPierre Pronchery                   See [Configurations/README.md](Configurations/README.md)
1428b077aed3SPierre Pronchery                   for further information.
1429b077aed3SPierre Pronchery
1430b077aed3SPierre Pronchery    CC
1431b077aed3SPierre Pronchery                   The compiler to use. Configure will attempt to pick a default
1432b077aed3SPierre Pronchery                   compiler for your platform but this choice can be overridden
1433b077aed3SPierre Pronchery                   using this variable. Set it to the compiler executable you wish
1434b077aed3SPierre Pronchery                   to use, e.g. gcc or clang.
1435b077aed3SPierre Pronchery
1436b077aed3SPierre Pronchery    CROSS_COMPILE
1437b077aed3SPierre Pronchery                   This environment variable has the same meaning as for the
1438b077aed3SPierre Pronchery                   "--cross-compile-prefix" Configure flag described above. If both
1439b077aed3SPierre Pronchery                   are set then the Configure flag takes precedence.
1440b077aed3SPierre Pronchery
1441b077aed3SPierre Pronchery    HASHBANGPERL
1442b077aed3SPierre Pronchery                   The command string for the Perl executable to insert in the
1443b077aed3SPierre Pronchery                   #! line of perl scripts that will be publicly installed.
1444b077aed3SPierre Pronchery                   Default: /usr/bin/env perl
1445b077aed3SPierre Pronchery                   Note: the value of this variable is added to the same scripts
1446b077aed3SPierre Pronchery                   on all platforms, but it's only relevant on Unix-like platforms.
1447b077aed3SPierre Pronchery
1448b077aed3SPierre Pronchery    KERNEL_BITS
1449b077aed3SPierre Pronchery                   This can be the value `32` or `64` to specify the architecture
1450b077aed3SPierre Pronchery                   when it is not "obvious" to the configuration. It should generally
1451b077aed3SPierre Pronchery                   not be necessary to specify this environment variable.
1452b077aed3SPierre Pronchery
1453b077aed3SPierre Pronchery    NM
1454b077aed3SPierre Pronchery                   The name of the nm executable to use.
1455b077aed3SPierre Pronchery
1456b077aed3SPierre Pronchery    OPENSSL_LOCAL_CONFIG_DIR
1457b077aed3SPierre Pronchery                   OpenSSL comes with a database of information about how it
1458b077aed3SPierre Pronchery                   should be built on different platforms as well as build file
1459b077aed3SPierre Pronchery                   templates for those platforms. The database is comprised of
1460b077aed3SPierre Pronchery                   ".conf" files in the Configurations directory.  The build
1461b077aed3SPierre Pronchery                   file templates reside there as well as ".tmpl" files. See the
1462b077aed3SPierre Pronchery                   file [Configurations/README.md](Configurations/README.md)
1463b077aed3SPierre Pronchery                   for further information about the format of ".conf" files
1464b077aed3SPierre Pronchery                   as well as information on the ".tmpl" files.
1465b077aed3SPierre Pronchery                   In addition to the standard ".conf" and ".tmpl" files, it is
1466b077aed3SPierre Pronchery                   possible to create your own ".conf" and ".tmpl" files and
1467b077aed3SPierre Pronchery                   store them locally, outside the OpenSSL source tree.
1468b077aed3SPierre Pronchery                   This environment variable can be set to the directory where
1469b077aed3SPierre Pronchery                   these files are held and will be considered by Configure
1470b077aed3SPierre Pronchery                   before it looks in the standard directories.
1471b077aed3SPierre Pronchery
1472b077aed3SPierre Pronchery    PERL
1473b077aed3SPierre Pronchery                   The name of the Perl executable to use when building OpenSSL.
1474b077aed3SPierre Pronchery                   Only needed if builing should use a different Perl executable
1475b077aed3SPierre Pronchery                   than what is used to run the Configure script.
1476b077aed3SPierre Pronchery
1477b077aed3SPierre Pronchery    RANLIB
1478b077aed3SPierre Pronchery                   The name of the ranlib executable to use.
1479b077aed3SPierre Pronchery
1480b077aed3SPierre Pronchery    RC
1481b077aed3SPierre Pronchery                   The name of the rc executable to use. The default will be as
1482b077aed3SPierre Pronchery                   defined for the target platform in the ".conf" file. If not
1483b077aed3SPierre Pronchery                   defined then "windres" will be used. The WINDRES environment
1484b077aed3SPierre Pronchery                   variable is synonymous to this. If both are defined then RC
1485b077aed3SPierre Pronchery                   takes precedence.
1486b077aed3SPierre Pronchery
1487b077aed3SPierre Pronchery    WINDRES
1488b077aed3SPierre Pronchery                   See RC.
1489b077aed3SPierre Pronchery
1490b077aed3SPierre ProncheryMakefile Targets
1491b077aed3SPierre Pronchery----------------
1492b077aed3SPierre Pronchery
1493b077aed3SPierre ProncheryThe `Configure` script generates a Makefile in a format relevant to the specific
1494b077aed3SPierre Proncheryplatform.  The Makefiles provide a number of targets that can be used.  Not all
1495b077aed3SPierre Proncherytargets may be available on all platforms.  Only the most common targets are
1496b077aed3SPierre Proncherydescribed here.  Examine the Makefiles themselves for the full list.
1497b077aed3SPierre Pronchery
1498b077aed3SPierre Pronchery    all
1499b077aed3SPierre Pronchery                   The target to build all the software components and
1500b077aed3SPierre Pronchery                   documentation.
1501b077aed3SPierre Pronchery
1502b077aed3SPierre Pronchery    build_sw
1503b077aed3SPierre Pronchery                   Build all the software components.
1504b077aed3SPierre Pronchery                   THIS IS THE DEFAULT TARGET.
1505b077aed3SPierre Pronchery
1506b077aed3SPierre Pronchery    build_docs
1507b077aed3SPierre Pronchery                   Build all documentation components.
1508b077aed3SPierre Pronchery
1509b077aed3SPierre Pronchery    clean
1510b077aed3SPierre Pronchery                   Remove all build artefacts and return the directory to a "clean"
1511b077aed3SPierre Pronchery                   state.
1512b077aed3SPierre Pronchery
1513b077aed3SPierre Pronchery    depend
1514b077aed3SPierre Pronchery                   Rebuild the dependencies in the Makefiles. This is a legacy
1515b077aed3SPierre Pronchery                   option that no longer needs to be used since OpenSSL 1.1.0.
1516b077aed3SPierre Pronchery
1517b077aed3SPierre Pronchery    install
1518b077aed3SPierre Pronchery                   Install all OpenSSL components.
1519b077aed3SPierre Pronchery
1520b077aed3SPierre Pronchery    install_sw
1521b077aed3SPierre Pronchery                   Only install the OpenSSL software components.
1522b077aed3SPierre Pronchery
1523b077aed3SPierre Pronchery    install_docs
1524b077aed3SPierre Pronchery                   Only install the OpenSSL documentation components.
1525b077aed3SPierre Pronchery
1526b077aed3SPierre Pronchery    install_man_docs
1527b077aed3SPierre Pronchery                   Only install the OpenSSL man pages (Unix only).
1528b077aed3SPierre Pronchery
1529b077aed3SPierre Pronchery    install_html_docs
1530b077aed3SPierre Pronchery                   Only install the OpenSSL HTML documentation.
1531b077aed3SPierre Pronchery
1532b077aed3SPierre Pronchery    install_fips
1533b077aed3SPierre Pronchery                   Install the FIPS provider module configuration file.
1534b077aed3SPierre Pronchery
1535b077aed3SPierre Pronchery    list-tests
1536b077aed3SPierre Pronchery                   Prints a list of all the self test names.
1537b077aed3SPierre Pronchery
1538b077aed3SPierre Pronchery    test
1539b077aed3SPierre Pronchery                   Build and run the OpenSSL self tests.
1540b077aed3SPierre Pronchery
1541b077aed3SPierre Pronchery    uninstall
1542b077aed3SPierre Pronchery                   Uninstall all OpenSSL components.
1543b077aed3SPierre Pronchery
1544b077aed3SPierre Pronchery    reconfigure
1545b077aed3SPierre Pronchery    reconf
1546b077aed3SPierre Pronchery                   Re-run the configuration process, as exactly as the last time
1547b077aed3SPierre Pronchery                   as possible.
1548b077aed3SPierre Pronchery
1549b077aed3SPierre Pronchery    update
1550b077aed3SPierre Pronchery                   This is a developer option. If you are developing a patch for
1551b077aed3SPierre Pronchery                   OpenSSL you may need to use this if you want to update
1552b077aed3SPierre Pronchery                   automatically generated files; add new error codes or add new
1553b077aed3SPierre Pronchery                   (or change the visibility of) public API functions. (Unix only).
1554b077aed3SPierre Pronchery
1555b077aed3SPierre ProncheryRunning Selected Tests
1556b077aed3SPierre Pronchery----------------------
1557b077aed3SPierre Pronchery
1558b077aed3SPierre ProncheryYou can specify a set of tests to be performed
1559b077aed3SPierre Proncheryusing the `make` variable `TESTS`.
1560b077aed3SPierre Pronchery
1561b077aed3SPierre ProncherySee the section [Running Selected Tests of
1562b077aed3SPierre Proncherytest/README.md](test/README.md#running-selected-tests).
1563b077aed3SPierre Pronchery
1564b077aed3SPierre ProncheryTroubleshooting
1565b077aed3SPierre Pronchery===============
1566b077aed3SPierre Pronchery
1567b077aed3SPierre ProncheryConfiguration Problems
1568b077aed3SPierre Pronchery----------------------
1569b077aed3SPierre Pronchery
1570b077aed3SPierre Pronchery### Selecting the correct target
1571b077aed3SPierre Pronchery
1572b077aed3SPierre ProncheryThe `./Configure` script tries hard to guess your operating system, but in some
1573b077aed3SPierre Proncherycases it does not succeed. You will see a message like the following:
1574b077aed3SPierre Pronchery
1575b077aed3SPierre Pronchery    $ ./Configure
1576b077aed3SPierre Pronchery    Operating system: x86-whatever-minix
1577b077aed3SPierre Pronchery    This system (minix) is not supported. See file INSTALL.md for details.
1578b077aed3SPierre Pronchery
1579b077aed3SPierre ProncheryEven if the automatic target selection by the `./Configure` script fails,
1580b077aed3SPierre Proncherychances are that you still might find a suitable target in the `Configurations`
1581b077aed3SPierre Proncherydirectory, which you can supply to the `./Configure` command,
1582b077aed3SPierre Proncherypossibly after some adjustment.
1583b077aed3SPierre Pronchery
1584b077aed3SPierre ProncheryThe `Configurations/` directory contains a lot of examples of such targets.
1585b077aed3SPierre ProncheryThe main configuration file is [10-main.conf], which contains all targets that
1586b077aed3SPierre Proncheryare officially supported by the OpenSSL team. Other configuration files contain
1587b077aed3SPierre Proncherytargets contributed by other OpenSSL users. The list of targets can be found in
1588b077aed3SPierre Proncherya Perl list `my %targets = ( ... )`.
1589b077aed3SPierre Pronchery
1590b077aed3SPierre Pronchery    my %targets = (
1591b077aed3SPierre Pronchery    ...
1592b077aed3SPierre Pronchery    "target-name" => {
1593b077aed3SPierre Pronchery        inherit_from     => [ "base-target" ],
1594b077aed3SPierre Pronchery        CC               => "...",
1595b077aed3SPierre Pronchery        cflags           => add("..."),
1596b077aed3SPierre Pronchery        asm_arch         => '...',
1597b077aed3SPierre Pronchery        perlasm_scheme   => "...",
1598b077aed3SPierre Pronchery    },
1599b077aed3SPierre Pronchery    ...
1600b077aed3SPierre Pronchery    )
1601b077aed3SPierre Pronchery
1602b077aed3SPierre ProncheryIf you call `./Configure` without arguments, it will give you a list of all
1603b077aed3SPierre Proncheryknown targets. Using `grep`, you can lookup the target definition in the
1604b077aed3SPierre Pronchery`Configurations/` directory. For example the `android-x86_64` can be found in
1605b077aed3SPierre Pronchery[Configurations/15-android.conf](Configurations/15-android.conf).
1606b077aed3SPierre Pronchery
1607b077aed3SPierre ProncheryThe directory contains two README files, which explain the general syntax and
1608b077aed3SPierre Proncherydesign of the configuration files.
1609b077aed3SPierre Pronchery
1610b077aed3SPierre Pronchery - [Configurations/README.md](Configurations/README.md)
1611b077aed3SPierre Pronchery - [Configurations/README-design.md](Configurations/README-design.md)
1612b077aed3SPierre Pronchery
1613b077aed3SPierre ProncheryIf you need further help, try to search the [openssl-users] mailing list
1614b077aed3SPierre Proncheryor the [GitHub Issues] for existing solutions. If you don't find anything,
1615b077aed3SPierre Proncheryyou can [raise an issue] to ask a question yourself.
1616b077aed3SPierre Pronchery
1617b077aed3SPierre ProncheryMore about our support resources can be found in the [SUPPORT] file.
1618b077aed3SPierre Pronchery
1619b077aed3SPierre Pronchery### Configuration Errors
1620b077aed3SPierre Pronchery
1621*a7148ab3SEnji CooperIf the `./config` or `./Configure` command fails with an error message,
1622b077aed3SPierre Proncheryread the error message carefully and try to figure out whether you made
1623b077aed3SPierre Proncherya mistake (e.g., by providing a wrong option), or whether the script is
1624b077aed3SPierre Proncheryworking incorrectly. If you think you encountered a bug, please
1625b077aed3SPierre Pronchery[raise an issue] on GitHub to file a bug report.
1626b077aed3SPierre Pronchery
1627b077aed3SPierre ProncheryAlong with a short description of the bug, please provide the complete
1628b077aed3SPierre Proncheryconfigure command line and the relevant output including the error message.
1629b077aed3SPierre Pronchery
1630b077aed3SPierre ProncheryNote: To make the output readable, pleace add a 'code fence' (three backquotes
1631b077aed3SPierre Pronchery` ``` ` on a separate line) before and after your output:
1632b077aed3SPierre Pronchery
1633b077aed3SPierre Pronchery     ```
1634b077aed3SPierre Pronchery     ./Configure [your arguments...]
1635b077aed3SPierre Pronchery
1636b077aed3SPierre Pronchery     [output...]
1637b077aed3SPierre Pronchery
1638b077aed3SPierre Pronchery     ```
1639b077aed3SPierre Pronchery
1640b077aed3SPierre ProncheryBuild Failures
1641b077aed3SPierre Pronchery--------------
1642b077aed3SPierre Pronchery
1643b077aed3SPierre ProncheryIf the build fails, look carefully at the output. Try to locate and understand
1644b077aed3SPierre Proncherythe error message. It might be that the compiler is already telling you
1645b077aed3SPierre Proncheryexactly what you need to do to fix your problem.
1646b077aed3SPierre Pronchery
1647b077aed3SPierre ProncheryThere may be reasons for the failure that aren't problems in OpenSSL itself,
1648b077aed3SPierre Proncheryfor example if the compiler reports missing standard or third party headers.
1649b077aed3SPierre Pronchery
1650b077aed3SPierre ProncheryIf the build succeeded previously, but fails after a source or configuration
1651b077aed3SPierre Proncherychange, it might be helpful to clean the build tree before attempting another
1652b077aed3SPierre Proncherybuild.  Use this command:
1653b077aed3SPierre Pronchery
1654b077aed3SPierre Pronchery    $ make clean                                     # Unix
1655b077aed3SPierre Pronchery    $ mms clean                                      ! (or mmk) OpenVMS
1656b077aed3SPierre Pronchery    $ nmake clean                                    # Windows
1657b077aed3SPierre Pronchery
1658b077aed3SPierre ProncheryAssembler error messages can sometimes be sidestepped by using the `no-asm`
1659b077aed3SPierre Proncheryconfiguration option. See also [notes](#notes-on-assembler-modules-compilation).
1660b077aed3SPierre Pronchery
1661b077aed3SPierre ProncheryCompiling parts of OpenSSL with gcc and others with the system compiler will
1662b077aed3SPierre Proncheryresult in unresolved symbols on some systems.
1663b077aed3SPierre Pronchery
1664b077aed3SPierre ProncheryIf you are still having problems, try to search the [openssl-users] mailing
1665b077aed3SPierre Proncherylist or the [GitHub Issues] for existing solutions. If you think you
1666b077aed3SPierre Proncheryencountered an OpenSSL bug, please [raise an issue] to file a bug report.
1667b077aed3SPierre ProncheryPlease take the time to review the existing issues first; maybe the bug was
1668b077aed3SPierre Proncheryalready reported or has already been fixed.
1669b077aed3SPierre Pronchery
1670b077aed3SPierre ProncheryTest Failures
1671b077aed3SPierre Pronchery-------------
1672b077aed3SPierre Pronchery
1673b077aed3SPierre ProncheryIf some tests fail, look at the output.  There may be reasons for the failure
1674b077aed3SPierre Proncherythat isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
1675b077aed3SPierre Pronchery
1676b077aed3SPierre ProncheryYou may want increased verbosity, that can be accomplished as described in
1677b077aed3SPierre Proncherysection [Test Failures of test/README.md](test/README.md#test-failures).
1678b077aed3SPierre Pronchery
1679b077aed3SPierre ProncheryYou may also want to selectively specify which test(s) to perform. This can be
1680b077aed3SPierre Proncherydone using the `make` variable `TESTS` as described in section [Running
1681b077aed3SPierre ProncherySelected Tests of test/README.md](test/README.md#running-selected-tests).
1682b077aed3SPierre Pronchery
1683b077aed3SPierre ProncheryIf you find a problem with OpenSSL itself, try removing any
1684b077aed3SPierre Proncherycompiler optimization flags from the `CFLAGS` line in the Makefile and
1685b077aed3SPierre Proncheryrun `make clean; make` or corresponding.
1686b077aed3SPierre Pronchery
1687b077aed3SPierre ProncheryTo report a bug please open an issue on GitHub, at
1688b077aed3SPierre Pronchery<https://github.com/openssl/openssl/issues>.
1689b077aed3SPierre Pronchery
1690b077aed3SPierre ProncheryNotes
1691b077aed3SPierre Pronchery=====
1692b077aed3SPierre Pronchery
1693b077aed3SPierre ProncheryNotes on multi-threading
1694b077aed3SPierre Pronchery------------------------
1695b077aed3SPierre Pronchery
1696b077aed3SPierre ProncheryFor some systems, the OpenSSL `Configure` script knows what compiler options
1697b077aed3SPierre Proncheryare needed to generate a library that is suitable for multi-threaded
1698b077aed3SPierre Proncheryapplications.  On these systems, support for multi-threading is enabled
1699b077aed3SPierre Proncheryby default; use the `no-threads` option to disable (this should never be
1700b077aed3SPierre Proncherynecessary).
1701b077aed3SPierre Pronchery
1702b077aed3SPierre ProncheryOn other systems, to enable support for multi-threading, you will have
1703b077aed3SPierre Proncheryto specify at least two options: `threads`, and a system-dependent option.
1704b077aed3SPierre Pronchery(The latter is `-D_REENTRANT` on various systems.)  The default in this
1705b077aed3SPierre Proncherycase, obviously, is not to include support for multi-threading (but
1706b077aed3SPierre Proncheryyou can still use `no-threads` to suppress an annoying warning message
1707b077aed3SPierre Proncheryfrom the `Configure` script.)
1708b077aed3SPierre Pronchery
1709b077aed3SPierre ProncheryOpenSSL provides built-in support for two threading models: pthreads (found on
1710b077aed3SPierre Proncherymost UNIX/Linux systems), and Windows threads.  No other threading models are
1711b077aed3SPierre Proncherysupported.  If your platform does not provide pthreads or Windows threads then
1712b077aed3SPierre Proncheryyou should use `Configure` with the `no-threads` option.
1713b077aed3SPierre Pronchery
1714b077aed3SPierre ProncheryFor pthreads, all locks are non-recursive. In addition, in a debug build,
1715b077aed3SPierre Proncherythe mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1716b077aed3SPierre Proncheryavailable on your platform, you might have to add
1717b077aed3SPierre Pronchery`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1718b077aed3SPierre Pronchery(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1719b077aed3SPierre Proncheryifdef test cannot be used.)
1720b077aed3SPierre Pronchery
1721b077aed3SPierre ProncheryNotes on shared libraries
1722b077aed3SPierre Pronchery-------------------------
1723b077aed3SPierre Pronchery
1724b077aed3SPierre ProncheryFor most systems the OpenSSL `Configure` script knows what is needed to
1725b077aed3SPierre Proncherybuild shared libraries for libcrypto and libssl.  On these systems
1726b077aed3SPierre Proncherythe shared libraries will be created by default.  This can be suppressed and
1727b077aed3SPierre Proncheryonly static libraries created by using the `no-shared` option.  On systems
1728b077aed3SPierre Proncherywhere OpenSSL does not know how to build shared libraries the `no-shared`
1729b077aed3SPierre Proncheryoption will be forced and only static libraries will be created.
1730b077aed3SPierre Pronchery
1731b077aed3SPierre ProncheryShared libraries are named a little differently on different platforms.
1732b077aed3SPierre ProncheryOne way or another, they all have the major OpenSSL version number as
1733b077aed3SPierre Proncherypart of the file name, i.e.  for OpenSSL 1.1.x, `1.1` is somehow part of
1734b077aed3SPierre Proncherythe name.
1735b077aed3SPierre Pronchery
1736b077aed3SPierre ProncheryOn most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1737b077aed3SPierre Proncheryand `libssl.so.1.1`.
1738b077aed3SPierre Pronchery
1739b077aed3SPierre Proncheryon Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1740b077aed3SPierre Proncherywith import libraries `libcrypto.dll.a` and `libssl.dll.a`.
1741b077aed3SPierre Pronchery
1742b077aed3SPierre ProncheryOn Windows build with MSVC or using MingW, shared libraries are named
1743b077aed3SPierre Pronchery`libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1744b077aed3SPierre Pronchery`libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1745b077aed3SPierre Proncheryand `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1746b077aed3SPierre ProncheryWith MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1747b077aed3SPierre Proncherywhile with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
1748b077aed3SPierre Pronchery
1749b077aed3SPierre ProncheryOn VMS, shareable images (VMS speak for shared libraries) are named
1750b077aed3SPierre Pronchery`ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`.  However, when
1751b077aed3SPierre ProncheryOpenSSL is specifically built for 32-bit pointers, the shareable images
1752b077aed3SPierre Proncheryare named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
1753b077aed3SPierre Proncheryinstead, and when built for 64-bit pointers, they are named
1754b077aed3SPierre Pronchery`ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
1755b077aed3SPierre Pronchery
1756b077aed3SPierre ProncheryNotes on random number generation
1757b077aed3SPierre Pronchery---------------------------------
1758b077aed3SPierre Pronchery
1759b077aed3SPierre ProncheryAvailability of cryptographically secure random numbers is required for
1760b077aed3SPierre Proncherysecret key generation.  OpenSSL provides several options to seed the
1761b077aed3SPierre Proncheryinternal CSPRNG.  If not properly seeded, the internal CSPRNG will refuse
1762b077aed3SPierre Proncheryto deliver random bytes and a "PRNG not seeded error" will occur.
1763b077aed3SPierre Pronchery
1764b077aed3SPierre ProncheryThe seeding method can be configured using the `--with-rand-seed` option,
1765b077aed3SPierre Proncherywhich can be used to specify a comma separated list of seed methods.
1766b077aed3SPierre ProncheryHowever, in most cases OpenSSL will choose a suitable default method,
1767b077aed3SPierre Proncheryso it is not necessary to explicitly provide this option.  Note also
1768b077aed3SPierre Proncherythat not all methods are available on all platforms.  The FIPS provider will
1769b077aed3SPierre Proncherysilently ignore seed sources that were not validated.
1770b077aed3SPierre Pronchery
1771b077aed3SPierre ProncheryI) On operating systems which provide a suitable randomness source (in
1772b077aed3SPierre Proncheryform  of a system call or system device), OpenSSL will use the optimal
1773b077aed3SPierre Proncheryavailable  method to seed the CSPRNG from the operating system's
1774b077aed3SPierre Proncheryrandomness sources.  This corresponds to the option `--with-rand-seed=os`.
1775b077aed3SPierre Pronchery
1776b077aed3SPierre ProncheryII) On systems without such a suitable randomness source, automatic seeding
1777b077aed3SPierre Proncheryand reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
1778b077aed3SPierre Proncheryto install additional support software to obtain a random seed and reseed
1779b077aed3SPierre Proncherythe CSPRNG manually.  Please check out the manual pages for `RAND_add()`,
1780b077aed3SPierre Pronchery`RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
1781b077aed3SPierre Pronchery
1782b077aed3SPierre ProncheryNotes on assembler modules compilation
1783b077aed3SPierre Pronchery--------------------------------------
1784b077aed3SPierre Pronchery
1785b077aed3SPierre ProncheryCompilation of some code paths in assembler modules might depend on whether the
1786b077aed3SPierre Proncherycurrent assembler version supports certain ISA extensions or not. Code paths
1787b077aed3SPierre Proncherythat use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
1788b077aed3SPierre ProncheryApart from that, the minimum requirements for the assembler versions are shown
1789b077aed3SPierre Proncheryin the table below:
1790b077aed3SPierre Pronchery
1791b077aed3SPierre Pronchery| ISA extension | GNU as | nasm   | llvm    |
1792b077aed3SPierre Pronchery|---------------|--------|--------|---------|
1793b077aed3SPierre Pronchery| AVX           | 2.19   | 2.09   | 3.0     |
1794b077aed3SPierre Pronchery| AVX2          | 2.22   | 2.10   | 3.1     |
1795b077aed3SPierre Pronchery| ADCX/ADOX     | 2.23   | 2.10   | 3.3     |
1796b077aed3SPierre Pronchery| AVX512        | 2.25   | 2.11.8 | 3.6 (*) |
1797b077aed3SPierre Pronchery| AVX512IFMA    | 2.26   | 2.11.8 | 6.0 (*) |
1798b077aed3SPierre Pronchery| VAES          | 2.30   | 2.13.3 | 6.0 (*) |
1799b077aed3SPierre Pronchery
1800b077aed3SPierre Pronchery---
1801b077aed3SPierre Pronchery
1802b077aed3SPierre Pronchery(*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
1803b077aed3SPierre Proncheryan explicit -march flag was apparently required to compile assembly modules. But
1804b077aed3SPierre Proncherythen the compiler generates processor-specific code, which in turn contradicts
1805b077aed3SPierre Proncherythe idea of performing dispatch at run-time, which is facilitated by the special
1806b077aed3SPierre Proncheryvariable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
1807b077aed3SPierre Proncheryaround the problem by forcing the build procedure to use the following script:
1808b077aed3SPierre Pronchery
1809b077aed3SPierre Pronchery    #!/bin/sh
1810b077aed3SPierre Pronchery    exec clang -no-integrated-as "$@"
1811b077aed3SPierre Pronchery
1812b077aed3SPierre Proncheryinstead of the real clang. In which case it doesn't matter what clang version
1813b077aed3SPierre Proncheryis used, as it is the version of the GNU assembler that will be checked.
1814b077aed3SPierre Pronchery
1815b077aed3SPierre Pronchery---
1816b077aed3SPierre Pronchery
1817b077aed3SPierre Pronchery<!-- Links  -->
1818b077aed3SPierre Pronchery
1819b077aed3SPierre Pronchery[openssl-users]:
1820b077aed3SPierre Pronchery    <https://mta.openssl.org/mailman/listinfo/openssl-users>
1821b077aed3SPierre Pronchery
1822b077aed3SPierre Pronchery[SUPPORT]:
1823b077aed3SPierre Pronchery    ./SUPPORT.md
1824b077aed3SPierre Pronchery
1825b077aed3SPierre Pronchery[GitHub Issues]:
1826b077aed3SPierre Pronchery    <https://github.com/openssl/openssl/issues>
1827b077aed3SPierre Pronchery
1828b077aed3SPierre Pronchery[raise an issue]:
1829b077aed3SPierre Pronchery    <https://github.com/openssl/openssl/issues/new/choose>
1830b077aed3SPierre Pronchery
1831b077aed3SPierre Pronchery[10-main.conf]:
1832b077aed3SPierre Pronchery    Configurations/10-main.conf
1833