mirror of
https://github.com/openssl/openssl.git
synced 2024-12-09 05:51:54 +08:00
3866752e7e
possible problems. - New file breakage.c handles (so far) missing functions. - Get rid of some signed/unsigned/const warnings thanks to solaris-cc - Add autoconf/automake input files, and helper scripts to populate missing (but auto-generated) files. This change adds a configure.in and Makefile.am to build everything using autoconf, automake, and libtool - and adds "gunk" scripts to generate the various files those things need (and clean then up again after). This means that "autogunk.sh" needs to be run first on a system with the autotools, but the resulting directory should be "configure"able and compilable on systems without those tools.
120 lines
5.4 KiB
Plaintext
120 lines
5.4 KiB
Plaintext
There are two ways to build this code;
|
|
|
|
(1) Manually
|
|
|
|
(2) Using all-singing all-dancing (all-confusing) autotools, ie. autoconf,
|
|
automake, libtool, and their little friends (autoheader, etc).
|
|
|
|
=================
|
|
Building Manually
|
|
=================
|
|
|
|
There is a basic "Makefile" in this directory that gets moved out of the way and
|
|
ignored when building with autoconf et al. This Makefile is suitable for
|
|
building tunala on Linux using gcc. Any other platform probably requires some
|
|
tweaking. Here are the various bits you might need to do if you want to build
|
|
this way and the default Makefile isn't sufficient;
|
|
|
|
* Compiler: Edit the "CC" definition in Makefile
|
|
|
|
* Headers, features: tunala.h controls what happens in the non-autoconf world.
|
|
It, by default, assumes the system has *everything* (except autoconf's
|
|
"config.h") so if a target system is missing something it must define the
|
|
appropriate "NO_***" symbols in CFLAGS. These include;
|
|
|
|
- NO_HAVE_UNISTD_H, NO_HAVE_FCNTL_H, NO_HAVE_LIMITS_H
|
|
Indicates the compiling system doesn't have (or need) these header files.
|
|
- NO_HAVE_STRSTR, NO_HAVE_STRTOUL
|
|
Indicates the compiling system doesn't have these functions. Replacements
|
|
are compiled and used in breakage.c
|
|
- NO_HAVE_SELECT, NO_HAVE_SOCKET
|
|
Pointless symbols - these indicate select() and/or socket() are missing in
|
|
which case the program won't compile anyway.
|
|
|
|
If you want to specify any of these, add them with "-D" prefixed to each in
|
|
the CFLAGS definition in Makefile.
|
|
|
|
* Compilation flags: edit DEBUG_FLAGS and/or CFLAGS directly to control the
|
|
flags passed to the compiler. This can also be used to change the degree of
|
|
optimisation.
|
|
|
|
* Linker flags: some systems (eg. Solaris) require extra linker flags such as;
|
|
-ldl, -lsocket, -lnsl, etc. If unsure, bring up the man page for whichever
|
|
function is "undefined" when the linker fails - that usually indicates what
|
|
you need to add. Make changes to the LINK_FLAGS symbol.
|
|
|
|
* Linker command: if a different linker syntax or even a different program is
|
|
required to link, edit the linker line directly in the "tunala:" target
|
|
definition - it currently assumes the "CC" (compiler) program is used to link.
|
|
|
|
======================
|
|
Building Automagically
|
|
======================
|
|
|
|
Automagic building is handled courtesy of autoconf, automake, and libtool. There
|
|
is in fact two steps required to build, and only the first has to be done on a
|
|
system with these tools installed (and if I was prepared to bloat out the CVS
|
|
repository, I could store these extra files, but I'm not).
|
|
|
|
First step: "autogunk.sh"
|
|
-------------------------
|
|
|
|
The "./autogunk.sh" script will call all the necessary autotool commands to
|
|
create missing files and run automake and autoconf. The result is that a
|
|
"./configure" script should be generated and a "Makefile.in" generated from the
|
|
supplied "Makefile.am". NB: This script also moves the "manual" Makefile (see
|
|
above) out of the way and calls it "Makefile.plain" - the "ungunk" script
|
|
reverses this to leave the directory it was previously.
|
|
|
|
Once "ungunk" has been run, the resulting directory should be able to build on
|
|
other systems without autoconf, automake, or libtool. Which is what the second
|
|
step describes;
|
|
|
|
Second step: "./configure"
|
|
--------------------------
|
|
|
|
The second step is to run the generated "./configure" script to create a
|
|
config.h header for your system and to generate a "Makefile" (generated from
|
|
"Makefile.in") tweaked to compile on your system. This is the standard sort of
|
|
thing you see in GNU packages, for example, and the standard tricks also work.
|
|
Eg. to override "configure"'s choice of compiler, set the CC environment
|
|
variable prior to running configure, eg.
|
|
|
|
CC=gcc ./configure
|
|
|
|
would cause "gcc" to be used even if there is an otherwise preferable (to
|
|
autoconf) native compiler on your system.
|
|
|
|
*IMPORTANT* It's highly recommended to pass "--disable-shared" to the configure
|
|
script. Otherwise, libtool may elect to build most of the code as a
|
|
shared-library, hide various bits of it in dotted directories and generating
|
|
wrapper scripts in place of the linked binary. The autotool stuff, when "make
|
|
install" is run (which you probably won't want to do for this dinky little
|
|
thing) will unravel all that mess and either install a small executable +
|
|
shared-lib or will install a linked executable. Passing the above flag ensures
|
|
this is all done statically even if the platform supports building and using
|
|
shared-libraries. Ie;
|
|
|
|
./configure --disable-shared
|
|
|
|
After this run "make" and it should build the "tunala" executable.
|
|
|
|
Notes
|
|
-----
|
|
|
|
- Some versions of autoconf (or automake?) generate a Makefile syntax that gives
|
|
trouble to some "make" programs on some systems (eg. OpenBSD). If this
|
|
happens, either build 'Manually' (see above) or use "gmake" instead of "make".
|
|
I don't like this either but like even less the idea of sifting into all the
|
|
script magic crud that's involved.
|
|
|
|
- On a solaris system I tried, the "configure" script specified some broken
|
|
compiler flags in the resulting Makefile that don't even get echoed to
|
|
stdout/err when the error happens (evil!). If this happens, go into the
|
|
generated Makefile, find the two affected targets ("%.o:" and "%.lo"), and
|
|
remove the offending hidden option in the $(COMPILE) line all the sludge after
|
|
the two first lines of script (ie. after the "echo" and the "COMPILE" lines).
|
|
NB: This will probably only function if "--disable-shared" was used, otherwise
|
|
who knows what would result ...
|
|
|