]> git.llucax.com Git - software/makeit.git/commitdiff
Add a special variable for the full current makefile directory
authorLeandro Lucarella <llucarella@integratech.com.ar>
Fri, 18 Sep 2009 15:37:40 +0000 (12:37 -0300)
committerLeandro Lucarella <llucarella@integratech.com.ar>
Fri, 18 Sep 2009 15:37:40 +0000 (12:37 -0300)
The $C variable (which stores the path to the current makefile relative to
the top-level directory) is renamed to $S and $C now stores the full
(absolute) path to the current makefile.

Build.mak
Lib.mak
subproj/Build.mak

index 72af2a000c234cfeab0bc7e04e52b6392cfbbd46..872ea85632ac23761afb2e5859bad48d570eec04 100644 (file)
--- a/Build.mak
+++ b/Build.mak
@@ -8,14 +8,14 @@ $I/include/makeit/%.h: $T/%.h
 
 # Include sub-directories makefiles
 
 
 # Include sub-directories makefiles
 
-C := subproj
+S := subproj
 include $T/subproj/Build.mak
 
 include $T/subproj/Build.mak
 
-C := lib1
+S := lib1
 include $T/lib1/Build.mak
 
 include $T/lib1/Build.mak
 
-C := lib2
+S := lib2
 include $T/lib2/Build.mak
 
 include $T/lib2/Build.mak
 
-C := prog
+S := prog
 include $T/prog/Build.mak
 include $T/prog/Build.mak
diff --git a/Lib.mak b/Lib.mak
index 247cad713992b023de52dd9992bbbda13278793d..de147379884579646570b99856ab4e93403d2dfd 100644 (file)
--- a/Lib.mak
+++ b/Lib.mak
@@ -4,7 +4,7 @@ Lib.mak.included := 1
 # These variables should be provided by the includer Makefile:
 # P should be the project name, mostly used to handle include directories
 # T should be the path to the top-level directory.
 # These variables should be provided by the includer Makefile:
 # P should be the project name, mostly used to handle include directories
 # T should be the path to the top-level directory.
-# C should be the path to the current directory.
+# S should be sub-directory where the current makefile is, relative to $T.
 
 # Verbosity flag (empty show nice messages, non-empty use make messages)
 # When used internal, $V expand to @ is nice messages should be printed, this
 
 # Verbosity flag (empty show nice messages, non-empty use make messages)
 # When used internal, $V expand to @ is nice messages should be printed, this
@@ -69,6 +69,11 @@ I := $(DESTDIR)$(prefix)
 # Includes directory
 INCLUDE_DIR ?= $G/include
 
 # Includes directory
 INCLUDE_DIR ?= $G/include
 
+# Directory of the current makefile (this might not be the same as $(CURDIR)
+# This variable is "lazy" because $S changes all the time, so it should be
+# evaluated in the context where $C is used, not here.
+C = $T/$S
+
 
 # Functions
 ############
 
 # Functions
 ############
@@ -80,16 +85,14 @@ eq = $(if $(subst $1,,$2),,$1)
 # Find sources files and get the corresponding object names
 # The first argument should be the sources extension ("c" or "cpp" typically)
 # It expects the variable $T and $O to be defined as commented previously in
 # Find sources files and get the corresponding object names
 # The first argument should be the sources extension ("c" or "cpp" typically)
 # It expects the variable $T and $O to be defined as commented previously in
-# this file. $C should be defined to the path to the current directory relative
-# to the top-level.
-find_objects = $(patsubst $T/%.$1,$O/%.o,$(shell find $T/$C -name '*.$1'))
+# this file.
+find_objects = $(patsubst $T/%.$1,$O/%.o,$(shell find $C -name '*.$1'))
 
 # Find sources files and get the corresponding object names
 # The first argument should be the sources extension ("c" or "cpp" typically)
 # It expects the variable $T and $O to be defined as commented previously in
 
 # Find sources files and get the corresponding object names
 # The first argument should be the sources extension ("c" or "cpp" typically)
 # It expects the variable $T and $O to be defined as commented previously in
-# this file. $C should be defined to the path to the current directory relative
-# to the top-level.
-find_headers = $(patsubst $T/$C/%.$1,$2/%.$1,$(shell find $T/$C -name '*.$1'))
+# this file.
+find_headers = $(patsubst $C/%.$1,$2/%.$1,$(shell find $C -name '*.$1'))
 
 # Abbreviate a file name. Cut the leading part of a file if it match to the $T
 # directory, so it can be displayed as if it were a relative directory. Take
 
 # Abbreviate a file name. Cut the leading part of a file if it match to the $T
 # directory, so it can be displayed as if it were a relative directory. Take
@@ -161,7 +164,7 @@ install_file = $(call exec,install -m $(if $1,$1,0644) $(if $2,$2,-D) \
 # doesn't already exist.
 symlink_include_dir = $(shell \
                test -L $(INCLUDE_DIR)/$1 \
 # doesn't already exist.
 symlink_include_dir = $(shell \
                test -L $(INCLUDE_DIR)/$1 \
-                       || ln -s $T/$C $(INCLUDE_DIR)/$1 )
+                       || ln -s $C $(INCLUDE_DIR)/$1 )
 
 
 # Overrided flags
 
 
 # Overrided flags
index 8236c13f06546201feecc871f6045af8a3d67846..9552ae094d342960bba71de83f09ca2d78dd151c 100644 (file)
@@ -16,7 +16,7 @@ $I/lib/libotherproj.so: $L/libotherproj.so
 install += $I/lib/libotherproj.so
 
 # Install the library's headers
 install += $I/lib/libotherproj.so
 
 # Install the library's headers
-$I/include/otherproj/%.h: $T/$C/%.h
+$I/include/otherproj/%.h: $C/%.h
        $(call install_file)
 # XXX: we can't use += here, call will be resolved lazily if we do
 install := $(install) $(call find_headers,h,$I/include/otherproj)
        $(call install_file)
 # XXX: we can't use += here, call will be resolved lazily if we do
 install := $(install) $(call find_headers,h,$I/include/otherproj)