Win32 fixes. Add GOST algorithm to mkdef, update ordinals. Signed/unsigned fixes.
[openssl.git] / Makefile.org
index a67c3c1..fa4c83b 100644 (file)
@@ -66,6 +66,7 @@ EXE_EXT=
 ARFLAGS=
 AR=ar $(ARFLAGS) r
 RANLIB= ranlib
+NM= nm
 PERL= perl
 TAR= tar
 TARFLAGS= --no-recursion
@@ -95,23 +96,30 @@ RC5_ENC= rc5_enc.o
 MD5_ASM_OBJ= 
 SHA1_ASM_OBJ= 
 RMD160_ASM_OBJ= 
+WP_ASM_OBJ=
 
 # KRB5 stuff
 KRB5_INCLUDES=
 LIBKRB5=
 
+# Zlib stuff
+ZLIB_INCLUDE=
+LIBZLIB=
+
 DIRS=   crypto ssl engines apps test tools
 SHLIBDIRS= crypto ssl
 
 # dirs in crypto to build
 SDIRS=  \
        objects \
-       md2 md4 md5 sha mdc2 hmac ripemd \
-       des aes rc2 rc4 rc5 idea bf cast \
+       md2 md4 md5 sha mdc2 hmac ripemd whrlpool \
+       des aes rc2 rc4 rc5 idea bf cast camellia \
        bn ec rsa dsa ecdsa dh ecdh dso engine \
        buffer bio stack lhash rand err \
        evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
-       store pqueue
+       store pqueue ts
+# keep in mind that the above list is adjusted by ./Configure
+# according to no-xxx arguments...
 
 # tests to perform.  "alltests" is a special word indicating that all tests
 # should be performed.
@@ -123,6 +131,8 @@ MANDIR=$(OPENSSLDIR)/man
 MAN1=1
 MAN3=3
 MANSUFFIX=
+HTMLSUFFIX=html
+HTMLDIR=$(OPENSSLDIR)/html
 SHELL=/bin/sh
 
 TOP=    .
@@ -144,18 +154,37 @@ WTARFILE=       $(NAME)-win.tar
 EXHEADER=       e_os2.h
 HEADER=         e_os.h
 
-all: Makefile build_all openssl.pc
+all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
+
+# as we stick to -e, CLEARENV ensures that local variables in lower
+# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
+# shell, which [annoyingly enough] terminates unset with error if VAR
+# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
+# which terminates unset with error if no variable was present:-(
+CLEARENV=      TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}     \
+               $${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES}       \
+               $${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC}           \
+               $${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL} \
+               $${EXHEADER+EXHEADER} $${HEADER+HEADER}         \
+               $${GENERAL+GENERAL} $${CFLAGS+CFLAGS}           \
+               $${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}           \
+               $${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}             \
+               $${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}     \
+               $${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 
 BUILDENV=      PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
                CC='${CC}' CFLAG='${CFLAG}'                     \
                AS='${CC}' ASFLAG='${CFLAG} -c'                 \
-               AR='${AR}' PERL='${PERL}' RANLIB='${RANLIB}'    \
-               SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/lib'           \
+               AR='${AR}' NM='${NM}' RANLIB='${RANLIB}'        \
+               CROSS_COMPILE_PREFIX='${CROSS_COMPILE_PREFIX}'  \
+               PERL='${PERL}'                                  \
+               SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/lib'   \
+               INSTALL_PREFIX='${INSTALL_PREFIX}'              \
                INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}'   \
-               MAKEDEPEND='$$(TOP)/util/domd $$(TOP) -MD $(MAKEDEPPROG)'\
+               MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD ${MAKEDEPPROG}' \
                DEPFLAG='-DOPENSSL_NO_DEPRECATED ${DEPFLAG}'    \
                MAKEDEPPROG='${MAKEDEPPROG}'                    \
