X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Rules.mk;h=8ac499f335b9aabf84b7ba32d97de53add643b8e;hb=a35068630fea1949bbf1e6c6be7790a5813af14e;hp=c84f71da8aa2a438e204b15c892d1d31f63db649;hpb=6b22d3d6b4132b617766a55a60d308ff29b6d37b;p=build.git diff --git a/Rules.mk b/Rules.mk index c84f71da..8ac499f3 100644 --- a/Rules.mk +++ b/Rules.mk @@ -4,7 +4,7 @@ # Mark Huang # Copyright (C) 2003-2006 The Trustees of Princeton University # -# $Id: Rules.mk,v 1.19 2006/03/08 21:25:46 mlhuang Exp $ +# $Id: Rules.mk,v 1.37 2007/09/10 22:24:20 mef Exp $ # # Base rpmbuild in the current directory @@ -23,8 +23,14 @@ $(SPECFILE): ifeq ($(TAG),HEAD) # Define date for untagged builds echo "%define date $(shell date +%Y.%m.%d)" >> $@ +else + # Define cvstag for tagged builds + echo "%define cvstag $(TAG)" >> $@ endif - cvs -d $(CVSROOT) checkout -r $(TAG) -p $(SPEC) >> $@ + $(if $($(package)-SVNPATH),\ + svn cat $($(package)-SVNPATH)/$(SPEC) >> $@,\ + cvs -d $(CVSROOT) checkout -r $(TAG) -p $(SPEC) >> $@) + # # Parse spec file into Makefile fragment @@ -32,13 +38,13 @@ endif MK := tmp/$(package).mk -parseSpec: CFLAGS := -g -Wall +parseSpec: CFLAGS := -g -Wall -D_GNU_SOURCE parseSpec: LDFLAGS := -lrpm -lrpmbuild $(MK): $(SPECFILE) parseSpec .rpmmacros mkdir -p tmp - ./parseSpec $(SPECFILE) > $@ + ./parseSpec $(RPMFLAGS) $(SPECFILE) > $@ # Defines SOURCES, SRPM, RPMS include $(MK) @@ -57,19 +63,39 @@ $(patsubst %.tar,%,$(1)))))) SOURCEDIRS := $(call stripext,$(SOURCES)) -SOURCES/$(MODULE): +# Thierry - Jan 29 2007 +# Allow different modules to have different CVSROOT +# and/or to be extracted from their SVNPATH +# +# is there a single module ? to mimick cvs export -d behaviour +MULTI_MODULE := $(word 2,$(MODULE)) +ifeq "$(MULTI_MODULE)" "" +# single module: do as before +SOURCES/$(package): mkdir -p SOURCES - cd SOURCES && cvs -d $(CVSROOT) export -r $(TAG) $(MODULE) + $(if $($(package)-SVNPATH),\ + cd SOURCES && svn export $($(package)-SVNPATH) $(package),\ + cd SOURCES && cvs -d $(CVSROOT) export -r $(TAG) -d $(package) $(MODULE)) +else +# multiple modules : iterate +SOURCES/$(package): + mkdir -p SOURCES/$(package) && cd SOURCES/$(package) && (\ + $(foreach module,$(MODULE),\ + $(if $($(module)-SVNPATH), \ + svn export $($(module)-SVNPATH) $(module);, \ + cvs -d $(if $($(module)-CVSROOT),$($(module)-CVSROOT),$(CVSROOT)) export -r $(TAG) $(module);\ + ))) +endif # Make a hard-linked copy of the exported directory for each Source # defined in the spec file. However, our convention is that there # should be only one Source file and one CVS module per RPM. It's okay # if the CVS module consists of multiple directories, as long as the # spec file knows what's going on. -$(SOURCEDIRS): SOURCES/$(MODULE) +$(SOURCEDIRS): SOURCES/$(package) cp -rl $< $@ -.SECONDARY: SOURCES/$(MODULE) $(SOURCEDIRS) +.SECONDARY: SOURCES/$(package) $(SOURCEDIRS) # Generate tarballs SOURCES/%.tar.bz2: SOURCES/% @@ -94,7 +120,7 @@ SOURCES/%.tar: SOURCES/% all: $(RPMS) $(SRPM) # Build RPMS -$(RPMS): $(SPECFILE) $(SOURCES) .rpmmacros +$(RPMS): $(SPECFILE) $(SOURCES) mkdir -p BUILD RPMS $(RPMBUILD) $(RPMFLAGS) -bb $< @@ -105,9 +131,9 @@ $(wordlist 2,$(words $(RPMS)),$(RPMS)): $(firstword $(RPMS)) endif # Build SRPM -$(SRPM): $(SPECFILE) $(SOURCES) .rpmmacros +$(SRPM): $(SPECFILE) $(SOURCES) mkdir -p SRPMS - rpmbuild $(RPMFLAGS) -bs $< + $(RPMBUILD) $(RPMFLAGS) -bs $< # Base rpmbuild in the current directory .rpmmacros: @@ -119,8 +145,17 @@ clean: rm -rf \ $(RPMS) $(SRPM) \ $(patsubst SOURCES/%,BUILD/%,$(SOURCEDIRS)) \ - $(SOURCES) $(SOURCEDIRS) SOURCES/$(MODULE) \ - $(MK) $(SPECFILE) \ - tmp + $(SOURCES) $(SOURCEDIRS) SOURCES/$(package) \ + $(MK) $(SPECFILE) .PHONY: all clean + +#################### convenience, for debugging only +# make +foo : prints the value of $(foo) +# make ++foo : idem but verbose, i.e. foo=$(foo) +++%: varname=$(subst +,,$@) +++%: + @echo $(varname)=$($(varname)) ++%: varname=$(subst +,,$@) ++%: + @echo $($(varname))