]> begriffs open source - ai-pg/blob - full-docs/txt/install-make.txt
Convert HTML docs to more streamlined TXT
[ai-pg] / full-docs / txt / install-make.txt
1
2 17.3. Building and Installation with Autoconf and Make #
3
4    17.3.1. Short Version
5    17.3.2. Installation Procedure
6    17.3.3. configure Options
7    17.3.4. configure Environment Variables
8
9 17.3.1. Short Version #
10
11 ./configure
12 make
13 su
14 make install
15 adduser postgres
16 mkdir -p /usr/local/pgsql/data
17 chown postgres /usr/local/pgsql/data
18 su - postgres
19 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
20 /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
21 /usr/local/pgsql/bin/createdb test
22 /usr/local/pgsql/bin/psql test
23
24    The long version is the rest of this section.
25
26 17.3.2. Installation Procedure #
27
28     1. Configuration
29        The first step of the installation procedure is to configure the
30        source tree for your system and choose the options you would like.
31        This is done by running the configure script. For a default
32        installation simply enter:
33 ./configure
34
35        This script will run a number of tests to determine values for
36        various system dependent variables and detect any quirks of your
37        operating system, and finally will create several files in the
38        build tree to record what it found.
39        You can also run configure in a directory outside the source tree,
40        and then build there, if you want to keep the build directory
41        separate from the original source files. This procedure is called a
42        VPATH build. Here's how:
43 mkdir build_dir
44 cd build_dir
45 /path/to/source/tree/configure [options go here]
46 make
47
48        The default configuration will build the server and utilities, as
49        well as all client applications and interfaces that require only a
50        C compiler. All files will be installed under /usr/local/pgsql by
51        default.
52        You can customize the build and installation process by supplying
53        one or more command line options to configure. Typically you would
54        customize the install location, or the set of optional features
55        that are built. configure has a large number of options, which are
56        described in Section 17.3.3.
57        Also, configure responds to certain environment variables, as
58        described in Section 17.3.4. These provide additional ways to
59        customize the configuration.
60     2. Build
61        To start the build, type either of:
62 make
63 make all
64
65        (Remember to use GNU make.) The build will take a few minutes
66        depending on your hardware.
67        If you want to build everything that can be built, including the
68        documentation (HTML and man pages), and the additional modules
69        (contrib), type instead:
70 make world
71
72        If you want to build everything that can be built, including the
73        additional modules (contrib), but without the documentation, type
74        instead:
75 make world-bin
76
77        If you want to invoke the build from another makefile rather than
78        manually, you must unset MAKELEVEL or set it to zero, for instance
79        like this:
80 build-postgresql:
81         $(MAKE) -C postgresql MAKELEVEL=0 all
82
83        Failure to do that can lead to strange error messages, typically
84        about missing header files.
85     3. Regression Tests
86        If you want to test the newly built server before you install it,
87        you can run the regression tests at this point. The regression
88        tests are a test suite to verify that PostgreSQL runs on your
89        machine in the way the developers expected it to. Type:
90 make check
91
92        (This won't work as root; do it as an unprivileged user.) See
93        Chapter 31 for detailed information about interpreting the test
94        results. You can repeat this test at any later time by issuing the
95        same command.
96     4. Installing the Files
97
98 Note
99        If you are upgrading an existing system be sure to read
100        Section 18.6, which has instructions about upgrading a cluster.
101        To install PostgreSQL enter:
102 make install
103
104        This will install files into the directories that were specified in
105        Step 1. Make sure that you have appropriate permissions to write
106        into that area. Normally you need to do this step as root.
107        Alternatively, you can create the target directories in advance and
108        arrange for appropriate permissions to be granted.
109        To install the documentation (HTML and man pages), enter:
110 make install-docs
111
112        If you built the world above, type instead:
113 make install-world
114
115        This also installs the documentation.
116        If you built the world without the documentation above, type
117        instead:
118 make install-world-bin
119
120        You can use make install-strip instead of make install to strip the
121        executable files and libraries as they are installed. This will
122        save some space. If you built with debugging support, stripping
123        will effectively remove the debugging support, so it should only be
124        done if debugging is no longer needed. install-strip tries to do a
125        reasonable job saving space, but it does not have perfect knowledge
126        of how to strip every unneeded byte from an executable file, so if
127        you want to save all the disk space you possibly can, you will have
128        to do manual work.
129        The standard installation provides all the header files needed for
130        client application development as well as for server-side program
131        development, such as custom functions or data types written in C.
132        Client-only installation:  If you want to install only the client
133        applications and interface libraries, then you can use these
134        commands:
135 make -C src/bin install
136 make -C src/include install
137 make -C src/interfaces install
138 make -C doc install
139
140        src/bin has a few binaries for server-only use, but they are small.
141
142    Uninstallation:  To undo the installation use the command make
143    uninstall. However, this will not remove any created directories.
144
145    Cleaning:  After the installation you can free disk space by removing
146    the built files from the source tree with the command make clean. This
147    will preserve the files made by the configure program, so that you can
148    rebuild everything with make later on. To reset the source tree to the
149    state in which it was distributed, use make distclean. If you are going
150    to build for several platforms within the same source tree you must do
151    this and re-configure for each platform. (Alternatively, use a separate
152    build tree for each platform, so that the source tree remains
153    unmodified.)
154
155    If you perform a build and then discover that your configure options
156    were wrong, or if you change anything that configure investigates (for
157    example, software upgrades), then it's a good idea to do make distclean
158    before reconfiguring and rebuilding. Without this, your changes in
159    configuration choices might not propagate everywhere they need to.
160
161 17.3.3. configure Options #
162
163    configure's command line options are explained below. This list is not
164    exhaustive (use ./configure --help to get one that is). The options not
165    covered here are meant for advanced use-cases such as
166    cross-compilation, and are documented in the standard Autoconf
167    documentation.
168
169 17.3.3.1. Installation Locations #
170
171    These options control where make install will put the files. The
172    --prefix option is sufficient for most cases. If you have special
173    needs, you can customize the installation subdirectories with the other
174    options described in this section. Beware however that changing the
175    relative locations of the different subdirectories may render the
176    installation non-relocatable, meaning you won't be able to move it
177    after installation. (The man and doc locations are not affected by this
178    restriction.) For relocatable installs, you might want to use the
179    --disable-rpath option described later.
180
181    --prefix=PREFIX #
182           Install all files under the directory PREFIX instead of
183           /usr/local/pgsql. The actual files will be installed into
184           various subdirectories; no files will ever be installed directly
185           into the PREFIX directory.
186
187    --exec-prefix=EXEC-PREFIX #
188           You can install architecture-dependent files under a different
189           prefix, EXEC-PREFIX, than what PREFIX was set to. This can be
190           useful to share architecture-independent files between hosts. If
191           you omit this, then EXEC-PREFIX is set equal to PREFIX and both
192           architecture-dependent and independent files will be installed
193           under the same tree, which is probably what you want.
194
195    --bindir=DIRECTORY #
196           Specifies the directory for executable programs. The default is
197           EXEC-PREFIX/bin, which normally means /usr/local/pgsql/bin.
198
199    --sysconfdir=DIRECTORY #
200           Sets the directory for various configuration files, PREFIX/etc
201           by default.
202
203    --libdir=DIRECTORY #
204           Sets the location to install libraries and dynamically loadable
205           modules. The default is EXEC-PREFIX/lib.
206
207    --includedir=DIRECTORY #
208           Sets the directory for installing C and C++ header files. The
209           default is PREFIX/include.
210
211    --datarootdir=DIRECTORY #
212           Sets the root directory for various types of read-only data
213           files. This only sets the default for some of the following
214           options. The default is PREFIX/share.
215
216    --datadir=DIRECTORY #
217           Sets the directory for read-only data files used by the
218           installed programs. The default is DATAROOTDIR. Note that this
219           has nothing to do with where your database files will be placed.
220
221    --localedir=DIRECTORY #
222           Sets the directory for installing locale data, in particular
223           message translation catalog files. The default is
224           DATAROOTDIR/locale.
225
226    --mandir=DIRECTORY #
227           The man pages that come with PostgreSQL will be installed under
228           this directory, in their respective manx subdirectories. The
229           default is DATAROOTDIR/man.
230
231    --docdir=DIRECTORY #
232           Sets the root directory for installing documentation files,
233           except “man” pages. This only sets the default for the following
234           options. The default value for this option is
235           DATAROOTDIR/doc/postgresql.
236
237    --htmldir=DIRECTORY #
238           The HTML-formatted documentation for PostgreSQL will be
239           installed under this directory. The default is DATAROOTDIR.
240
241 Note
242
243    Care has been taken to make it possible to install PostgreSQL into
244    shared installation locations (such as /usr/local/include) without
245    interfering with the namespace of the rest of the system. First, the
246    string “/postgresql” is automatically appended to datadir, sysconfdir,
247    and docdir, unless the fully expanded directory name already contains
248    the string “postgres” or “pgsql”. For example, if you choose /usr/local
249    as prefix, the documentation will be installed in
250    /usr/local/doc/postgresql, but if the prefix is /opt/postgres, then it
251    will be in /opt/postgres/doc. The public C header files of the client
252    interfaces are installed into includedir and are namespace-clean. The
253    internal header files and the server header files are installed into
254    private directories under includedir. See the documentation of each
255    interface for information about how to access its header files.
256    Finally, a private subdirectory will also be created, if appropriate,
257    under libdir for dynamically loadable modules.
258
259 17.3.3.2. PostgreSQL Features #
260
261    The options described in this section enable building of various
262    PostgreSQL features that are not built by default. Most of these are
263    non-default only because they require additional software, as described
264    in Section 17.1.
265
266    --enable-nls[=LANGUAGES] #
267           Enables Native Language Support (NLS), that is, the ability to
268           display a program's messages in a language other than English.
269           LANGUAGES is an optional space-separated list of codes of the
270           languages that you want supported, for example --enable-nls='de
271           fr'. (The intersection between your list and the set of actually
272           provided translations will be computed automatically.) If you do
273           not specify a list, then all available translations are
274           installed.
275
276           To use this option, you will need an implementation of the
277           Gettext API.
278
279    --with-perl #
280           Build the PL/Perl server-side language.
281
282    --with-python #
283           Build the PL/Python server-side language.
284
285    --with-tcl #
286           Build the PL/Tcl server-side language.
287
288    --with-tclconfig=DIRECTORY #
289           Tcl installs the file tclConfig.sh, which contains configuration
290           information needed to build modules interfacing to Tcl. This
291           file is normally found automatically at a well-known location,
292           but if you want to use a different version of Tcl you can
293           specify the directory in which to look for tclConfig.sh.
294
295    --with-llvm #
296           Build with support for LLVM based JIT compilation (see
297           Chapter 30). This requires the LLVM library to be installed. The
298           minimum required version of LLVM is currently 14.
299
300           llvm-config will be used to find the required compilation
301           options. llvm-config will be searched for in your PATH. If that
302           would not yield the desired program, use LLVM_CONFIG to specify
303           a path to the correct llvm-config. For example
304
305 ./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config'
306
307           LLVM support requires a compatible clang compiler (specified, if
308           necessary, using the CLANG environment variable), and a working
309           C++ compiler (specified, if necessary, using the CXX environment
310           variable).
311
312    --with-lz4 #
313           Build with LZ4 compression support.
314
315    --with-zstd #
316           Build with Zstandard compression support.
317
318    --with-ssl=LIBRARY #
319           Build with support for SSL (encrypted) connections. The only
320           LIBRARY supported is openssl, which is used for both OpenSSL and
321           LibreSSL. This requires the OpenSSL package to be installed.
322           configure will check for the required header files and libraries
323           to make sure that your OpenSSL installation is sufficient before
324           proceeding.
325
326    --with-openssl #
327           Obsolete equivalent of --with-ssl=openssl.
328
329    --with-gssapi #
330           Build with support for GSSAPI authentication. MIT Kerberos is
331           required to be installed for GSSAPI. On many systems, the GSSAPI
332           system (a part of the MIT Kerberos installation) is not
333           installed in a location that is searched by default (e.g.,
334           /usr/include, /usr/lib), so you must use the options
335           --with-includes and --with-libraries in addition to this option.
336           configure will check for the required header files and libraries
337           to make sure that your GSSAPI installation is sufficient before
338           proceeding.
339
340    --with-ldap #
341           Build with LDAP support for authentication and connection
342           parameter lookup (see Section 32.18 and Section 20.10 for more
343           information). On Unix, this requires the OpenLDAP package to be
344           installed. On Windows, the default WinLDAP library is used.
345           configure will check for the required header files and libraries
346           to make sure that your OpenLDAP installation is sufficient
347           before proceeding.
348
349    --with-pam #
350           Build with PAM (Pluggable Authentication Modules) support.
351
352    --with-bsd-auth #
353           Build with BSD Authentication support. (The BSD Authentication
354           framework is currently only available on OpenBSD.)
355
356    --with-systemd #
357           Build with support for systemd service notifications. This
358           improves integration if the server is started under systemd but
359           has no impact otherwise; see Section 18.3 for more information.
360           libsystemd and the associated header files need to be installed
361           to use this option.
362
363    --with-bonjour #
364           Build with support for Bonjour automatic service discovery. This
365           requires Bonjour support in your operating system. Recommended
366           on macOS.
367
368    --with-uuid=LIBRARY #
369           Build the uuid-ossp module (which provides functions to generate
370           UUIDs), using the specified UUID library. LIBRARY must be one
371           of:
372
373           + bsd to use the UUID functions found in FreeBSD and some other
374             BSD-derived systems
375           + e2fs to use the UUID library created by the e2fsprogs project;
376             this library is present in most Linux systems and in macOS,
377             and can be obtained for other platforms as well
378           + ossp to use the OSSP UUID library
379
380    --with-ossp-uuid #
381           Obsolete equivalent of --with-uuid=ossp.
382
383    --with-libcurl #
384           Build with libcurl support for OAuth 2.0 client flows. Libcurl
385           version 7.61.0 or later is required for this feature. Building
386           with this will check for the required header files and libraries
387           to make sure that your curl installation is sufficient before
388           proceeding.
389
390    --with-libnuma #
391           Build with libnuma support for basic NUMA support. Only
392           supported on platforms for which the libnuma library is
393           implemented.
394
395    --with-liburing #
396           Build with liburing, enabling io_uring support for asynchronous
397           I/O.
398
399           To detect the required compiler and linker options, PostgreSQL
400           will query pkg-config.
401
402           To use a liburing installation that is in an unusual location,
403           you can set pkg-config-related environment variables (see its
404           documentation).
405
406    --with-libxml #
407           Build with libxml2, enabling SQL/XML support. Libxml2 version
408           2.6.23 or later is required for this feature.
409
410           To detect the required compiler and linker options, PostgreSQL
411           will query pkg-config, if that is installed and knows about
412           libxml2. Otherwise the program xml2-config, which is installed
413           by libxml2, will be used if it is found. Use of pkg-config is
414           preferred, because it can deal with multi-architecture
415           installations better.
416
417           To use a libxml2 installation that is in an unusual location,
418           you can set pkg-config-related environment variables (see its
419           documentation), or set the environment variable XML2_CONFIG to
420           point to the xml2-config program belonging to the libxml2
421           installation, or set the variables XML2_CFLAGS and XML2_LIBS.
422           (If pkg-config is installed, then to override its idea of where
423           libxml2 is you must either set XML2_CONFIG or set both
424           XML2_CFLAGS and XML2_LIBS to nonempty strings.)
425
426    --with-libxslt #
427           Build with libxslt, enabling the xml2 module to perform XSL
428           transformations of XML. --with-libxml must be specified as well.
429
430    --with-selinux #
431           Build with SElinux support, enabling the sepgsql extension.
432
433 17.3.3.3. Anti-Features #
434
435    The options described in this section allow disabling certain
436    PostgreSQL features that are built by default, but which might need to
437    be turned off if the required software or system features are not
438    available. Using these options is not recommended unless really
439    necessary.
440
441    --without-icu #
442           Build without support for the ICU library, disabling the use of
443           ICU collation features (see Section 23.2).
444
445    --without-readline #
446           Prevents use of the Readline library (and libedit as well). This
447           option disables command-line editing and history in psql.
448
449    --with-libedit-preferred #
450           Favors the use of the BSD-licensed libedit library rather than
451           GPL-licensed Readline. This option is significant only if you
452           have both libraries installed; the default in that case is to
453           use Readline.
454
455    --without-zlib #
456           Prevents use of the Zlib library. This disables support for
457           compressed archives in pg_dump and pg_restore.
458
459 17.3.3.4. Build Process Details #
460
461    --with-includes=DIRECTORIES #
462           DIRECTORIES is a colon-separated list of directories that will
463           be added to the list the compiler searches for header files. If
464           you have optional packages (such as GNU Readline) installed in a
465           non-standard location, you have to use this option and probably
466           also the corresponding --with-libraries option.
467
468           Example: --with-includes=/opt/gnu/include:/usr/sup/include.
469
470    --with-libraries=DIRECTORIES #
471           DIRECTORIES is a colon-separated list of directories to search
472           for libraries. You will probably have to use this option (and
473           the corresponding --with-includes option) if you have packages
474           installed in non-standard locations.
475
476           Example: --with-libraries=/opt/gnu/lib:/usr/sup/lib.
477
478    --with-system-tzdata=DIRECTORY #
479           PostgreSQL includes its own time zone database, which it
480           requires for date and time operations. This time zone database
481           is in fact compatible with the IANA time zone database provided
482           by many operating systems such as FreeBSD, Linux, and Solaris,
483           so it would be redundant to install it again. When this option
484           is used, the system-supplied time zone database in DIRECTORY is
485           used instead of the one included in the PostgreSQL source
486           distribution. DIRECTORY must be specified as an absolute path.
487           /usr/share/zoneinfo is a likely directory on some operating
488           systems. Note that the installation routine will not detect
489           mismatching or erroneous time zone data. If you use this option,
490           you are advised to run the regression tests to verify that the
491           time zone data you have pointed to works correctly with
492           PostgreSQL.
493
494           This option is mainly aimed at binary package distributors who
495           know their target operating system well. The main advantage of
496           using this option is that the PostgreSQL package won't need to
497           be upgraded whenever any of the many local daylight-saving time
498           rules change. Another advantage is that PostgreSQL can be
499           cross-compiled more straightforwardly if the time zone database
500           files do not need to be built during the installation.
501
502    --with-extra-version=STRING #
503           Append STRING to the PostgreSQL version number. You can use
504           this, for example, to mark binaries built from unreleased Git
505           snapshots or containing custom patches with an extra version
506           string, such as a git describe identifier or a distribution
507           package release number.
508
509    --disable-rpath #
510           Do not mark PostgreSQL's executables to indicate that they
511           should search for shared libraries in the installation's library
512           directory (see --libdir). On most platforms, this marking uses
513           an absolute path to the library directory, so that it will be
514           unhelpful if you relocate the installation later. However, you
515           will then need to provide some other way for the executables to
516           find the shared libraries. Typically this requires configuring
517           the operating system's dynamic linker to search the library
518           directory; see Section 17.5.1 for more detail.
519
520 17.3.3.5. Miscellaneous #
521
522    It's fairly common, particularly for test builds, to adjust the default
523    port number with --with-pgport. The other options in this section are
524    recommended only for advanced users.
525
526    --with-pgport=NUMBER #
527           Set NUMBER as the default port number for server and clients.
528           The default is 5432. The port can always be changed later on,
529           but if you specify it here then both server and clients will
530           have the same default compiled in, which can be very convenient.
531           Usually the only good reason to select a non-default value is if
532           you intend to run multiple PostgreSQL servers on the same
533           machine.
534
535    --with-krb-srvnam=NAME #
536           The default name of the Kerberos service principal used by
537           GSSAPI. postgres is the default. There's usually no reason to
538           change this unless you are building for a Windows environment,
539           in which case it must be set to upper case POSTGRES.
540
541    --with-segsize=SEGSIZE #
542           Set the segment size, in gigabytes. Large tables are divided
543           into multiple operating-system files, each of size equal to the
544           segment size. This avoids problems with file size limits that
545           exist on many platforms. The default segment size, 1 gigabyte,
546           is safe on all supported platforms. If your operating system has
547           “largefile” support (which most do, nowadays), you can use a
548           larger segment size. This can be helpful to reduce the number of
549           file descriptors consumed when working with very large tables.
550           But be careful not to select a value larger than is supported by
551           your platform and the file systems you intend to use. Other
552           tools you might wish to use, such as tar, could also set limits
553           on the usable file size. It is recommended, though not
554           absolutely required, that this value be a power of 2. Note that
555           changing this value breaks on-disk database compatibility,
556           meaning you cannot use pg_upgrade to upgrade to a build with a
557           different segment size.
558
559    --with-blocksize=BLOCKSIZE #
560           Set the block size, in kilobytes. This is the unit of storage
561           and I/O within tables. The default, 8 kilobytes, is suitable for
562           most situations; but other values may be useful in special
563           cases. The value must be a power of 2 between 1 and 32
564           (kilobytes). Note that changing this value breaks on-disk
565           database compatibility, meaning you cannot use pg_upgrade to
566           upgrade to a build with a different block size.
567
568    --with-wal-blocksize=BLOCKSIZE #
569           Set the WAL block size, in kilobytes. This is the unit of
570           storage and I/O within the WAL log. The default, 8 kilobytes, is
571           suitable for most situations; but other values may be useful in
572           special cases. The value must be a power of 2 between 1 and 64
573           (kilobytes). Note that changing this value breaks on-disk
574           database compatibility, meaning you cannot use pg_upgrade to
575           upgrade to a build with a different WAL block size.
576
577 17.3.3.6. Developer Options #
578
579    Most of the options in this section are only of interest for developing
580    or debugging PostgreSQL. They are not recommended for production
581    builds, except for --enable-debug, which can be useful to enable
582    detailed bug reports in the unlucky event that you encounter a bug. On
583    platforms supporting DTrace, --enable-dtrace may also be reasonable to
584    use in production.
585
586    When building an installation that will be used to develop code inside
587    the server, it is recommended to use at least the options
588    --enable-debug and --enable-cassert.
589
590    --enable-debug #
591           Compiles all programs and libraries with debugging symbols. This
592           means that you can run the programs in a debugger to analyze
593           problems. This enlarges the size of the installed executables
594           considerably, and on non-GCC compilers it usually also disables
595           compiler optimization, causing slowdowns. However, having the
596           symbols available is extremely helpful for dealing with any
597           problems that might arise. Currently, this option is recommended
598           for production installations only if you use GCC. But you should
599           always have it on if you are doing development work or running a
600           beta version.
601
602    --enable-cassert #
603           Enables assertion checks in the server, which test for many
604           “cannot happen” conditions. This is invaluable for code
605           development purposes, but the tests can slow down the server
606           significantly. Also, having the tests turned on won't
607           necessarily enhance the stability of your server! The assertion
608           checks are not categorized for severity, and so what might be a
609           relatively harmless bug will still lead to server restarts if it
610           triggers an assertion failure. This option is not recommended
611           for production use, but you should have it on for development
612           work or when running a beta version.
613
614    --enable-tap-tests #
615           Enable tests using the Perl TAP tools. This requires a Perl
616           installation and the Perl module IPC::Run. See Section 31.4 for
617           more information.
618
619    --enable-depend #
620           Enables automatic dependency tracking. With this option, the
621           makefiles are set up so that all affected object files will be
622           rebuilt when any header file is changed. This is useful if you
623           are doing development work, but is just wasted overhead if you
624           intend only to compile once and install. At present, this option
625           only works with GCC.
626
627    --enable-coverage #
628           If using GCC, all programs and libraries are compiled with code
629           coverage testing instrumentation. When run, they generate files
630           in the build directory with code coverage metrics. See
631           Section 31.5 for more information. This option is for use only
632           with GCC and when doing development work.
633
634    --enable-profiling #
635           If using GCC, all programs and libraries are compiled so they
636           can be profiled. On backend exit, a subdirectory will be created
637           that contains the gmon.out file containing profile data. This
638           option is for use only with GCC and when doing development work.
639
640    --enable-dtrace #
641           Compiles PostgreSQL with support for the dynamic tracing tool
642           DTrace. See Section 27.5 for more information.
643
644           To point to the dtrace program, the environment variable DTRACE
645           can be set. This will often be necessary because dtrace is
646           typically installed under /usr/sbin, which might not be in your
647           PATH.
648
649           Extra command-line options for the dtrace program can be
650           specified in the environment variable DTRACEFLAGS. On Solaris,
651           to include DTrace support in a 64-bit binary, you must specify
652           DTRACEFLAGS="-64". For example, using the GCC compiler:
653
654 ./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
655
656           Using Sun's compiler:
657
658 ./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFL
659 AGS='-64' ...
660
661    --enable-injection-points #
662           Compiles PostgreSQL with support for injection points in the
663           server. Injection points allow to run user-defined code from
664           within the server in pre-defined code paths. This helps in
665           testing and in the investigation of concurrency scenarios in a
666           controlled fashion. This option is disabled by default. See
667           Section 36.10.14 for more details. This option is intended to be
668           used only by developers for testing.
669
670    --with-segsize-blocks=SEGSIZE_BLOCKS #
671           Specify the relation segment size in blocks. If both
672           --with-segsize and this option are specified, this option wins.
673           This option is only for developers, to test segment related
674           code.
675
676 17.3.4. configure Environment Variables #
677
678    In addition to the ordinary command-line options described above,
679    configure responds to a number of environment variables. You can
680    specify environment variables on the configure command line, for
681    example:
682 ./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
683
684    In this usage an environment variable is little different from a
685    command-line option. You can also set such variables beforehand:
686 export CC=/opt/bin/gcc
687 export CFLAGS='-O2 -pipe'
688 ./configure
689
690    This usage can be convenient because many programs' configuration
691    scripts respond to these variables in similar ways.
692
693    The most commonly used of these environment variables are CC and
694    CFLAGS. If you prefer a C compiler different from the one configure
695    picks, you can set the variable CC to the program of your choice. By
696    default, configure will pick gcc if available, else the platform's
697    default (usually cc). Similarly, you can override the default compiler
698    flags if needed with the CFLAGS variable.
699
700    Here is a list of the significant variables that can be set in this
701    manner:
702
703    BISON #
704           Bison program
705
706    CC #
707           C compiler
708
709    CFLAGS #
710           options to pass to the C compiler
711
712    CLANG #
713           path to clang program used to process source code for inlining
714           when compiling with --with-llvm
715
716    CPP #
717           C preprocessor
718
719    CPPFLAGS #
720           options to pass to the C preprocessor
721
722    CXX #
723           C++ compiler
724
725    CXXFLAGS #
726           options to pass to the C++ compiler
727
728    DTRACE #
729           location of the dtrace program
730
731    DTRACEFLAGS #
732           options to pass to the dtrace program
733
734    FLEX #
735           Flex program
736
737    LDFLAGS #
738           options to use when linking either executables or shared
739           libraries
740
741    LDFLAGS_EX #
742           additional options for linking executables only
743
744    LDFLAGS_SL #
745           additional options for linking shared libraries only
746
747    LLVM_CONFIG #
748           llvm-config program used to locate the LLVM installation
749
750    MSGFMT #
751           msgfmt program for native language support
752
753    PERL #
754           Perl interpreter program. This will be used to determine the
755           dependencies for building PL/Perl. The default is perl.
756
757    PYTHON #
758           Python interpreter program. This will be used to determine the
759           dependencies for building PL/Python. If this is not set, the
760           following are probed in this order: python3 python.
761
762    TCLSH #
763           Tcl interpreter program. This will be used to determine the
764           dependencies for building PL/Tcl. If this is not set, the
765           following are probed in this order: tclsh tcl tclsh8.6 tclsh86
766           tclsh8.5 tclsh85 tclsh8.4 tclsh84.
767
768    XML2_CONFIG #
769           xml2-config program used to locate the libxml2 installation
770
771    Sometimes it is useful to add compiler flags after-the-fact to the set
772    that were chosen by configure. An important example is that gcc's
773    -Werror option cannot be included in the CFLAGS passed to configure,
774    because it will break many of configure's built-in tests. To add such
775    flags, include them in the COPT environment variable while running
776    make. The contents of COPT are added to the CFLAGS, CXXFLAGS, and
777    LDFLAGS options set up by configure. For example, you could do
778 make COPT='-Werror'
779
780    or
781 export COPT='-Werror'
782 make
783
784 Note
785
786    If using GCC, it is best to build with an optimization level of at
787    least -O1, because using no optimization (-O0) disables some important
788    compiler warnings (such as the use of uninitialized variables).
789    However, non-zero optimization levels can complicate debugging because
790    stepping through compiled code will usually not match up one-to-one
791    with source code lines. If you get confused while trying to debug
792    optimized code, recompile the specific files of interest with -O0. An
793    easy way to do this is by passing an option to make: make PROFILE=-O0
794    file.o.
795
796    The COPT and PROFILE environment variables are actually handled
797    identically by the PostgreSQL makefiles. Which to use is a matter of
798    preference, but a common habit among developers is to use PROFILE for
799    one-time flag adjustments, while COPT might be kept set all the time.