This file is more of a note for other people who wish to understand why the build environment is the way it is :-). The include files 'depend' as follows. Each of crypto/*/*.c includes crypto/cryptlib.h ssl/*.c include ssl/ssl_locl.h apps/*.c include apps/apps.h crypto/cryptlib.h, ssl/ssl_locl.h and apps/apps.h all include e_os.h which contains OS/environment specific information. If you need to add something todo with a particular environment, add it to this file. It is worth remembering that quite a few libraries, like lhash, des, md, sha etc etc do not include crypto/cryptlib.h. This is because these libraries should be 'independantly compilable' and so I try to keep them this way. e_os.h is not so much a part of SSLeay, as the placing in one spot all the evil OS dependant muck. I wanted to automate as many things as possible. This includes error number generation. A make errors will scan the source files for error codes, append them to the correct header files, and generate the functions to print the text version of the error numbers. So don't even think about adding error numbers by hand, put them in the form XXXerr(XXXX_F_XXXX,YYYY_R_YYYY); on line and it will be automatically picked up my a make errors. In a similar vein, programs to be added into ssleay in the apps directory just need to have an entry added to E_EXE in makefile.ssl and everthing will work as expected. Don't edit progs.h by hand. make links re-generates the symbolic links that are used. The reason why I keep everything in its own directory, and don't put all the test programs and header files in 'test' and 'include' is because I want to keep the 'sub-libraries' independant. I still 'pull' out indervidual libraries for use in specific projects where the code is required. I have used the 'lhash' library in just about every software project I have worked on :-). make depend generates dependancies and make dclean removes them. You will notice that I use perl quite a bit when I could be using 'sed'. The reason I decided to do this was to just stick to one 'extra' program. For Windows NT, I have perl and no sed. The util/mk1mf.pl program can be used to generate a single makefile. I use this because makefiles under Microsoft are horrific. Each C compiler seems to have different linker formats, which have to be used because the retarted C compilers explode when you do cl -o file *.o. Now some would argue that I should just use the single makefile. I don't like it during develoment for 2 reasons. First, the actuall make command takes a long time. For my current setup, if I'm in crypto/bn and I type make, only the crypto/bn directory gets rebuilt, which is nice when you are modifying prototypes in bn.h which half the SSLeay depends on. The second is that to add a new souce file I just plonk it in at the required spot in the local makefile. This then alows me to keep things local, I don't need to modify a 'global' tables (the make for unix, the make for NT, the make for w31...). When I am ripping apart a library structure, it is nice to only have to worry about one directory :-). Having said all this, for the hell of it I put together 2 files that #include all the souce code (generated by doing a ls */*.o after a build). crypto.c takes only 30 seconds to build under NT and 2 minutes under linux for my pentium100. Much faster that the normal build :-). Again, the problem is that when using libraries, every program linked to libcrypto.a would suddenly get 330k of library when it may only need 1k. This technique does look like a nice way to do shared libraries though. Oh yes, as a final note, to 'build' a distribution, I just type make dist. This cleans and packages everything. The directory needs to be called SSLeay since the make does a 'cd ..' and renames and tars things up.