summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-10 18:43:09 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-10 18:43:09 +0000
commitf8d8287cdbd7da9cd9392bcddf04860a10fa598e (patch)
tree668b4cc601fdfd050a51095d4f9bbebef9eaffec /build
downloadiconv-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.common158
-rw-r--r--build/Makefile.config4
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