diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-10 18:43:09 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-10 18:43:09 +0000 |
commit | f8d8287cdbd7da9cd9392bcddf04860a10fa598e (patch) | |
tree | 668b4cc601fdfd050a51095d4f9bbebef9eaffec /build | |
download | iconv-f8d8287cdbd7da9cd9392bcddf04860a10fa598e.tar.gz iconv-f8d8287cdbd7da9cd9392bcddf04860a10fa598e.tar.bz2 |
Import Iconv sources
svn path=/trunk/iconv/; revision=5677
Diffstat (limited to 'build')
-rw-r--r-- | build/Makefile.common | 158 | ||||
-rw-r--r-- | build/Makefile.config | 4 |
2 files changed, 162 insertions, 0 deletions
diff --git a/build/Makefile.common b/build/Makefile.common new file mode 100644 index 0000000..7da0315 --- /dev/null +++ b/build/Makefile.common @@ -0,0 +1,158 @@ +# Top-level Makefile fragment + +# Default target +all: release + +# Name of component +COMPONENT := libiconv + +# Environment +TOP ?= $(CURDIR) +EXPORT := $(TOP)/dist +RELEASEDIR := build/Release +DEBUGDIR := build/Debug +COVERAGEDIR := build/coverage + +# List of items to delete on clean +ITEMS_CLEAN := +# List of items to delete on distclean +ITEMS_DISTCLEAN := + +# List of targets to run for testing +TARGET_TESTS := + +# Source files +SOURCES := + +# Include configuration Makefile fragment +include build/Makefile.config + +# Include Makefile fragments in subdirectories + +define do_include +DIR := $$(dir $(1)) +include $(1) + +endef + +MAKE_INCLUDES := $(wildcard */Makefile) +$(eval $(foreach INC, $(MAKE_INCLUDES), $(call do_include,$(INC)))) + +# Calculate objects to build +OBJECTS := $(subst /,_,$(subst .c,.o,$(SOURCES))) + +.PHONY: release debug test coverage profile \ + clean distclean setup export install uninstall + +# Rules +release: setup $(addprefix $(RELEASEDIR)/,$(OBJECTS)) + @$(AR) $(ARFLAGS) $(COMPONENT).a $(addprefix $(RELEASEDIR)/,$(OBJECTS)) + +debug: setup $(addprefix $(DEBUGDIR)/,$(OBJECTS)) + @$(AR) $(ARFLAGS) $(COMPONENT)-debug.a \ + $(addprefix $(DEBUGDIR)/,$(OBJECTS)) + +test: debug $(TARGET_TESTS) + +coverage: clean + @$(LCOV) --directory . --zerocounters + @$(MAKE) test CFLAGS="$(CFLAGS) -fprofile-arcs -ftest-coverage" \ + LDFLAGS="$(LDFLAGS) -lgcov" + @$(LCOV) --directory $(DEBUGDIR) --base-directory $(TOP) \ + --capture --output-file $(COVERAGEDIR)/$(COMPONENT)_tmp.info + @$(LCOV) --extract $(COVERAGEDIR)/$(COMPONENT)_tmp.info "$(TOP)/src*" \ + -o $(COVERAGEDIR)/$(COMPONENT).info + @$(RM) $(RMFLAGS) $(COVERAGEDIR)/$(COMPONENT)_tmp.info + @$(GENHTML) -o $(COVERAGEDIR) --num-spaces 2 \ + $(COVERAGEDIR)/$(COMPONENT).info + +profile: clean + @$(MAKE) test CFLAGS="$(CFLAGS) -pg" LDFLAGS="-pg $(LDFLAGS)" + +clean: + -@$(RM) $(RMFLAGS) $(ITEMS_CLEAN) + -@$(RM) $(RMFLAGS) gmon.out + -@$(RM) $(RMFLAGS) -r $(COVERAGEDIR) + -@$(RM) $(RMFLAGS) -r $(RELEASEDIR) + -@$(RM) $(RMFLAGS) -r $(DEBUGDIR) + -@$(RM) $(RMFLAGS) $(COMPONENT).a + -@$(RM) $(RMFLAGS) $(COMPONENT)-debug.a + -@$(RM) $(RMFLAGS) $(COMPONENT).pc + +distclean: clean + -@$(RM) $(RMFLAGS) $(ITEMS_DISTCLEAN) + -@$(RM) $(RMFLAGS) -r $(TOP)/dist + +setup: + @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps + @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps + @$(MKDIR) $(MKDIRFLAGS) $(COVERAGEDIR) + +export: + @$(MKDIR) $(MKDIRFLAGS) -p $(TOP)/dist + @$(MAKE) install PREFIX="$(TOP)/dist" + +install: release + @$(MKDIR) $(MKDIRFLAGS) -p $(DESTDIR)$(PREFIX)/lib/pkgconfig + @$(MKDIR) $(MKDIRFLAGS) -p $(DESTDIR)$(PREFIX)/include/iconv + @$(SED) -e 's#PREFIX#$(PREFIX)#' $(COMPONENT).pc.in >$(COMPONENT).pc + $(INSTALL) -m 644 $(COMPONENT).a $(DESTDIR)$(PREFIX)/lib + $(INSTALL) -m 644 $(COMPONENT).pc $(DESTDIR)$(PREFIX)/lib/pkgconfig + $(INSTALL) -m 644 $(filter %.h, $(wildcard include/iconv/*)) $(DESTDIR)$(PREFIX)/include/iconv + +uninstall: + $(RM) $(RMFLAGS) $(DESTDIR)$(PREFIX)/lib/$(COMPONENT).a + $(RM) $(RMFLAGS) $(DESTDIR)$(PREFIX)/lib/pkgconfig/$(COMPONENT).pc + $(RM) $(RMFLAGS) -r $(DESTDIR)$(PREFIX)/include/iconv + +$(RELEASEDIR)/deps/created: + @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps + @$(TOUCH) $(TOUCHFLAGS) $(RELEASEDIR)/deps/created + +$(DEBUGDIR)/deps/created: + @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps + @$(TOUCH) $(TOUCHFLAGS) $(DEBUGDIR)/deps/created + +DEPFILES := + +define do_dep +DEPFILES += $(2) +$$(RELEASEDIR)/deps/$(2): $$(RELEASEDIR)/deps/created $(1) + @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)" + @$$(RM) $$(RMFLAGS) $$(RELEASEDIR)/deps/$(2) + @$$(CC) $$(RELEASECFLAGS) -MM -MT \ + '$$(RELEASEDIR)/deps/$(2) $$(RELEASEDIR)/$(3)' \ + -MF $$(RELEASEDIR)/deps/$(2) $(1) + +$$(DEBUGDIR)/deps/$(2): $$(DEBUGDIR)/deps/created $(1) + @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)" + @$$(RM) $$(RMFLAGS) $$(DEBUGDIR)/deps/$(2) + @$$(CC) $$(DEBUGCFLAGS) -MM -MT \ + '$$(DEBUGDIR)/deps/$(2) $$(DEBUGDIR)/$(3)' \ + -MF $$(DEBUGDIR)/deps/$(2) $(1) + +endef + +# Finally, build rules for compilation +define do_compile +$$(RELEASEDIR)/$(2): $(1) + @$$(ECHO) $$(ECHOFLAGS) "==> $(1)" + @$$(CC) -c $$(RELEASECFLAGS) -o $$@ $(1) + +$$(DEBUGDIR)/$(2): $(1) + @$$(ECHO) $$(ECHOFLAGS) "==> $(1)" + @$$(CC) -c $$(DEBUGCFLAGS) -o $$@ $(1) + +endef + +$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ + $(call do_dep,$(SOURCE),$(subst /,_,$(SOURCE:.c=.d)),$(subst /,_,$(SOURCE:.c=.o))))) + +ifneq ($(findstring clean,$(MAKECMDGOALS)),clean) +-include $(sort $(addprefix $(RELEASEDIR)/deps/,$(DEPFILES))) +-include $(sort $(addprefix $(DEBUGDIR)/deps/,$(DEPFILES))) +endif + +$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ + $(call do_compile,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o))))) + diff --git a/build/Makefile.config b/build/Makefile.config new file mode 100644 index 0000000..1d27350 --- /dev/null +++ b/build/Makefile.config @@ -0,0 +1,4 @@ +# Configuration Makefile fragment + +# Cater for local configuration changes +-include build/Makefile.config.override |