-               LDFLAGS="$(LDFLAGS)" SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \
+               SHARED_LDFLAGS='${SHARED_LDFLAGS}'              \
                KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}'   \
                EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}'       \
                SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' \
@@ -168,18 +197,37 @@ BUILDENV= PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
                SHA1_ASM_OBJ='${SHA1_ASM_OBJ}'                  \
                MD5_ASM_OBJ='${MD5_ASM_OBJ}'                    \
                RMD160_ASM_OBJ='${RMD160_ASM_OBJ}'              \
-               THIS=$${THIS:-$@}
-
-BUILD_CMD=if echo " $(DIRS) " | grep " $$dir " >/dev/null 2>/dev/null; then \
-       if [ -d "$$dir" ]; then \
-               (cd $$dir && echo "making $$target in $$dir..." && \
-               $(MAKE) $(BUILDENV) $$target ) || exit 1; \
-       else \
-               $(MAKE) $$dir; \
-       fi; fi
+               WP_ASM_OBJ='${WP_ASM_OBJ}'                      \
+               THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
+# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
+# which in turn eliminates ambiguities in variable treatment with -e.
+
+# BUILD_CMD is a generic macro to build a given target in a given
+# subdirectory.  The target must be given through the shell variable
+# `target' and the subdirectory to build in must be given through `dir'.
+# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
+# BUILD_ONE_CMD instead.
+#
+# BUILD_ONE_CMD is a macro to build a given target in a given
+# subdirectory if that subdirectory is part of $(DIRS).  It requires
+# exactly the same shell variables as BUILD_CMD.
+#
+# RECURSIVE_BUILD_CMD is a macro to build a given target in all
+# subdirectories defined in $(DIRS).  It requires that the target
+# is given through the shell variable `target'.
+BUILD_CMD=  if [ -d "$$dir" ]; then \
+           (   cd $$dir && echo "making $$target in $$dir..." && \
+               $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
+           ) || exit 1; \
+           fi
+RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
+BUILD_ONE_CMD=\
+       if echo " $(DIRS) " | grep " $$dir " >/dev/null 2>/dev/null; then \
+               $(BUILD_CMD); \
+       fi
 
 reflect:
-       @[ -n "$(THIS)" ] && $(MAKE) $(THIS) $(BUILDENV)
+       @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 
 sub_all: build_all
 build_all: build_libs build_apps build_tests build_tools
@@ -187,21 +235,21 @@ build_all: build_libs build_apps build_tests build_tools
 build_libs: build_crypto build_ssl build_engines
 
 build_crypto:
-       @dir=crypto; target=all; $(BUILD_CMD)
+       @dir=crypto; target=all; $(BUILD_ONE_CMD)
 build_ssl:
-       @dir=ssl; target=all; $(BUILD_CMD)
+       @dir=ssl; target=all; $(BUILD_ONE_CMD)
 build_engines:
-       @dir=engines; target=all; $(BUILD_CMD)
+       @dir=engines; target=all; $(BUILD_ONE_CMD)
 build_apps:
-       @dir=apps; target=all; $(BUILD_CMD)
+       @dir=apps; target=all; $(BUILD_ONE_CMD)
 build_tests:
-       @dir=test; target=all; $(BUILD_CMD)
+       @dir=test; target=all; $(BUILD_ONE_CMD)
 build_tools:
-       @dir=tools; target=all; $(BUILD_CMD)
+       @dir=tools; target=all; $(BUILD_ONE_CMD)
 
 all_testapps: build_libs build_testapps
 build_testapps:
-       @dir=crypto; target=testapps; $(BUILD_CMD)
+       @dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 
 libcrypto$(SHLIB_EXT): libcrypto.a
        @if [ "$(SHLIB_TARGET)" != "" ]; then \
@@ -235,7 +283,7 @@ clean-shared:
 
 link-shared:
        @ set -e; for i in ${SHLIBDIRS}; do \
-               $(MAKE) -f $(HERE)/Makefile.shared \
+               $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
                        LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
                        LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
                        symlink.$(SHLIB_TARGET); \
@@ -249,7 +297,7 @@ do_$(SHLIB_TARGET):
                if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
                        libs="$(LIBKRB5) $$libs"; \
                fi; \
