From: Patrik Gornicz Date: Tue, 1 Sep 2009 05:24:06 +0000 (-0400) Subject: finished changes to deps directory building X-Git-Tag: libbear-premerge~1 X-Git-Url: http://gitweb.pgornicz.com/?a=commitdiff_plain;h=e3c1a1885bdb9b8a98a911e0e866d881520a20cf;p=libbear.git finished changes to deps directory building --- diff --git a/lib/rules.mk b/lib/rules.mk index e2e53ae..66dfd21 100644 --- a/lib/rules.mk +++ b/lib/rules.mk @@ -21,16 +21,15 @@ ${G_DEPS_LIB}: ${L_DEPS_$P} # how to link the main target -${TARGETTMP_$P}: ${L_OBJS_$P} | $${@D} +${TARGETTMP_$P}: ${L_OBJS_$P} | $${SS_DIR} ${cmd-link} # rule to copy tmp target to working directory -${TARGET_$P}: ${TARGETTMP_$P} | $${@D} +${TARGET_$P}: ${TARGETTMP_$P} | $${SS_DIR} ${cmd-cp} # rule to make an object file from a .cpp -${OBJSDIR_$P}%.o: ${SRCSDIR_$P}%.cpp | $${@D} \ - $$(patsubst ${OBJSDIR_$P},${DEPSDIR_$P},$${@D}) +${OBJSDIR_$P}/%.o: ${SRCSDIR_$P}/%.cpp | $${SS_DIR} $${call SS_DEPSDIR,$P} ${cmd-cpp_to_obj_and_dep} diff --git a/rules.mk b/rules.mk index db6d2a2..efeb8c1 100644 --- a/rules.mk +++ b/rules.mk @@ -34,14 +34,6 @@ define cmd-cpp_to_obj_and_dep ${Q4s}${CXX} -c $< -o $@ -MF ${@:${OBJSDIR}%.o=${DEPSDIR}%.d} ${CXXFLAGS} ${INCFLAGS} -MMD -MQ $@ ${Q4e} endef -# Deprecated, use cmd-cpptoobjdep to create obj and dep -define cmd-cpptoobj - ${Q1s}${PRNTLOG} "${CXX}" "$@" ${Q1e} - ${Q2s}${PRNTFMT} "${CXX}" "$@" ${Q2e} - ${Q3s}${CXX} $< -o $@ ${CXXFLAGS} ${INCFLAGS} -c ${Q3e} - ${Q4s}${CXX} $< -o $@ ${CXXFLAGS} ${INCFLAGS} -c ${Q4e} -endef - ${L_BLDDIRS}: ${Q1s}${PRNTLOG} "mkdir" "$@" ${Q1e} diff --git a/tests/rules.mk b/tests/rules.mk index 865de99..a78b44e 100644 --- a/tests/rules.mk +++ b/tests/rules.mk @@ -3,16 +3,12 @@ ${G_OBJS_TESTS}: ${L_OBJS_$P} ${G_DEPS_TESTS}: ${L_DEPS_$P} # how to copy a library to the tests bin directory -${BINDIR_$P}/${SONAME_${G_LIB}}: ${TARGET_${G_LIB}} | $${@D} +${BINDIR_$P}/${SONAME_${G_LIB}}: ${TARGET_${G_LIB}} | $${SS_DIR} ${cmd-cp} # rule to make an object file from a .cpp -${OBJSDIR_$P}%.o: ${SRCSDIR_$P}%.cpp | $${@D} - ${cmd-cpptoobj} - -# rule to make a depend file from a .cpp -${DEPSDIR_$P}%.d: ${SRCSDIR_$P}%.cpp | $${@D} - ${cmd-cpptodep} +${OBJSDIR_$P}/%.o: ${SRCSDIR_$P}/%.cpp | $${SS_DIR} $${call SS_DEPSDIR,$P} + ${cmd-cpp_to_obj_and_dep} T := $P diff --git a/vars.mk b/vars.mk index 4bf1bb2..6bc0f9f 100644 --- a/vars.mk +++ b/vars.mk @@ -1,7 +1,19 @@ -# cause the fancy $${@D} directory rules to work out +# cause the fancy SS_ directory rules to work out .SECONDEXPANSION: +# The SS rules need to be 'recursive' so they evaluate the @ variables at +# secondary expansion time +SS_DIR = ${@D} + +# Warning this secondary expansion rule is very very sensitive +# tricks are needed to make things work because the stem % does not match +# empty also, it is used by the call syntax as the package variable needs to be +# invoked as usage time while the rest has to be delayed till secondary +# expansion. +SS_DEPSDIR = $(patsubst %/,%,$(patsubst ${OBJSDIR_$(1)}%,${DEPSDIR_$(1)}%,$(dir $@))) + + B_DEBUG := DEBUG B_FINAL := FINAL B_WIN32 := WIN32