Proper support for OpenBSD-i386 shared build, including assember modules!
[openssl.git] / Makefile.shared
index d0ff69c83c8fc4ba1ba61ca69475208e448983fc..2f7d7ead5a25040199516c6147e3255ee16bf79a 100644 (file)
@@ -167,6 +167,36 @@ link_a.gnu:
 link_app.gnu:
        @ $(DO_GNU_APP); $(LINK_APP)
 
+link_o.bsd:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
+       $(CALC_VERSIONS); \
+       SHLIB=lib$(LIBNAME).so; \
+       SHLIB_SUFFIX=; \
+       LIBDEPS=; \
+       ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
+       NOALLSYMSFLAGS=; \
+       SHAREDFLAGS="-shared -nostdlib"; \
+       SHAREDCMD=$(CC); \
+       fi; $(LINK_SO_O)
+link_a.bsd:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
+       $(CALC_VERSIONS); \
+       SHLIB=lib$(LIBNAME).so; \
+       SHLIB_SUFFIX=; \
+       LIBDEPS=; \
+       ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
+       NOALLSYMSFLAGS=; \
+       SHAREDFLAGS="-shared -nostdlib"; \
+       SHAREDCMD=$(CC); \
+       fi; $(LINK_SO_A)
+link_app.bsd:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
+       LDCMD=$(CC); \
+       LDFLAGS="-Wl,-rpath,$(LIBPATH)"; \
+       LIBDEPS="$(LIBDEPS)"; \
+       APPNAME="$(APPNAME)"; \
+       fi; $(LINK_APP)
+
 # For Darwin AKA Mac OS/X (dyld)
 link_o.darwin:
        @ $(CALC_VERSIONS); \
@@ -211,31 +241,33 @@ link_o.cygwin:
        @ $(CALC_VERSIONS); \
        INHIBIT_SYMLINKS=yes; \
        SHLIB=cyg$(LIBNAME); \
+       expr $(PLATFORM) : 'mingw' > /dev/null && SHLIB=$(LIBNAME)eay32; \
        SHLIB_SUFFIX=.dll; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
+       LIBDEPS="$(LIBDEPS)"; \
        SHLIB_SOVER=-$(LIBVERSION); \
        ALLSYMSFLAGS='-Wl,--whole-archive'; \
        NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
-       SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
+       SHAREDFLAGS="-Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
        SHAREDCMD='${CC}'; \
        $(LINK_SO_O)
 link_a.cygwin:
        @ $(CALC_VERSIONS); \
        INHIBIT_SYMLINKS=yes; \
        SHLIB=cyg$(LIBNAME); \
+       expr $(PLATFORM) : 'mingw' > /dev/null && SHLIB=$(LIBNAME)eay32; \
        SHLIB_SUFFIX=.dll; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
+       LIBDEPS="$(LIBDEPS)"; \
        SHLIB_SOVER=; \
        ALLSYMSFLAGS='-Wl,--whole-archive'; \
        NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
-       SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
+       SHAREDFLAGS="-Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
        SHAREDCMD='${CC}'; \
        $(LINK_SO_A)
 link_app.cygwin:
        LDCMD=$(CC);\
        LDFLAGS=""; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       APPNAME="$(APPNAME).exe"
+       LIBDEPS="$(LIBDEPS)"; \
+       APPNAME="$(APPNAME)"; \
        $(LINK_APP)
 
 link_o.alpha-osf1:
@@ -583,76 +615,49 @@ link_app.irix:
        fi; \
        $(LINK_APP)
 
-# HP-UX includes the full pathname of libs we depend on, so we would get
-# ./libcrypto (with ./ as path information) compiled into libssl, hence
-# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
-# anyway.
-# The object modules are loaded from lib$i.a using the undocumented -Fl
-# option.
-#
-# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
-#          by temporarily specifying "+s"!
+# 32-bit PA-RISC HP-UX embeds the -L pathname of libs we link with, so
+# we compensate for it with +cdp ../: and +cdp ./:. Yes, these rewrite
+# rules imply that we can only link one level down in catalog structure,
+# but that's what takes place for the moment of this writing. +cdp option
+# was introduced in HP-UX 11.x and applies in 32-bit PA-RISC link
+# editor context only [it's simply ignored in other cases, which are all
+# ELFs by the way].
 #
-link_o.hpux32:
-       @ $(CALC_VERSIONS); \
-       SHLIB=lib$(LIBNAME).sl; \
-       SHLIB_SUFFIX=; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       ALLSYMSFLAGS='-Fl'; \
-       NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
-       SHAREDCMD='/usr/ccs/bin/ld'; \
-       $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
-link_a.hpux32:
-       @ $(CALC_VERSIONS); \
+link_o.hpux:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
+       $(CALC_VERSIONS); \
        SHLIB=lib$(LIBNAME).sl; \
