aboutsummaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
Diffstat (limited to 'mk')
-rw-r--r--mk/functions.mk2
-rw-r--r--mk/jars.mk15
-rw-r--r--mk/lib.mk24
-rw-r--r--mk/libraries.mk21
-rw-r--r--mk/patterns.mk9
-rw-r--r--mk/programs.mk4
-rw-r--r--mk/templates.mk4
7 files changed, 60 insertions, 19 deletions
diff --git a/mk/functions.mk b/mk/functions.mk
index 45d917399..c48775db8 100644
--- a/mk/functions.mk
+++ b/mk/functions.mk
@@ -10,5 +10,5 @@ filename-to-dep = $(dir $1).$(notdir $1).dep
# empty string if not found.
find-program = $(shell for i in $$(IFS=: ; echo $$PATH); do p=$$i/$(strip $1); if [ -e $$p ]; then echo $$p; break; fi; done)
-# Remove trailing slash.
+# Ensure that the given string ends in a single slash.
add-trailing-slash = $(patsubst %/,%,$(1))/
diff --git a/mk/jars.mk b/mk/jars.mk
index 99470f374..c8513e664 100644
--- a/mk/jars.mk
+++ b/mk/jars.mk
@@ -1,4 +1,5 @@
define build-jar
+
$(1)_NAME ?= $(1)
_d := $$(strip $$($(1)_DIR))
@@ -7,14 +8,20 @@ define build-jar
$(1)_TMPDIR := $$(_d)/.$$($(1)_NAME).jar.tmp
- $$($(1)_PATH): $$($(1)_SOURCES)
+ _jars := $$(foreach jar, $$($(1)_JARS), $$($$(jar)_PATH))
+
+ $$($(1)_PATH): $$($(1)_SOURCES) $$(_jars) $$($(1)_EXTRA_DEPS)| $$($(1)_ORDER_AFTER)
@rm -rf $$($(1)_TMPDIR)
@mkdir -p $$($(1)_TMPDIR)
- $$(trace-javac) javac $(GLOBAL_JAVACFLAGS) $$($(1)_JAVACFLAGS) -d $$($(1)_TMPDIR) $$($(1)_SOURCES)
- $$(trace-jar) jar cf $$($(1)_PATH) -C $$($(1)_TMPDIR) .
+ $$(trace-javac) javac $(GLOBAL_JAVACFLAGS) $$($(1)_JAVACFLAGS) -d $$($(1)_TMPDIR) \
+ $$(foreach fn, $$($(1)_SOURCES), '$$(fn)') \
+ -cp "$$(subst $$(space),,$$(foreach jar,$$($(1)_JARS),$$($$(jar)_PATH):))$$$$CLASSPATH"
+ @echo -e '$$(subst $$(newline),\n,$$($(1)_MANIFEST))' > $$($(1)_PATH).manifest
+ $$(trace-jar) jar cfm $$($(1)_PATH) $$($(1)_PATH).manifest -C $$($(1)_TMPDIR) .
+ @rm $$($(1)_PATH).manifest
@rm -rf $$($(1)_TMPDIR)
- $(1)_INSTALL_DIR ?= $$(libdir)/java
+ $(1)_INSTALL_DIR ?= $$(jardir)
$(1)_INSTALL_PATH := $$($(1)_INSTALL_DIR)/$$($(1)_NAME).jar
diff --git a/mk/lib.mk b/mk/lib.mk
index 56e162d50..ba1fb3a2a 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -14,17 +14,40 @@ dist-files :=
OS = $(shell uname -s)
+# Hack to define a literal space.
+space :=
+space +=
+
+
+# Hack to define a literal newline.
+define newline
+
+
+endef
+
+
# Default installation paths.
prefix ?= /usr/local
libdir ?= $(prefix)/lib
bindir ?= $(prefix)/bin
libexecdir ?= $(prefix)/libexec
datadir ?= $(prefix)/share
+jardir ?= $(datadir)/java
localstatedir ?= $(prefix)/var
sysconfdir ?= $(prefix)/etc
mandir ?= $(prefix)/share/man
+# Initialise support for build directories.
+builddir ?=
+
+ifdef builddir
+ buildprefix = $(builddir)/
+else
+ buildprefix =
+endif
+
+
# Pass -fPIC if we're building dynamic libraries.
BUILD_SHARED_LIBS ?= 1
@@ -39,7 +62,6 @@ ifeq ($(BUILD_SHARED_LIBS), 1)
SET_RPATH_TO_LIBS ?= 1
endif
-
# Pass -g if we want debug info.
BUILD_DEBUG ?= 1
diff --git a/mk/libraries.mk b/mk/libraries.mk
index 3b91c699e..766f7ccf7 100644
--- a/mk/libraries.mk
+++ b/mk/libraries.mk
@@ -45,9 +45,9 @@ endif
# built, otherwise a static library.
define build-library
$(1)_NAME ?= $(1)
- _d := $$(strip $$($(1)_DIR))
+ _d := $(buildprefix)$$(strip $$($(1)_DIR))
_srcs := $$(sort $$(foreach src, $$($(1)_SOURCES), $$(src)))
- $(1)_OBJS := $$(addsuffix .o, $$(basename $$(_srcs)))
+ $(1)_OBJS := $$(addprefix $(buildprefix), $$(addsuffix .o, $$(basename $$(_srcs))))
_libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_PATH))
$(1)_INSTALL_DIR ?= $$(libdir)
@@ -76,9 +76,12 @@ define build-library
$(1)_PATH := $$(_d)/$$($(1)_NAME).$(SO_EXT)
$$($(1)_PATH): $$($(1)_OBJS) $$(_libs) | $$(_d)/
- $$(trace-ld) $(CXX) -o $$@ -shared $$(GLOBAL_LDFLAGS) $$($(1)_OBJS) $$($(1)_LDFLAGS) $$($(1)_LDFLAGS_PROPAGATED) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS_USE))
+ $$(trace-ld) $(CXX) -o $$(abspath $$@) -shared $$(GLOBAL_LDFLAGS) $$($(1)_OBJS) $$($(1)_LDFLAGS) $$($(1)_LDFLAGS_PROPAGATED) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS_USE)) $$($(1)_LDFLAGS_UNINSTALLED)
- $(1)_LDFLAGS_USE += -L$$(_d) -Wl,-rpath,$$(abspath $$(_d)) -l$$(patsubst lib%,%,$$(strip $$($(1)_NAME)))
+ ifneq ($(OS), Darwin)
+ $(1)_LDFLAGS_USE += -Wl,-rpath,$$(abspath $$(_d))
+ endif
+ $(1)_LDFLAGS_USE += -L$$(_d) -l$$(patsubst lib%,%,$$(strip $$($(1)_NAME)))
$(1)_INSTALL_PATH := $(DESTDIR)$$($(1)_INSTALL_DIR)/$$($(1)_NAME).$(SO_EXT)
@@ -90,10 +93,12 @@ define build-library
$$(trace-ld) $(CXX) -o $$@ -shared $$(GLOBAL_LDFLAGS) $$($(1)_OBJS) $$($(1)_LDFLAGS) $$($(1)_LDFLAGS_PROPAGATED) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS_USE_INSTALLED))
$(1)_LDFLAGS_USE_INSTALLED += -L$$(DESTDIR)$$($(1)_INSTALL_DIR) -l$$(patsubst lib%,%,$$(strip $$($(1)_NAME)))
- ifeq ($(SET_RPATH_TO_LIBS), 1)
- $(1)_LDFLAGS_USE_INSTALLED += -Wl,-rpath,$$($(1)_INSTALL_DIR)
- else
- $(1)_LDFLAGS_USE_INSTALLED += -Wl,-rpath-link,$$($(1)_INSTALL_DIR)
+ ifneq ($(OS), Darwin)
+ ifeq ($(SET_RPATH_TO_LIBS), 1)
+ $(1)_LDFLAGS_USE_INSTALLED += -Wl,-rpath,$$($(1)_INSTALL_DIR)
+ else
+ $(1)_LDFLAGS_USE_INSTALLED += -Wl,-rpath-link,$$($(1)_INSTALL_DIR)
+ endif
endif
ifdef $(1)_FORCE_INSTALL
diff --git a/mk/patterns.mk b/mk/patterns.mk
index 6b2cfd017..3219d9629 100644
--- a/mk/patterns.mk
+++ b/mk/patterns.mk
@@ -1,8 +1,11 @@
-%.o: %.cc
+$(buildprefix)%.o: %.cc
+ @mkdir -p "$(dir $@)"
$(trace-cxx) $(CXX) -o $@ -c $< $(GLOBAL_CXXFLAGS) $(GLOBAL_CXXFLAGS_PCH) $(CXXFLAGS) $($@_CXXFLAGS) -MMD -MF $(call filename-to-dep, $@) -MP
-%.o: %.cpp
+$(buildprefix)%.o: %.cpp
+ @mkdir -p "$(dir $@)"
$(trace-cxx) $(CXX) -o $@ -c $< $(GLOBAL_CXXFLAGS) $(GLOBAL_CXXFLAGS_PCH) $(CXXFLAGS) $($@_CXXFLAGS) -MMD -MF $(call filename-to-dep, $@) -MP
-%.o: %.c
+$(buildprefix)%.o: %.c
+ @mkdir -p "$(dir $@)"
$(trace-cc) $(CC) -o $@ -c $< $(GLOBAL_CFLAGS) $(CFLAGS) $($@_CFLAGS) -MMD -MF $(call filename-to-dep, $@) -MP
diff --git a/mk/programs.mk b/mk/programs.mk
index 72afdf952..3ac64494e 100644
--- a/mk/programs.mk
+++ b/mk/programs.mk
@@ -23,9 +23,9 @@ programs-list :=
# - $(1)_INSTALL_DIR: the directory where the program will be
# installed; defaults to $(bindir).
define build-program
- _d := $$($(1)_DIR)
+ _d := $(buildprefix)$$($(1)_DIR)
_srcs := $$(sort $$(foreach src, $$($(1)_SOURCES), $$(src)))
- $(1)_OBJS := $$(addsuffix .o, $$(basename $$(_srcs)))
+ $(1)_OBJS := $$(addprefix $(buildprefix), $$(addsuffix .o, $$(basename $$(_srcs))))
_libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_PATH))
$(1)_PATH := $$(_d)/$(1)
diff --git a/mk/templates.mk b/mk/templates.mk
index ab99168bb..c7ac7afbf 100644
--- a/mk/templates.mk
+++ b/mk/templates.mk
@@ -8,8 +8,12 @@ define instantiate-template
endef
+ifneq ($(MAKECMDGOALS), clean)
+
%.h: %.h.in
$(trace-gen) rm -f $@ && ./config.status --quiet --header=$@
%: %.in
$(trace-gen) rm -f $@ && ./config.status --quiet --file=$@
+
+endif