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