]> git.llucax.com Git - software/makeit.git/commitdiff
Add a function to include sub-directory's Build.mak
authorLeandro Lucarella <llucarella@integratech.com.ar>
Mon, 21 Sep 2009 16:34:37 +0000 (13:34 -0300)
committerLeandro Lucarella <llucarella@integratech.com.ar>
Thu, 24 Sep 2009 13:38:30 +0000 (10:38 -0300)
Including a Build.mak in a sub-directory can be very error prone, since the
$S variable should be set to the relative path from $T before including the
Build.mak and restored afterwards.

The function include_subdirs is added to simplify this task, freeing the
user from doing all the dirty work and avoiding bugs.

The "otherproj" pkg-config file generation is moved to a subdirectory to
test how the new function works with deeply nested Build.mak.

Build.mak
Lib.mak
subproj/Build.mak
subproj/pkg-config/Build.mak [new file with mode: 0644]
subproj/pkg-config/otherproj.pc.in [moved from subproj/otherproj.pc.in with 100% similarity]

index a0a4458c0d3caf5aa6422ed44e4ad7d8e28e2e21..96bbecb8ff59a1463c6da5647bee3b60bafeecf8 100644 (file)
--- a/Build.mak
+++ b/Build.mak
@@ -7,16 +7,5 @@ $I/include/makeit/%.h: $T/%.h
        $(call install_file)
 
 # Include sub-directories makefiles
        $(call install_file)
 
 # Include sub-directories makefiles
-
-S := subproj
-include $T/$S/Build.mak
-
-S := lib1
-include $T/$S/Build.mak
-
-S := lib2
-include $T/$S/Build.mak
-
-S := prog
-include $T/$S/Build.mak
+$(call include_subdirs,subproj lib1 lib2 prog)
 
 
diff --git a/Lib.mak b/Lib.mak
index db8ffd5f401b2e8773579ff16f31a94b2d536980..bddc5e1b0e7dd85c293178039ffe7dfabe5c418d 100644 (file)
--- a/Lib.mak
+++ b/Lib.mak
@@ -211,6 +211,18 @@ gen_rebuild_flags = $(shell if test x"$2" != x"`cat $1 2>/dev/null`"; then \
                $(if $3,test -f $1 && echo "$3";) \
                echo "$2" > $1 ; fi)
 
                $(if $3,test -f $1 && echo "$3";) \
                echo "$2" > $1 ; fi)
 
+# Include sub-directory's Build.mak.  The only argument is a list of
+# subdirectories for which Build.mak should be included.  The $S directory is
+# set properly before including each sub-directory's Build.mak and restored
+# afterwards.
+define build_subdir_code
+_parent__$d__dir_ := $$S
+S := $$(if $$(_parent__$d__dir_),$$(_parent__$d__dir_)/$d,$d)
+include $$T/$$S/Build.mak
+S := $$(_parent__$d__dir_)
+endef
+include_subdirs = $(foreach d,$1,$(eval $(build_subdir_code)))
+
 
 # Overridden flags
 ##################
 
 # Overridden flags
 ##################
index b76101c6dbcdd0c170bbdc9cce808b21339cb88d..12ef4d7f104606c5772eef86f829f13b514b2005 100644 (file)
@@ -3,24 +3,10 @@
 .PHONY: otherproj
 all += otherproj
 
 .PHONY: otherproj
 all += otherproj
 
-# pkg-config specification file
-otherproj-PC-PREFIX := $(prefix)
-otherproj-PC-NAME := otherproj
-otherproj-PC-DESC := Some other project
-otherproj-PC-URL := http://www.otherproj.example.com/
-otherproj-PC-VERSION := 1.0
-otherproj-PC-LIBS := -lotherproject
-otherproj-PC-CFLAGS := -DOTHERPROJ_DEFINE
-otherproj-PC-VARS := PREFIX NAME DESC URL VERSION LIBS CFLAGS
-$L/otherproj.pc: PC_VARS := $(otherproj-PC-VARS)
-$L/otherproj.pc: $C/otherproj.pc.in $L/otherproj.pc-flags
-# trigger a rebuild when flags change
-setup_flags_files__ := $(call gen_rebuild_flags,$L/otherproj.pc-flags,\
-               $(call varcat,$(otherproj-PC-VARS),otherproj-PC-))
-# install
-$I/lib/pkgconfig/otherproj.pc: $L/otherproj.pc
-install += $I/lib/pkgconfig/otherproj.pc
-otherproj: $L/otherproj.pc
+# Include subdirectory to make the pkg-config stuff (it doesn't make much sense
+# to have this in a separated directory, it's just to test very nested
+# subdirectories :)
+$(call include_subdirs,pkg-config)
 
 # Shared library
 $L/libotherproj.so: LINKER := $(CC)
 
 # Shared library
 $L/libotherproj.so: LINKER := $(CC)
diff --git a/subproj/pkg-config/Build.mak b/subproj/pkg-config/Build.mak
new file mode 100644 (file)
index 0000000..be1b4df
--- /dev/null
@@ -0,0 +1,24 @@
+
+# Symbolic target to add to all
+.PHONY: otherproj-pc
+all += otherproj-pc
+
+# pkg-config specification file
+otherproj-PC-PREFIX := $(prefix)
+otherproj-PC-NAME := otherproj
+otherproj-PC-DESC := Some other project
+otherproj-PC-URL := http://www.otherproj.example.com/
+otherproj-PC-VERSION := 1.0
+otherproj-PC-LIBS := -lotherproject
+otherproj-PC-CFLAGS := -DOTHERPROJ_DEFINE
+otherproj-PC-VARS := PREFIX NAME DESC URL VERSION LIBS CFLAGS
+$L/otherproj.pc: PC_VARS := $(otherproj-PC-VARS)
+$L/otherproj.pc: $C/otherproj.pc.in $L/otherproj.pc-flags
+# trigger a rebuild when flags change
+setup_flags_files__ := $(call gen_rebuild_flags,$L/otherproj.pc-flags,\
+               $(call varcat,$(otherproj-PC-VARS),otherproj-PC-))
+# install
+$I/lib/pkgconfig/otherproj.pc: $L/otherproj.pc
+install += $I/lib/pkgconfig/otherproj.pc
+otherproj: $L/otherproj.pc
+