+       expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
        SHLIB_SUFFIX=; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       ALLSYMSFLAGS='-Fl'; \
-       NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
-       SHAREDCMD='/usr/ccs/bin/ld'; \
-       $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
-link_app.hpux32:
-       LDCMD=$(CC);\
-       LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       APPNAME="$(APPNAME)"
-       $(LINK_APP)
-
-# HP-UX includes the full pathname of libs we depend on, so we would get
-# ./libcrypto (with ./ as path information) compiled into libssl, hence
-# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
-# anyway.
-#
-# HP-UX in 64bit mode has "+s" enabled by default; it will search for
-# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
-#
-link_o.hpux64:
-       @ $(CALC_VERSIONS); \
-       SHLIB=lib$(LIBNAME).sl; \
-       SHLIB_SUFFIX=; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       ALLSYMSFLAGS='+forceload'; \
+       LIBDEPS="$(LIBDEPS)"; \
+       ALLSYMSFLAGS='-Wl,-Fl'; \
        NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
-       SHAREDCMD='/usr/ccs/bin/ld'; \
+       expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
+       SHAREDFLAGS="-Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+cdp,../:,+cdp,./:,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+b,$(LIBRPATH)"; \
+       SHAREDCMD=$(CC); \
+       fi; \
        $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
-link_a.hpux64:
-       @ $(CALC_VERSIONS); \
+link_a.hpux:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
+       $(CALC_VERSIONS); \
        SHLIB=lib$(LIBNAME).sl; \
+       expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
        SHLIB_SUFFIX=; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       ALLSYMSFLAGS='+forceload'; \
+       LIBDEPS="$(LIBDEPS)"; \
+       ALLSYMSFLAGS='-Wl,-Fl'; \
        NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
-       SHAREDCMD='/usr/ccs/bin/ld'; \
+       expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
+       SHAREDFLAGS="-Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+cdp,../:,+cdp,./:,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+b,$(LIBRPATH)"; \
+       SHAREDCMD='$(CC)'; \
+       fi; \
        $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
-link_app.hpux64:
+link_app.hpux:
+       @if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
        LDCMD=$(CC);\
-       LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
-       LIBDEPS="$(LIBDEPS) -lc"; \
-       APPNAME="$(APPNAME)"
+       LDFLAGS="-Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \
+       LIBDEPS="$(LIBDEPS)"; \
+       APPNAME="$(APPNAME)"; \
+       fi; \
        $(LINK_APP)
 
 link_o.aix:
@@ -720,9 +725,10 @@ symlink.darwin:
        SHLIB=lib$(LIBNAME); \
        SHLIB_SUFFIX=.dylib; \
        $(SYMLINK_SO)
-symlink.hpux32 symlink.hpux64:
+symlink.hpux:
        @ $(CALC_VERSIONS); \
        SHLIB=lib$(LIBNAME).sl; \
+       expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
        $(SYMLINK_SO)
 # The following lines means those specific architectures do no symlinks
 symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
@@ -731,7 +737,10 @@ symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
 link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
 link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
 link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu
-symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
+symlink.bsd-gcc-shared symlink.bsd-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
+link_o.bsd-shared: link_o.bsd
+link_a.bsd-shared: link_a.bsd
+link_app.bsd-shared: link_app.bsd
 link_o.darwin-shared: link_o.darwin
 link_a.darwin-shared: link_a.darwin
 link_app.darwin-shared: link_app.darwin
@@ -768,14 +777,10 @@ link_o.irix-shared: link_o.irix
 link_a.irix-shared: link_a.irix
 link_app.irix-shared: link_app.irix
 symlink.irix-shared: symlink.irix
-link_o.hpux-shared: link_o.hpux32
-link_a.hpux-shared: link_a.hpux32
-link_app.hpux-shared: link_app.hpux32
-symlink.hpux-shared: symlink.hpux32
-link_o.hpux64-shared: link_o.hpux64
-link_a.hpux64-shared: link_a.hpux64
-link_app.hpux64-shared: link_app.hpux64
-symlink.hpux64-shared: symlink.hpux64
+link_o.hpux-shared: link_o.hpux
+link_a.hpux-shared: link_a.hpux
+link_app.hpux-shared: link_app.hpux
+symlink.hpux-shared: symlink.hpux
 link_o.aix-shared: link_o.aix
 link_a.aix-shared: link_a.aix
 link_app.aix-shared: link_app.aix