Author: Laszlo Kajan <lkajan@rostlab.org>
Description: use libtool for object files and shared library
Forwarded: http://lists.alioth.debian.org/pipermail/debian-med-packaging/2012-August/016975.html
--- a/cif-file/Makefile
+++ b/cif-file/Makefile
@@ -133,11 +133,13 @@ clean_build:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
 
 # Rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/cif-file-util/Makefile
+++ b/cif-file-util/Makefile
@@ -133,11 +133,13 @@ clean_build:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
 
 # Rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/cif-parser/Makefile
+++ b/cif-parser/Makefile
@@ -170,6 +170,8 @@ clean_build:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
@@ -179,14 +181,14 @@ $(OBJ_DIR)/%Parser.o: $(SRC_DIR)/%Parser
 	@sh -c 'cd $(SRC_DIR); $(YACC) $(${^F:.y=_YACC_FLAGS}) ../$<'
 	mv $(^:.y=.tab.c) $(^:.y=.c)
 	mv $(^:.y=.tab.h) $(^:.y=.h)
-	$(CC) $(CFLAGS_NONANSI) -c $(^:.y=.c) -o $@ 
+	libtool --mode=compile $(CC) $(CFLAGS_NONANSI) -c $(^:.y=.c) -o $@
 
 %Scanner.o: $(SRC_DIR)/%Scanner.l $(OBJ_DIR)/%Parser.o
 	$(LEX) $($(@F:.o=_LEX_FLAGS)) -t $(SRC_DIR)/$(@:.o=.l) > $(SRC_DIR)/$(@F:.o=.c)
-	$(CC) $(CFLAGS_NONANSI) -c $(SRC_DIR)/$(@F:.o=.c) -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CC) $(CFLAGS_NONANSI) -c $(SRC_DIR)/$(@F:.o=.c) -o $(OBJ_DIR)/$@
 
 
 # Rule for making other object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/common/Makefile
+++ b/common/Makefile
@@ -145,11 +145,13 @@ clean_build:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
 
 # Rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/dict-obj-file/Makefile
+++ b/dict-obj-file/Makefile
@@ -193,6 +193,8 @@ $(M_MOD_LIB): $(L_MOD_LIB)
 $(L_MOD_LIB): $(OBJ_OTHER_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_OTHER_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_OTHER_FILES) $(OBJ_OTHER_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_OTHER_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
@@ -204,5 +206,5 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.C
 
 # Phony rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/pdbml-parser/Makefile
+++ b/pdbml-parser/Makefile
@@ -211,6 +211,8 @@ $(M_MOD_LIB): $(L_MOD_LIB)
 $(L_MOD_LIB): $(OBJ_OTHER_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_OTHER_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_OTHER_FILES) $(OBJ_OTHER_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_OTHER_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
@@ -225,5 +227,5 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.C
 
 # Phony rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/regex/Makefile
+++ b/regex/Makefile
@@ -144,13 +144,15 @@ clean_test:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
 
 # Rule for making object files
 %.o: $(SRC_DIR)/%.c
-	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $< -o $(OBJ_DIR)/$@
 
 
 # Extra, non-used in PDB build
@@ -181,7 +183,7 @@ $(OBJ_DIR)/main.o: $(H) $(HEADER_FILES)
 	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC_DIR)/main.c -o $@
 
 $(OBJ_DIR)/split.o: $(H) $(HEADER_FILES) $(SRC_DIR)/split.c 
-	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC_DIR)/split.c -o $@
+	libtool --mode=compile $(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC_DIR)/split.c -o $@
 
 debug.o: $(H) $(HEADER_FILES) $(SRC_DIR)/debug.c $(L_INCL_DIR)/debug.ih
 	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC_DIR)/debug.c -o $(OBJ_DIR)/$@
--- a/tables/Makefile
+++ b/tables/Makefile
@@ -130,11 +130,13 @@ clean_build:
 $(L_MOD_LIB): $(OBJ_FILES)
 #       Create module library
 	@cd $(OBJ_DIR); $(AR) $(AR_PUTFLAGS) ../$@ $(OBJ_FILES)
+	cp -f -t $(M_LIB_DIR) $(addprefix $(OBJ_DIR)/,$(OBJ_FILES) $(OBJ_FILES:.o=.lo))
+	mkdir -p $(M_LIB_DIR)/.libs && cp -f -t $(M_LIB_DIR)/.libs $(addprefix $(OBJ_DIR)/.libs/,$(OBJ_FILES))
 	$(RANLIB) $@
 	@echo $@ " is up to date."
 
 
 # Rule for making object files
 %.o: $(SRC_DIR)/%.C
-	$(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
+	libtool --mode=compile $(CCC) $(C++FLAGS) -c $< -o $(OBJ_DIR)/$@
 
--- a/Makefile
+++ b/Makefile
@@ -12,9 +12,7 @@ DOC_SCRIPT = doc.sh
 CLEAN_DOC_SCRIPT = clean_doc.sh
 EXPORT_SCRIPT = export.sh
 
-all: 
-	@echo
-	@echo ------- compile targets are compile_lnx_38, compile_lnx_41, compile_wwpdb_py27 and compile_osx -------
+all: lib/librcsb-core-wrapper.la
 
 compile:  
 	@echo
@@ -99,11 +97,23 @@ compile_wwpdb_py27:
 
 
 
+# lkajan: the reason for this is that I do not want to set prerequisites here just now, so I make it made always
+.PHONY: lib/librcsb-core-wrapper.la
+lib/librcsb-core-wrapper.la:
+	+sh -c '\
+	 export PIC=-fPIC; \
+	 export WWPDB_XERCESC_INC=/usr/include; \
+	 export WWPDB_XERCESC_LIB_DIR=/usr/lib; \
+	 export WWPDB_XERCESC_LIB=xerces-c; \
+	( cd ./$(UTIL_MODULE); ./$(COMPILE_SCRIPT) ); \
+	libtool --mode=link $(CXX) -version-info 0:1:0 -rpath /usr/lib $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -l$${WWPDB_XERCESC_LIB} -o lib/librcsb-core-wrapper.la lib/*.lo'
+
 debug:
 	@sh -c 'cd ./$(UTIL_MODULE); ./$(COMPILE_SCRIPT) debug'
 
 clean_build: 
 	@sh -c 'cd ./$(UTIL_MODULE); ./$(CLEAN_SCRIPT)'
+	@rm -rf lib/* lib/.??*
 
 test: test-all
 
