From c7be2041b8c97129323a8a7ad6d8da0310d371f1 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 10 Oct 2009 16:51:20 +0000 Subject: [PATCH] include external-libs git-svn-id: svn+q:///qpdf/trunk@761 71b93d88-0707-0410-a8cf-f5a4172ac649 --- Makefile | 3 ++- external-libs/Makefile | 1 + external-libs/build.mk | 57 ++++++++++++++++++++++++++++++++++++++++++ libqpdf/build.mk | 2 ++ make/gcc-linux.mk | 10 ++++++-- make/rules.mk | 22 +++++++++++++--- 6 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 external-libs/Makefile create mode 100644 external-libs/build.mk diff --git a/Makefile b/Makefile index a0207f5b..9998dbb9 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,8 @@ # install to install in a separate location. This is useful for # packagers. -BUILD_ITEMS = manual libqpdf zlib-flate libtests qpdf examples +#XXX +BUILD_ITEMS = manual external-libs libqpdf zlib-flate libtests qpdf examples OUTPUT_DIR = build ALL_TARGETS = diff --git a/external-libs/Makefile b/external-libs/Makefile new file mode 100644 index 00000000..90899055 --- /dev/null +++ b/external-libs/Makefile @@ -0,0 +1 @@ +include ../make/proxy.mk diff --git a/external-libs/build.mk b/external-libs/build.mk new file mode 100644 index 00000000..5b092481 --- /dev/null +++ b/external-libs/build.mk @@ -0,0 +1,57 @@ +TARGETS_external-libs = external-libs/$(OUTPUT_DIR)/libexternal.a +INCLUDES_external-libs = external-libs/zlib external-libs/pcre \ + external-libs/$(OUTPUT_DIR) + +SRCS_external-libs_zlib = \ + external-libs/zlib/adler32.c \ + external-libs/zlib/compress.c \ + external-libs/zlib/crc32.c \ + external-libs/zlib/gzio.c \ + external-libs/zlib/uncompr.c \ + external-libs/zlib/deflate.c \ + external-libs/zlib/trees.c \ + external-libs/zlib/zutil.c \ + external-libs/zlib/inflate.c \ + external-libs/zlib/infback.c \ + external-libs/zlib/inftrees.c \ + external-libs/zlib/inffast.c \ + +SRCS_external-libs_pcre = \ + external-libs/pcre/maketables.c \ + external-libs/pcre/get.c \ + external-libs/pcre/study.c \ + external-libs/pcre/pcre.c + +SRCS_external-libs = $(SRCS_external-libs_zlib) $(SRCS_external-libs_pcre) + +external-libs/$(OUTPUT_DIR)/pcre.$(LOBJ): external-libs/$(OUTPUT_DIR)/chartables.c + +external-libs/$(OUTPUT_DIR)/chartables.c: external-libs/$(OUTPUT_DIR)/$(call binname,dftables) + external-libs/$(OUTPUT_DIR)/$(call binname,dftables) \ + external-libs/$(OUTPUT_DIR)/chartables.c + +external-libs/$(OUTPUT_DIR)/$(call binname,dftables): + $(CC) -o $@ external-libs/pcre/dftables.c + +# ----- + +OBJS_external-libs_zlib = $(call c_src_to_lobj,$(subst zlib/,,$(SRCS_external-libs_zlib))) +OBJS_external-libs_pcre = $(call c_src_to_lobj,$(subst pcre/,,$(SRCS_external-libs_pcre))) + +OBJS_external-libs = $(OBJS_external-libs_zlib) $(OBJS_external-libs_pcre) + +x: + @echo $(call lobj_to_dep,$(OBJS_external-libs)) + +ifeq ($(GENDEPS),1) +-include $(call lobj_to_dep,$(OBJS_external-libs)) +endif + +$(OBJS_external-libs_zlib): external-libs/$(OUTPUT_DIR)/%.$(LOBJ): external-libs/zlib/%.c + $(call c_libcompile,$<,$(INCLUDES_external-libs)) + +$(OBJS_external-libs_pcre): external-libs/$(OUTPUT_DIR)/%.$(LOBJ): external-libs/pcre/%.c + $(call c_libcompile,$<,$(INCLUDES_external-libs)) + +$(TARGETS_external-libs): $(OBJS_external-libs) + $(call makeslib,$(OBJS_external-libs),$(TARGETS_external-libs)) diff --git a/libqpdf/build.mk b/libqpdf/build.mk index 5696a3b5..ecda6a25 100644 --- a/libqpdf/build.mk +++ b/libqpdf/build.mk @@ -1,5 +1,7 @@ TARGETS_libqpdf = libqpdf/$(OUTPUT_DIR)/$(call libname,qpdf) +$(TARGETS_libqpdf): $(TARGETS_external-libs) + INCLUDES_libqpdf = include libqpdf SRCS_libqpdf = \ diff --git a/make/gcc-linux.mk b/make/gcc-linux.mk index e4fdbe02..6124357b 100644 --- a/make/gcc-linux.mk +++ b/make/gcc-linux.mk @@ -28,7 +28,7 @@ endef # Usage: $(call c_compile,src,includes) define c_compile $(CC) $(CPPFLAGS) $(CFLAGS) \ - $(call depflags,$(basename $(call src_to_obj,$(1)))) \ + $(call depflags,$(basename $(call c_src_to_obj,$(1)))) \ $(foreach I,$(2),-I$(I)) \ -c $(1) -o $(call c_src_to_obj,$(1)) endef @@ -39,6 +39,12 @@ define libcompile $(foreach I,$(2),-I$(I)) \ -c $(1) -o $(call src_to_obj,$(1)) endef +define c_libcompile + $(CC) $(CPPFLAGS) $(CXXFLAGS) -fpic \ + $(call depflags,$(basename $(call c_src_to_lobj,$(1)))) \ + $(foreach I,$(2),-I$(I)) \ + -c $(1) -o $(call c_src_to_obj,$(1)) +endef # 1 2 @@ -52,7 +58,7 @@ endef # 1 2 3 4 5 # Usage: $(call makelib,objs,library,current,revision,age) define makelib - $(RM) $2 + $(RM) $(2) $(2).* major=$$(( $(3) - $(5))); \ versuffix=$$major.$5.$4; \ $(CXX) $(CXXFLAGS) -shared -o $(2).$$versuffix $(1) \ diff --git a/make/rules.mk b/make/rules.mk index a55087b5..efeb9a7f 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -1,18 +1,34 @@ include make/$(BUILDRULES).mk +define firstelem +$(word 1,$(subst /, ,$(1))) +endef +SPC := $(subst /, ,/) +define lastelem +$(subst $(SPC),/,$(word $(words $(subst /, ,$(1))),$(subst /, ,$(1)))) +endef +define objbase +$(patsubst %.$(2),%.$(3),$(firstelem)/$(OUTPUT_DIR)/$(lastelem)) +endef + # Usage: $(call src_to_obj,srcs) define src_to_obj -$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.$(OBJ),$(notdir $(F)))) +$(foreach F,$(1),$(call objbase,$(F),cc,$(OBJ))) endef # Usage: $(call c_src_to_obj,srcs) define c_src_to_obj -$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.c,%.$(OBJ),$(notdir $(F)))) +$(foreach F,$(1),$(call objbase,$(F),c,$(OBJ))) endef # Usage: $(call src_to_lobj,srcs) define src_to_lobj -$(foreach F,$(1),$(dir $(F))$(OUTPUT_DIR)/$(patsubst %.cc,%.$(LOBJ),$(notdir $(F)))) +$(foreach F,$(1),$(call objbase,$(F),cc,$(LOBJ))) +endef + +# Usage: $(call c_src_to_lobj,srcs) +define c_src_to_lobj +$(foreach F,$(1),$(call objbase,$(F),c,$(LOBJ))) endef # Usage: $(call obj_to_dep,objs)