aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--examples/build.mk8
-rw-r--r--libqpdf/build.mk7
-rw-r--r--libtests/build.mk6
-rw-r--r--make/gcc-linux.mk67
-rw-r--r--make/libtool.mk74
-rw-r--r--make/rules.mk68
-rw-r--r--qpdf/build.mk8
-rw-r--r--zlib-flate/build.mk4
9 files changed, 166 insertions, 79 deletions
diff --git a/Makefile b/Makefile
index 5db406f0..344daaf0 100644
--- a/Makefile
+++ b/Makefile
@@ -63,6 +63,9 @@ $(foreach B,$(BUILD_ITEMS),$(eval \
%.mk: ;
make/%.mk: ;
+#XXX
+##BUILDRULES := libtool
+BUILDRULES := gcc
include make/rules.mk
DUMMY := $(shell mkdir $(foreach B,$(BUILD_ITEMS),$(B)/$(OUTPUT_DIR)) 2>/dev/null)
diff --git a/examples/build.mk b/examples/build.mk
index 66c498e1..41053798 100644
--- a/examples/build.mk
+++ b/examples/build.mk
@@ -1,7 +1,7 @@
BINS_examples = pdf-bookmarks pdf-mod-info pdf-npages
CBINS_examples = pdf-linearize
-TARGETS_examples = $(foreach B,$(BINS_examples) $(CBINS_examples),examples/$(OUTPUT_DIR)/$(B))
+TARGETS_examples = $(foreach B,$(BINS_examples) $(CBINS_examples),examples/$(OUTPUT_DIR)/$(call binname,$(B)))
$(TARGETS_examples): $(TARGETS_qpdf)
@@ -22,13 +22,13 @@ ifeq ($(GENDEPS),1)
endif
$(foreach B,$(BINS_examples),$(eval \
- $(OBJS_$(B)): examples/$(OUTPUT_DIR)/%.o: examples/$(B).cc ; \
+ $(OBJS_$(B)): examples/$(OUTPUT_DIR)/%.$(OBJ): examples/$(B).cc ; \
$(call compile,examples/$(B).cc,$(INCLUDES_examples))))
$(foreach B,$(CBINS_examples),$(eval \
- $(OBJS_$(B)): examples/$(OUTPUT_DIR)/%.o: examples/$(B).c ; \
+ $(OBJS_$(B)): examples/$(OUTPUT_DIR)/%.$(OBJ): examples/$(B).c ; \
$(call c_compile,examples/$(B).c,$(INCLUDES_examples))))
$(foreach B,$(BINS_examples) $(CBINS_examples),$(eval \
- examples/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \
+ examples/$(OUTPUT_DIR)/$(call binname,$(B)): $(OBJS_$(B)) ; \
$(call makebin,$(OBJS_$(B)),$$@)))
diff --git a/libqpdf/build.mk b/libqpdf/build.mk
index da87b7db..df1227df 100644
--- a/libqpdf/build.mk
+++ b/libqpdf/build.mk
@@ -1,5 +1,5 @@
TARGETS_libqpdf = \
- libqpdf/$(OUTPUT_DIR)/libqpdf.la
+ $(foreach L,$(call libname,qpdf),libqpdf/$(OUTPUT_DIR)/$(L))
INCLUDES_libqpdf = include libqpdf
@@ -54,7 +54,7 @@ ifeq ($(GENDEPS),1)
-include $(call lobj_to_dep,$(OBJS_libqpdf))
endif
-$(OBJS_libqpdf): libqpdf/$(OUTPUT_DIR)/%.lo: libqpdf/%.cc
+$(OBJS_libqpdf): libqpdf/$(OUTPUT_DIR)/%.$(LOBJ): libqpdf/%.cc
$(call libcompile,$<,$(INCLUDES_libqpdf))
# Last three arguments to makelib are CURRENT,REVISION,AGE.
@@ -68,6 +68,5 @@ $(OBJS_libqpdf): libqpdf/$(OUTPUT_DIR)/%.lo: libqpdf/%.cc
#
# * Otherwise, increment REVISION
-libqpdf/$(OUTPUT_DIR)/libqpdf.la: $(OBJS_libqpdf)
+$(TARGETS_libqpdf): $(OBJS_libqpdf)
$(call makelib,$(OBJS_libqpdf),$@,3,0,0)
-
diff --git a/libtests/build.mk b/libtests/build.mk
index 4e2fe9be..b3cbd673 100644
--- a/libtests/build.mk
+++ b/libtests/build.mk
@@ -12,7 +12,7 @@ BINS_libtests = \
qutil \
rc4
-TARGETS_libtests = $(foreach B,$(BINS_libtests),libtests/$(OUTPUT_DIR)/$(B))
+TARGETS_libtests = $(foreach B,$(BINS_libtests),libtests/$(OUTPUT_DIR)/$(call binname,$(B)))
$(TARGETS_libtests): $(TARGETS_libqpdf)
@@ -31,9 +31,9 @@ ifeq ($(GENDEPS),1)
endif
$(foreach B,$(BINS_libtests),$(eval \
- $(OBJS_$(B)): libtests/$(OUTPUT_DIR)/%.o: libtests/$(B).cc ; \
+ $(OBJS_$(B)): libtests/$(OUTPUT_DIR)/%.$(OBJ): libtests/$(B).cc ; \
$(call compile,libtests/$(B).cc,$(INCLUDES_libtests))))
$(foreach B,$(BINS_libtests),$(eval \
- libtests/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \
+ libtests/$(OUTPUT_DIR)/$(call binname,$(B)): $(OBJS_$(B)) ; \
$(call makebin,$(OBJS_$(B)),$$@)))
diff --git a/make/gcc-linux.mk b/make/gcc-linux.mk
new file mode 100644
index 00000000..41978402
--- /dev/null
+++ b/make/gcc-linux.mk
@@ -0,0 +1,67 @@
+# --- Required interface definitions ---
+
+OBJ=o
+LOBJ=o
+
+# Usage: $(call libname,base)
+define libname
+lib$(1).a lib$(1).so
+endef
+
+# Usage: $(call binname,base)
+define binname
+$(1)
+endef
+
+# --- Required rule definitions ---
+
+# 1 2
+# Usage: $(call compile,src,includes)
+define compile
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_obj,$(1))
+endef
+
+# 1 2
+# Usage: $(call c_compile,src,includes)
+define c_compile
+ $(CC) $(CPPFLAGS) $(CFLAGS) \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call c_src_to_obj,$(1))
+endef
+
+define libcompile
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fpic \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_obj,$(1))
+endef
+
+
+# 1 2 3 4 5
+# Usage: $(call makelib,objs,library,current,revision,age)
+define makelib
+ $(RM) $2
+ if [ "$(findstring .a,$(2))" = ".a" ]; then \
+ ar cru $(2) $(1); \
+ ranlib $(2); \
+ else \
+ major=$$(( $(3) - $(5))); \
+ versuffix=$$major.$5.$4; \
+ $(CXX) $(CXXFLAGS) -shared -o $(2).$$versuffix $(1) \
+ -Wl,--soname -Wl,`basename $(2)`.$$major \
+ $(LDFLAGS) $(LIBS); \
+ ln -s `basename $(2)`.$$versuffix $(2); \
+ ln -s `basename $(2)`.$$versuffix $(2).$$major; \
+ fi
+endef
+
+# 1 2
+# Usage: $(call makebin,objs,binary)
+define makebin
+ $(CXX) $(CXXFLAGS) $(1) -o $(2) $(LDFLAGS) \
+ -Llibqpdf/$(OUTPUT_DIR) -lqpdf $(LIBS)
+endef
diff --git a/make/libtool.mk b/make/libtool.mk
new file mode 100644
index 00000000..3287d5aa
--- /dev/null
+++ b/make/libtool.mk
@@ -0,0 +1,74 @@
+# --- Required interface definitions ---
+
+OBJ=o
+LOBJ=lo
+
+# Usage: $(call libname,base)
+define libname
+lib$(1).la
+endef
+
+# Usage: $(call binname,base)
+define binname
+$(1)
+endef
+
+# --- Private definitions ---
+
+# Usage: $(call libdepflags,$(basename obj))
+# Usage: $(call fixdeps,$(basename obj))
+ifeq ($(GENDEPS),1)
+libdepflags=-MD -MF $(1).tdep -MP
+fixdeps=sed -e 's/\.o:/.lo:/' < $(1).tdep > $(1).dep
+
+else
+libdepflags=
+fixdeps=
+endif
+
+# --- Required rule definitions ---
+
+# 1 2
+# Usage: $(call compile,src,includes)
+define compile
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_obj,$(1))
+endef
+
+# 1 2
+# Usage: $(call c_compile,src,includes)
+define c_compile
+ $(CC) $(CPPFLAGS) $(CFLAGS) \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call c_src_to_obj,$(1))
+endef
+
+# 1 2
+# Usage: $(call libcompile,src,includes)
+define libcompile
+ $(LIBTOOL) --quiet --mode=compile \
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
+ $(call libdepflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_obj,$(1)); \
+ $(call fixdeps,$(basename $(call src_to_obj,$(1))))
+endef
+
+# 1 2 3 4 5
+# Usage: $(call makelib,objs,library,current,revision,age)
+define makelib
+ $(LIBTOOL) --mode=link \
+ $(CXX) $(CXXFLAGS) -o $(2) $(1) $(LDFLAGS) $(LIBS) \
+ -rpath $(libdir) -version-info $(3):$(4):$(5)
+endef
+
+# 1 2
+# Usage: $(call makebin,objs,binary)
+define makebin
+ $(LIBTOOL) --mode=link \
+ $(CXX) $(CXXFLAGS) $(1) -o $(2) $(LDFLAGS) \
+ -Llibqpdf/$(OUTPUT_DIR) -lqpdf $(LIBS)
+endef
diff --git a/make/rules.mk b/make/rules.mk
index 01b6f2f2..a55087b5 100644
--- a/make/rules.mk
+++ b/make/rules.mk
@@ -1,27 +1,28 @@
+include make/$(BUILDRULES).mk
# Usage: $(call src_to_obj,srcs)
define src_to_obj
-$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.o,$(notdir $(F))))
+$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.$(OBJ),$(notdir $(F))))
endef
# Usage: $(call c_src_to_obj,srcs)
define c_src_to_obj
-$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.c,%.o,$(notdir $(F))))
+$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.c,%.$(OBJ),$(notdir $(F))))
endef
# Usage: $(call src_to_lobj,srcs)
define src_to_lobj
-$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.lo,$(notdir $(F))))
+$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.$(LOBJ),$(notdir $(F))))
endef
# Usage: $(call obj_to_dep,objs)
define obj_to_dep
-$(patsubst %.o,%.dep,$(1))
+$(patsubst %.$(OBJ),%.dep,$(1))
endef
# Usage: $(call lobj_to_dep,objs)
define lobj_to_dep
-$(patsubst %.lo,%.dep,$(1))
+$(patsubst %.$(LOBJ),%.dep,$(1))
endef
# Usage: $(call depflags,$(basename obj))
@@ -30,60 +31,3 @@ depflags=-MD -MF $(1).dep -MP
else
depflags=
endif
-
-# Usage: $(call libdepflags,$(basename obj))
-# Usage: $(call fixdeps,$(basename obj))
-ifeq ($(GENDEPS),1)
-libdepflags=-MD -MF $(1).tdep -MP
-fixdeps=sed -e 's/\.o:/.lo:/' < $(1).tdep > $(1).dep
-
-else
-libdepflags=
-fixdeps=
-endif
-
-# 1 2
-# Usage: $(call compile,src,includes)
-define compile
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
- $(call depflags,$(basename $(call src_to_obj,$(1)))) \
- $(foreach I,$(2),-I$(I)) \
- -c $(1) -o $(call src_to_obj,$(1))
-endef
-
-# 1 2
-# Usage: $(call c_compile,src,includes)
-define c_compile
- $(CC) $(CPPFLAGS) $(CFLAGS) \
- $(call depflags,$(basename $(call src_to_obj,$(1)))) \
- $(foreach I,$(2),-I$(I)) \
- -c $(1) -o $(call c_src_to_obj,$(1))
-endef
-
-# 1 2
-# Usage: $(call libcompile,src,includes)
-define libcompile
- $(LIBTOOL) --quiet --mode=compile \
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
- $(call libdepflags,$(basename $(call src_to_obj,$(1)))) \
- $(foreach I,$(2),-I$(I)) \
- -c $(1) -o $(call src_to_obj,$(1)); \
- $(call fixdeps,$(basename $(call src_to_obj,$(1))))
-endef
-
-# 1 2 3 4 5
-# Usage: $(call makelib,objs,library,current,revision,age)
-define makelib
- $(LIBTOOL) --mode=link \
- $(CXX) $(CXXFLAGS) -o $(2) $(1) $(LDFLAGS) $(LIBS) \
- -rpath $(libdir) -version-info $(3):$(4):$(5)
-endef
-
-# 1 2
-# Usage: $(call makebin,objs,binary)
-define makebin
- $(LIBTOOL) --mode=link \
- $(CXX) $(CXXFLAGS) $(1) -o $(2) $(LDFLAGS) \
- -Llibqpdf/$(OUTPUT_DIR) -lqpdf $(LIBS)
-endef
-
diff --git a/qpdf/build.mk b/qpdf/build.mk
index 6e748c26..bf9e6e51 100644
--- a/qpdf/build.mk
+++ b/qpdf/build.mk
@@ -1,7 +1,7 @@
BINS_qpdf = qpdf test_driver
CBINS_qpdf = qpdf-ctest
-TARGETS_qpdf = $(foreach B,$(BINS_qpdf) $(CBINS_qpdf),qpdf/$(OUTPUT_DIR)/$(B))
+TARGETS_qpdf = $(foreach B,$(BINS_qpdf) $(CBINS_qpdf),qpdf/$(OUTPUT_DIR)/$(call binname,$(B)))
$(TARGETS_qpdf): $(TARGETS_libqpdf)
@@ -21,13 +21,13 @@ ifeq ($(GENDEPS),1)
endif
$(foreach B,$(BINS_qpdf),$(eval \
- $(OBJS_$(B)): qpdf/$(OUTPUT_DIR)/%.o: qpdf/$(B).cc ; \
+ $(OBJS_$(B)): qpdf/$(OUTPUT_DIR)/%.$(OBJ): qpdf/$(B).cc ; \
$(call compile,qpdf/$(B).cc,$(INCLUDES_qpdf))))
$(foreach B,$(CBINS_qpdf),$(eval \
- $(OBJS_$(B)): qpdf/$(OUTPUT_DIR)/%.o: qpdf/$(B).c ; \
+ $(OBJS_$(B)): qpdf/$(OUTPUT_DIR)/%.$(OBJ): qpdf/$(B).c ; \
$(call c_compile,qpdf/$(B).c,$(INCLUDES_qpdf))))
$(foreach B,$(BINS_qpdf) $(CBINS_qpdf),$(eval \
- qpdf/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \
+ qpdf/$(OUTPUT_DIR)/$(call binname,$(B)): $(OBJS_$(B)) ; \
$(call makebin,$(OBJS_$(B)),$$@)))
diff --git a/zlib-flate/build.mk b/zlib-flate/build.mk
index 57d2c98c..341195ae 100644
--- a/zlib-flate/build.mk
+++ b/zlib-flate/build.mk
@@ -1,5 +1,5 @@
TARGETS_zlib-flate = \
- zlib-flate/$(OUTPUT_DIR)/zlib-flate
+ zlib-flate/$(OUTPUT_DIR)/$(call binname,zlib-flate)
$(TARGETS_zlib-flate): $(TARGETS_libqpdf)
@@ -18,5 +18,5 @@ endif
$(OBJS_zlib-flate): zlib-flate/$(OUTPUT_DIR)/%.o: zlib-flate/%.cc
$(call compile,$<,$(INCLUDES_zlib-flate))
-zlib-flate/$(OUTPUT_DIR)/zlib-flate: $(OBJS_zlib-flate)
+zlib-flate/$(OUTPUT_DIR)/$(call binname,zlib-flate): $(OBJS_zlib-flate)
$(call makebin,$(OBJS_zlib-flate),$@)