-               $(MAKE) -f Makefile.shared $(BUILDENV) \
+               $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
                        LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
                        LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
                        LIBDEPS="$$libs $(EX_LIBS)" \
@@ -257,6 +305,32 @@ do_$(SHLIB_TARGET):
                libs="-l$$i $$libs"; \
        done
 
+libcrypto.pc: Makefile
+       @ ( echo 'prefix=$(INSTALLTOP)'; \
+           echo 'exec_prefix=$${prefix}'; \
+           echo 'libdir=$${exec_prefix}/lib'; \
+           echo 'includedir=$${prefix}/include'; \
+           echo ''; \
+           echo 'Name: OpenSSL-libcrypto'; \
+           echo 'Description: OpenSSL cryptography library'; \
+           echo 'Version: '$(VERSION); \
+           echo 'Requires: '; \
+           echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
+           echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
+
+libssl.pc: Makefile
+       @ ( echo 'prefix=$(INSTALLTOP)'; \
+           echo 'exec_prefix=$${prefix}'; \
+           echo 'libdir=$${exec_prefix}/lib'; \
+           echo 'includedir=$${prefix}/include'; \
+           echo ''; \
+           echo 'Name: OpenSSL'; \
+           echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+           echo 'Version: '$(VERSION); \
+           echo 'Requires: '; \
+           echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
+           echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
+
 openssl.pc: Makefile
        @ ( echo 'prefix=$(INSTALLTOP)'; \
            echo 'exec_prefix=$${prefix}'; \
@@ -280,15 +354,9 @@ libclean:
 
 clean: libclean
        rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i && echo "making clean in $$i..." && \
-               $(MAKE) SDIRS='${SDIRS}' clean ) || exit 1; \
-               rm -f $(LIBS); \
-       fi; \
-       done;
-       rm -f openssl.pc
+       @set -e; target=clean; $(RECURSIVE_BUILD_CMD)
+       rm -f $(LIBS)
+       rm -f openssl.pc libssl.pc libcrypto.pc
        rm -f speed.* .pure
        rm -f $(TARFILE)
        @set -e; for i in $(ONEDIRS) ;\
@@ -302,68 +370,47 @@ makefile.one: files
 
 files:
        $(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i && echo "making 'files' in $$i..." && \
-               $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' files ) || exit 1; \
-       fi; \
-       done;
+       @set -e; target=files; $(RECURSIVE_BUILD_CMD)
 
 links:
        @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
        @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
-       @set -e; target=links; for dir in $(DIRS); do $(BUILD_CMD); done
+       @set -e; target=links; $(RECURSIVE_BUILD_CMD)
 
 gentests:
        @(cd test && echo "generating dummy tests (if needed)..." && \
-       $(MAKE) $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
+       $(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
 
 dclean:
-       rm -f *.bak
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i && echo "making dclean in $$i..." && \
-               $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
-       fi; \
-       done;
+       rm -rf *.bak include/openssl certs/.0
+       @set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 
 rehash: rehash.time
-rehash.time: certs
-       @(OPENSSL="`pwd`/util/opensslwrap.sh"; \
-         OPENSSL_DEBUG_MEMORY=on; \
-         export OPENSSL OPENSSL_DEBUG_MEMORY; \
-         $(PERL) tools/c_rehash certs)
-       touch rehash.time
+rehash.time: certs apps
+       @if [ -z "$(CROSS_COMPILE_PREFIX)" ]; then \
+               (OPENSSL="`pwd`/util/opensslwrap.sh"; \
+               [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe"; \
+               OPENSSL_DEBUG_MEMORY=on; \
+               export OPENSSL OPENSSL_DEBUG_MEMORY; \
+               $(PERL) tools/c_rehash certs) && \
+               touch rehash.time; \
+       else :; fi
 
 test:   tests
 
 tests: rehash
        @(cd test && echo "testing..." && \
-       $(MAKE) $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
+       $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
        util/opensslwrap.sh version -a
 
 report:
        @$(PERL) util/selftest.pl
 
 depend:
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i && echo "making dependencies $$i..." && \
-               $(MAKE) $(BUILDENV) depend ) || exit 1; \
-       fi; \
-       done;
+       @set -e; target=depend; $(RECURSIVE_BUILD_CMD)
 
 lint:
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i && echo "making lint $$i..." && \
-               $(MAKE) SDIRS='${SDIRS}' lint ) || exit 1; \
-       fi; \
-       done;
+       @set -e; target=lint; $(RECURSIVE_BUILD_CMD)
 
 tags:
        rm -f TAGS
@@ -387,15 +434,21 @@ crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
        $(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
        $(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
+crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
+       $(PERL) crypto/objects/objxref.pl > crypto/objects/obj_xref.h
 
 apps/openssl-vms.cnf: apps/openssl.cnf
        $(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 
+crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
+       $(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
+
+
 TABLE: Configure
        (echo 'Output of `Configure TABLE'"':"; \
        $(PERL) Configure TABLE) > TABLE
 
-update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h apps/openssl-vms.cnf TABLE
+update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 
 # Build distribution tar-file. As the list of files returned by "find" is
 # pretty long, on several platforms a "too many arguments" error or similar
@@ -430,7 +483,7 @@ dist:
        @$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
 
 dist_pem_h:
-       (cd crypto/pem; $(MAKE) $(BUILDENV) pem.h; $(MAKE) clean)
+       (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
 
 install: all install_docs install_sw
 
@@ -448,13 +501,7 @@ install_sw:
        (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
        chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
        done;
-       @set -e; for i in $(DIRS) ;\
-       do \
-       if [ -d "$$i" ]; then \
-               (cd $$i; echo "installing $$i..."; \
-               $(MAKE) $(BUILDENV) install ); \
-       fi; \
-       done
+       @set -e; target=install; $(RECURSIVE_BUILD_CMD)
        @set -e; for i in $(LIBS) ;\
        do \
                if [ -f "$$i" ]; then \
@@ -496,9 +543,34 @@ install_sw:
                        sed -e '1,/^$$/d' doc/openssl-shared.txt; \
                fi; \
        fi
+       cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
+       chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libcrypto.pc
+       cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
+       chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libssl.pc
        cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
        chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc
 
+install_html_docs:
+       here="`pwd`"; \
+       for subdir in apps crypto ssl; do \
+               mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
+               for i in doc/$$subdir/*.pod; do \
+                       fn=`basename $$i .pod`; \
+                       echo "installing html/$$fn.$(HTMLSUFFIX)"; \
+                       cat $$i \
+                       | sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \
+                       | pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \
+                       | sed -r 's/<!DOCTYPE.*//g' \
+                       > $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
+                       $(PERL) util/extract-names.pl < $$i | \
+                               grep -v $$filecase "^$$fn\$$" | \
+                               (cd $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
+                                while read n; do \
+                                       $$here/util/point.sh $$fn.$(HTMLSUFFIX) "$$n".$(HTMLSUFFIX); \
+                                done); \
+               done; \
+       done
+
 install_docs:
        @$(PERL) $(TOP)/util/mkdir-p.pl \
                $(INSTALL_PREFIX)$(MANDIR)/man1 \
@@ -521,8 +593,8 @@ install_docs:
                        --release=$(VERSION) `basename $$i`") \
                        >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
                $(PERL) util/extract-names.pl < $$i | \
-                       grep -v $$filecase "^$$fn\$$" | \
-                       grep -v "[      ]" | \
+                       (grep -v $$filecase "^$$fn\$$"; true) | \
+                       (grep -v "[     ]"; true) | \
                        (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
                         while read n; do \
                                $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
@@ -538,8 +610,8 @@ install_docs:
                        --release=$(VERSION) `basename $$i`") \
                        >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
                $(PERL) util/extract-names.pl < $$i | \
-                       grep -v $$filecase "^$$fn\$$" | \
-                       grep -v "[      ]" | \
+                       (grep -v $$filecase "^$$fn\$$"; true) | \
+                       (grep -v "[     ]"; true) | \
                        (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
                         while read n; do \
                                $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \