From 2cc726f84b9a3b7c1c5a963b5adf840ba38754fe Mon Sep 17 00:00:00 2001
From: Björn Persson
Date: Fri, 18 Oct 2013 17:16:32 +0200
Subject: Wrote a pattern rule for making directories.
---
comfignat.mk | 13 +++++++------
manual.en.html | 15 +++++++++++++++
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/comfignat.mk b/comfignat.mk
index e134d2e..42dc5d8 100644
--- a/comfignat.mk
+++ b/comfignat.mk
@@ -513,11 +513,12 @@ preprocessed_files_in_builddir = ${addprefix ${builddir}/,${preprocessed_files}}
Comfignat_default_goal: build
# How to make directories:
-${builddir} ${stage_gprdir}:
+%/:
mkdir -p $@
+.PRECIOUS: %/
# How to initialize a build directory with a delegating makefile:
-${builddir}/Makefile: | ${builddir}
+${builddir}/Makefile: | ${builddir}/
@echo 'Writing $@.'
@( echo 'Comfignat_default_goal: force ; ${delegation_command}'; \
echo '%: force ; ${delegation_command} $$@'; \
@@ -576,19 +577,19 @@ show_configuration::
true
# How to preprocess the project Comfignat:
-${builddir}/comfignat.gpr: comfignat.gpr.gp | ${builddir}
+${builddir}/comfignat.gpr: comfignat.gpr.gp | ${builddir}/
"${GNATPREP}" $< $@ -DInvoked_By_Makefile ${all_directories}
# How to preprocess files that are needed during the build:
-${builddir}/%: %.gp | ${builddir}
+${builddir}/%: %.gp | ${builddir}/
${preprocess_file}
# How to preprocess usage projects:
-${stage_gprdir}/%: %.gp | ${stage_gprdir}
+${stage_gprdir}/%: %.gp | ${stage_gprdir}/
${preprocess_file}
# How to stage usage projects that don't need preprocessing:
-${stage_gprdir}/%: % | ${stage_gprdir}
+${stage_gprdir}/%: % | ${stage_gprdir}/
cp -p $< $@
preprocess: $${preprocessed_files_in_builddir}
diff --git a/manual.en.html b/manual.en.html
index fbeb65c..e54dda0 100755
--- a/manual.en.html
+++ b/manual.en.html
@@ -520,6 +520,19 @@ root of the source tree. Here's an example:
for Source_Dirs use ($Srcdir & "/tools");
+Writing Make Rules
+
+Making Directories
+
+There is no need to write rules to make directories. Comfignat has a pattern
+rule that matches all pathnames that end with a slash, and creates the
+directory and its ancestors. Just specify the directory as an order-only
+prerequisite and be sure to append a slash. This rule ensures that the
+directory data exists before the file db is written:
+
+${stage_statedir}/example/data/db: | ${stage_statedir}/example/data/
+ echo stuff > $@
+
Make Targets
These phony targets are defined in comfignat.mk:
@@ -627,6 +640,8 @@ working in subdirectories use the right build and staging directories.
The ability to save environment variables in the persistent
configuration was added.
+The pattern rule for making directories was added.
+
The Make targets all, base and
show_configuration were added.
--
cgit v1.2.3