'<unistd.h>'. This is very rarely needed.
shared_extension => File name extension used for shared
- libraries.
+ libraries.
obj_extension => File name extension used for object files.
On unix, this defaults to ".o" (NOTE: this
is here for future use, it's not
below [2].
dso_scheme => The type of dynamic shared objects to build
for. This mostly comes into play with
- engines, but can be used for other purposes
+ modules, but can be used for other purposes
as well. Valid values are "DLFCN"
(dlopen() et al), "DLFCN_NO_H" (for systems
that use dlopen() et al but do not have
fcntl.h), "DL" (shl_load() et al), "WIN32"
and "VMS".
+ uplink_arch => The architecture to be used for compiling uplink
+ source. This acts as a selector in build.info files.
+ This is separate from asm_arch because it's compiled
+ even when 'no-asm' is given, even though it contains
+ assembler source.
perlasm_scheme => The perlasm method used to create the
assembler files used when compiling with
assembler implementations.
- shared libraries; that would be libcrypto and libssl.
- shared objects (sometimes called dynamic libraries); that would
- be the engines.
+ be the modules.
- applications; those are apps/openssl and all the test apps.
Very roughly speaking, linking is done like this (words in braces
directory for the current build.info file and the corresponding build
directory, all relative to the top of the build tree.
-To begin with, things to be built are declared by setting specific
+'Configure' only knows inherently about the top build.info file. For
+any other directory that has one, further directories to look into
+must be indicated like this:
+
+ SUBDIRS=something someelse
+
+On to things to be built; they are declared by setting specific
variables:
PROGRAMS=foo bar
LIBS=libsomething
- ENGINES=libeng
+ MODULES=libeng
SCRIPTS=myhack
- EXTRA=file1 file2
-Note that the files mentioned for PROGRAMS, LIBS and ENGINES *must* be
+Note that the files mentioned for PROGRAMS, LIBS and MODULES *must* be
without extensions. The build file templates will figure them out.
For each thing to be built, it is then possible to say what sources
static libraries on Windows can only be done when configured
'no-shared'.
-One some platforms, shared libraries come with a name that's different
-from their static counterpart. That's declared as follows:
-
- SHARED_NAME[libfoo]=cygfoo-{- $config{shlibver} -}
-
-The example is from Cygwin, which has a required naming convention.
-
-Sometimes, it makes sense to rename an output file, for example a
-library:
-
- RENAME[libfoo]=libbar
-
-That line has "libfoo" renamed to "libbar". While it makes no
-sense at all to just have a rename like that (why not just use
-"libbar" everywhere?), it does make sense when it can be used
-conditionally. See a little further below for an example.
-
In some cases, it's desirable to include some source files in the
shared form of a library only:
INCLUDE[foo]=include
+It's also possible to specify C macros that should be defined:
+
+ DEFINE[foo]=FOO BAR=1
+
In some cases, one might want to generate some source files from
others, that's done as follows:
NOTE: GENERATE lines are limited to one command only per GENERATE.
-As a last resort, it's possible to have raw build file lines, between
-BEGINRAW and ENDRAW lines as follows:
-
- BEGINRAW[Makefile(unix)]
- haha.h: {- $builddir -}/Makefile
- echo "/* haha */" > haha.h
- ENDRAW[Makefile(unix)]
-
-The word within square brackets is the build_file configuration item
-or the build_file configuration item followed by the second word in the
-build_scheme configuration item for the configured target within
-parenthesis as shown above. For example, with the following relevant
-configuration items:
-
- build_file => "build.ninja"
- build_scheme => [ "unified", "unix" ]
-
-... these lines will be considered:
-
- BEGINRAW[build.ninja]
- build haha.h: echo "/* haha */" > haha.h
- ENDRAW[build.ninja]
-
- BEGINRAW[build.ninja(unix)]
- build hoho.h: echo "/* hoho */" > hoho.h
- ENDRAW[build.ninja(unix)]
-
-Should it be needed because the recipes within a RAW section might
-clash with those generated by Configure, it's possible to tell it
-not to generate them with the use of OVERRIDES, for example:
-
- SOURCE[libfoo]=foo.c bar.c
-
- OVERRIDES=bar.o
- BEGINRAW[Makefile(unix)]
- bar.o: bar.c
- $(CC) $(CFLAGS) -DSPECIAL -c -o $@ $<
- ENDRAW[Makefile(unix)]
-
-See the documentation further up for more information on configuration
-items.
-
Finally, you can have some simple conditional use of the build.info
information, looking like this:
SOURCE[libfoo]=...
ENDIF
-or:
-
- # VMS has a cultural standard where all libraries are prefixed.
- # For OpenSSL, the choice is 'ossl_'
- IF[{- $config{target} =~ /^vms/ -}]
- RENAME[libcrypto]=ossl_libcrypto
- RENAME[libssl]=ossl_libssl
- ENDIF
-
Build-file programming with the "unified" build system
======================================================