summaryrefslogtreecommitdiff
path: root/rules
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2014-06-10 14:45:09 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2014-06-10 14:45:09 -0400
commit82da7c9b508df9160d4d87e0a62b378d38e255fe (patch)
tree4b1679d84fd4880d19bc05d735c1615787a90db0 /rules
parentcc489ef4c6ba0b0ddda689bfde817f58744951d8 (diff)
rules/generic/Makefile: support generated-(re)sources better, clean up
Diffstat (limited to 'rules')
-rw-r--r--rules/generic/Makefile89
-rw-r--r--rules/qdox/generated-sources.mk (renamed from rules/qdox/generated-sourced.mk)4
2 files changed, 53 insertions, 40 deletions
diff --git a/rules/generic/Makefile b/rules/generic/Makefile
index a7a0309..25a5075 100644
--- a/rules/generic/Makefile
+++ b/rules/generic/Makefile
@@ -5,16 +5,20 @@ DESTDIR ?=
MAVEN_LOCAL_REPO ?= ~/.m2
# Utilities
-CP = cp
-ECHO = echo
-FAIL = exit 1
-FIND = find
-INSTALL = install
-JAR = jar
-JAVAC = javac
-MKDIRS = mkdir -p
-PRINTF = printf
-RM = rm -f
+CP = cp
+ECHO = echo
+EXISTS = test -e
+FAIL = exit 1
+FIND = find
+INSTALL = install
+JAR = jar
+JAVA = java
+JAVAC = javac
+MKDIRS = mkdir -p
+PRINTF = printf
+RM = rm -f
+SED = sed
+TOUCH = touch
XMLSTARLET = xml
# Detect information from POMs
@@ -36,32 +40,28 @@ $(if $(extra_makefiles),$(eval include $(extra_makefiles)))
dep_dir = $1 $(shell $(FIND) $1 2>/dev/null)
dep_optdir = $(shell $(FIND) $1 2>/dev/null)
-# all
-
all: PHONY \
$(addprefix target/$(artifactId)-$(version).,$(targets)) \
$(addsuffix /all,$(subdirs))
-target/$(artifactId)-$(version).pom: pom.xml
- $(INSTALL) -Dm644 $< $@
+# generate-sources #############################################################
-target/$(artifactId)-$(version).jar: %.jar: %
- $(JAR) -cf $@ -C $< .
+target/generated-sources:
+ $(if $^,for dep in $^; do $(EXISTS) $$dep || { $(RM) -r $@; $(FAIL); }; done,$(MKDIRS) $@)
+ $(TOUCH) $@
-target/$(artifactId)-$(version): %: \
- target/META-INF/maven/$(groupId)/$(artifactId)/pom.properties \
- target/META-INF/maven/$(groupId)/$(artifactId)/pom.xml \
- $(call dep_dir,target/classes)
- $(RM) -r $@
- $(MKDIRS) $@
- $(CP) -r target/META-INF $(wildcard target/classes/*) $@
+# generate-resources ###########################################################
-target/META-INF/maven/$(groupId)/$(artifactId)/pom.xml: pom.xml
+target/generated-resources: $(addpreffix target/generated-resources/META-INF/maven/$(groupId)/$(artifactId)/pom,.properties .xml)
+ for dep in $^; do $(EXISTS) $$dep || { $(RM) -r $@; $(FAIL); }; done
+ $(TOUCH) $@
+
+target/generated-resources/META-INF/maven/$(groupId)/$(artifactId)/pom.xml: pom.xml
$(INSTALL) -Dm644 $< $@
-# That is almost the default date format for locale=C, but the DOM is
+# This is almost the default date format for locale=C, but the DOM is
# 0-padded instead of space-padded.
-target/META-INF/maven/$(groupId)/$(artifactId)/pom.properties: pom.xml
+target/generated-resources/META-INF/maven/$(groupId)/$(artifactId)/pom.properties: pom.xml
$(MKDIRS) $(@D)
$(PRINTF) '%s\n' \
'#Generated by Make' \
@@ -71,34 +71,47 @@ target/META-INF/maven/$(groupId)/$(artifactId)/pom.properties: pom.xml
'artifactId=$(artifactId)' \
> $@
-exec_nonempty_q = $(if $(strip $1),@$(ECHO) $2; $(subst {},$1,$2))
-exec_nonempty_v = $(if $(strip $1),$(subst {},$1,$2))
+# compile ######################################################################
+
# Maven puts `target/classes` in the classpath, but that's unnecessary
# here, as we don't do incremental/segmented compilation.
-target/classes: $(call dep_optdir,$(sourceDirectory) $(resources))
+target/classes: \
+ $(call dep_optdir,$(sourceDirectory) $(resources)) \
+ $(call dep_dir,target/generated-sources target/generated-resources)
$(RM) -r $@
$(MKDIRS) $@
- $(call exec_nonempty_q,$(wildcard $(addsuffix /*,$(resources))),$(CP) -r {} $@ || { $(RM) -r $@; $(FAIL); })
- $(call exec_nonempty_q,$(filter %.java,$^) ,$(JAVAC) -d $@ {} || { $(RM) -r $@; $(FAIL); })
+ $(FIND) $(wildcard $(resources) target/generated-resources) -mindepth 1 -maxdepth 1 -exec $(CP) -r {} $@ \; || { $(RM) -r $@; $(FAIL); } # process-resources
+ $(FIND) $(wildcard $(sourceDirectory) target/generated-sources) -name '*.java' -exec $(JAVAC) -d $@ {} + || { $(RM) -r $@; $(FAIL); } # compile
+ $(TOUCH) $@
+
+# package ######################################################################
+
+target/$(artifactId)-$(version).pom: pom.xml
+ $(INSTALL) -Dm644 $< $@
+
+target/$(artifactId)-$(version).jar: target/classes
+ $(JAR) -cf $@ -C $< .
+
+# install ######################################################################
-# install
+mvndir = $(subst .,/,$(groupId))/$(artifactId)/$(version)
install: PHONY \
- $(addprefix $(DESTDIR)$(MAVEN_LOCAL_REPO)/$(subst .,/,$(groupId))/$(artifactId)/$(version)/$(artifactId)-$(version).,$(targets)) \
+ $(addprefix $(DESTDIR)$(MAVEN_LOCAL_REPO)/$(mvndir)/$(artifactId)-$(version).,$(targets)) \
$(addsuffix /install,$(subdirs))
-$(DESTDIR)$(MAVEN_LOCAL_REPO)/$(subst .,/,$(groupId))/$(artifactId)/$(version)/%: target/%
+$(DESTDIR)$(MAVEN_LOCAL_REPO)/$(mvndir)/%: target/%
$(INSTALL) -Dm644 $< $@
-# clean
+# clean ########################################################################
clean: PHONY $(addsuffix /clean,$(subdirs))
rm -rf target
-# recurse
+# recurse ######################################################################
deps2jars = $(wildcard $(patsubst %/all,%/target/*.jar,$(filter $(addsuffix /all,$(subdirs)),$1)))
-deps2classpath = $(shell echo $(abspath $(call deps2jars,$1)) $(CLASSPATH) | tr ' ' :)
+deps2classpath = $(shell $(ECHO) $(abspath $(call deps2jars,$1)) $(CLASSPATH) | $(SED) 'y/ /:/')
define recurse-rule
$1/%: PHONY $(addsuffix /all,$($1_deps))
@@ -106,7 +119,7 @@ $1/%: PHONY $(addsuffix /all,$($1_deps))
endef
$(foreach subdir,$(subdirs),$(eval $(call recurse-rule,$(subdir))))
-# boilerplate
+# boilerplate ##################################################################
.PHONY: PHONY FORCE
.DELETE_ON_ERROR:
diff --git a/rules/qdox/generated-sourced.mk b/rules/qdox/generated-sources.mk
index 350512e..56a277c 100644
--- a/rules/qdox/generated-sourced.mk
+++ b/rules/qdox/generated-sources.mk
@@ -9,6 +9,8 @@ parserpkg = com.thoughtworks.qdox.parser.impl
parserdir = target/generated-sources/parser/$(subst .,/,$(parserpkg))
byaccj_flags = -Jnorun -Jnoconstruct -Jpackage=$(parserpkg)
+target/generated-sources: $(addprefix $(parserdir)/,DefaultJavaCommentLexer.java JFlexLexer.java DefaultJavaCommentParser.java DefaultJavaCommentParserVal.java Parser.java)
+
$(parserdir)/DefaultJavaCommentLexer.java: src/grammar/commentlexer.flex
$(JFLEX) -d $(@D) $<
@@ -22,5 +24,3 @@ $(addprefix $(parserdir)/DefaultJavaCommentParser,.java Val.java): src/grammar/c
$(parserdir)/Parser.java: src/grammar/parser.y
$(MKDIRS) $(@D)
cd $(@D) && $(BYACCJ) $(byaccj_flags) -Jclass=Parser -Jimplements=CommentHandler -Jsemantic=Value -Jstack=${qdox.javaparser.stack} ${basedir}/$<
-
-target/classes: $(addprefix $(parserdir)/,DefaultJavaCommentLexer.java JFlexLexer.java DefaultJavaCommentParser.java DefaultJavaCommentParserVal.java Parser.java)