Argh... That last patch wasn't quite right. This one works a bit better.
(Note that build-shared is serialized to allow parallel builds to work.)
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support
> Here's a small patch for the shared library build that allows
> you to re-run
> make in a directory without unnecessarily recreating the
> shared library
> files. It moves them into a .libs subdirectory so they'll be
> out of the way,
> instead of using clean-shared to get rid of them. We build
> OpenSSL inside a
> larger project and while fixing problems in other directories
> we do a lot of
> top-level make invocations and it's annoying to have this
> trigger a rebuild
> all the time. (Because we have dependencies on libcrypto/libssl etc.)
Index: Makefile.org
===================================================================
RCS file: /var/CVSROOT/ssl/Makefile.org,v
retrieving revision 1.1.1.2
retrieving revision 1.7
diff -w -u -r1.1.1.2 -r1.7
--- Makefile.org 20 Sep 2002 21:50:37 -0000 1.1.1.2
+++ Makefile.org 23 Sep 2002 02:27:12 -0000 1.7
@@ -179,8 +179,8 @@
EDIRS= times doc bugs util include certs ms shlib mt demos perl sf dep VMS
WDIRS= windows
LIBS= libcrypto.a libssl.a
-SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
-SHARED_SSL=libssl$(SHLIB_EXT)
+SHARED_CRYPTO=.libs/libcrypto$(SHLIB_EXT)
+SHARED_SSL=.libs/libssl$(SHLIB_EXT)
SHARED_LIBS=
SHARED_LIBS_LINK_EXTS=
SHARED_LDFLAGS=
@@ -194,9 +194,9 @@
HEADER= e_os.h
# When we're prepared to use shared libraries in the programs we link here
-# we might remove 'clean-shared' from the targets to perform at this stage
+# we might remove 'move-shared' from the targets to perform at this stage
-all: clean-shared Makefile.ssl sub_all
+all: Makefile.ssl sub_all
sub_all:
@for i in $(DIRS); \
@@ -211,16 +211,16 @@
if echo "$(DIRS)" | \
egrep '(^| )(crypto|ssl)( |$$)' > /dev/null 2>&1 && \
[ -n "$(SHARED_LIBS)" ]; then \
- $(MAKE) $(SHARED_LIBS); \
+ $(MAKE) .libs; \
fi
-libcrypto$(SHLIB_EXT): libcrypto.a
+$(SHARED_CRYPTO): libcrypto.a
@if [ "$(SHLIB_TARGET)" != "" ]; then \
$(MAKE) SHLIBDIRS=crypto build-shared; \
else \
echo "There's no support for shared libraries on this platform" >&2; \
fi
-libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
+$(SHARED_SSL): $(SHARED_CRYPTO) libssl.a
@if [ "$(SHLIB_TARGET)" != "" ]; then \
$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
else \
@@ -232,15 +232,29 @@
if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
tmp="$(SHARED_LIBS_LINK_EXTS)"; \
for j in $${tmp:-x}; do \
- ( set -x; rm -f lib$$i$$j ); \
+ ( set -x; rm -f lib$$i$$j .libs/lib$$i$$j ); \
done; \
fi; \
- ( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
+ ( set -x; rm -f lib $$i$(SHLIB_EXT) .libs/lib$$i$(SHLIB_EXT) ); \
if [ "$(PLATFORM)" = "Cygwin" ]; then \
- ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
+ ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a \
+ .libs/cyg$$i$(SHLIB_EXT) .libs/lib$$i$(SHLIB_EXT).a ); \
fi; \
done
+.libs: $(SHARED_LIBS)
+ @-mkdir .libs
+ @$(MAKE) move-shared
+
+move-shared:
+ @-for i in $(SHLIBDIRS); do \
+ ( set -x; mv lib$$i$(SHLIB_EXT) .libs ); \
+ tmp="$(SHARED_LIBS_LINK_EXTS)"; \
+ for j in $${tmp:-x}; do \
+ ( set -x; mv lib$$i$$j .libs ); \
+ done; \
+ done
+
link-shared:
@if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
tmp="$(SHARED_LIBS_LINK_EXTS)"; \
@@ -254,7 +268,10 @@
done; \
fi
-build-shared: clean-shared do_$(SHLIB_TARGET) link-shared
+build-shared:
+ @$(MAKE) clean-shared
+ @$(MAKE) do_$(SHLIB_TARGET)
+ @$(MAKE) link-shared
do_bsd-gcc-shared: do_gnu-shared
do_linux-shared: do_gnu-shared