automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

patch: stamp-h? files in subdirs


From: Derek R. Price
Subject: patch: stamp-h? files in subdirs
Date: Wed, 31 Jan 2001 14:25:21 -0500

stamp-h? files in subdirs are still being created in the wrong locations
by an automake configure script.  The problem was in AM_CONFIG_HEADERS.
I fixed it, but is dependent on the autoconf beta.  Patch attached.

I was thinking of attempting to eliminate the need for the recreation of
stamp-h? files in the Makefile.in targets, but it looked like a hassle
to get the quotes right in an m4 macro.  If there's interest in this,
let me know and I'll spend some more time on it.

        * m4/header.m4 (AM_CONFIG_HEADERS): fix stamp-h creation to
occur in
        the correct locations
        (_AM_DIRNAME): helper function which basically implements an sh
        `dirname` in m4
        * automake.in (scan_one_autoconf_file): change the warning
exception
        for AC_CONFIG_HEADERS to match the new m4/header.m4
        * stamph2.test: new
        * dirname.test: new

Derek

--
Derek Price                      CVS Solutions Architect ( http://CVSHome.org )
mailto:address@hidden     OpenAvenue ( http://OpenAvenue.com )
--
The cafeteria deep fryer is not a toy.
The cafeteria deep fryer is not a toy.
The cafeteria deep fryer is not a toy...

          - Bart Simpson on chalkboard, _The Simpsons_


? automake-1.4c-stamph.diff
? m4/acheader.m4.sav
? tests/stamph2.test
? tests/dirname.test
Index: ChangeLog
===================================================================
RCS file: /cvs/automake/ChangeLog,v
retrieving revision 1.963
diff -u -r1.963 ChangeLog
--- ChangeLog   2001/01/31 04:05:43     1.963
+++ ChangeLog   2001/01/31 19:10:27
@@ -1,3 +1,12 @@
+2001-01-31  Derek Price  <address@hidden>
+
+       * m4/header.m4 (AM_CONFIG_HEADERS): fix stamp-h creation to occur in
+       the correct locations
+       (_AM_DIRNAME): helper function which basically implements an sh
+       `dirname` in m4
+       * automake.in (scan_one_autoconf_file): change the warning exception
+       for AC_CONFIG_HEADERS to match the new m4/header.m4
+
 2001-01-30  Tom Tromey  <address@hidden>
 
        * automake.in (scan_one_autoconf_file): Don't mention
Index: automake.in
===================================================================
RCS file: /cvs/automake/automake.in,v
retrieving revision 1.839
diff -u -r1.839 automake.in
--- automake.in 2001/01/31 04:00:45     1.839
+++ automake.in 2001/01/31 19:10:31
@@ -4576,7 +4576,7 @@
        # means we are actually scanning AM_CONFIG_HEADER from
        # aclocal.m4.
        if (/A([CM])_CONFIG_HEADERS?\s*\((.*)\)/
-           && $2 ne '[$1]')
+           && $2 !~ /^_AM_File,/)
        {
            &am_conf_line_error
                ($filename, $., "\`automake requires \`AM_CONFIG_HEADER', not 
\`AC_CONFIG_HEADER'")
Index: m4/header.m4
===================================================================
RCS file: /cvs/automake/m4/header.m4,v
retrieving revision 1.7
diff -u -r1.7 header.m4
--- m4/header.m4        2000/08/06 12:36:53     1.7
+++ m4/header.m4        2001/01/31 19:10:31
@@ -1,3 +1,5 @@
+# AM_CONFIG_HEADER(HEADERS..., [COMMANDS], [INIT-CMDS])
+# -----------------------------------------------------
 # Like AC_CONFIG_HEADER, but automatically create stamp file.
 
 # serial 3
@@ -7,22 +9,33 @@
 # that is generated.  We must strip everything past the first ":",
 # and everything past the last "/".
 
-AC_PREREQ([2.12])
+AC_PREREQ([2.49c])
 
 AC_DEFUN([AM_CONFIG_HEADER],
-[AC_CONFIG_HEADER([$1])
-  AC_OUTPUT_COMMANDS(
-   ifelse(patsubst([$1], [[^ ]], []),
-         [],
-         [test -z "$CONFIG_HEADERS" || echo timestamp >dnl
-          patsubst([$1], [^\([^:]*/\)?.*], [\1])stamp-h]),
-  [am_indx=1
-  for am_file in $1; do
-    case " $CONFIG_HEADERS " in
-    *" $am_file "*)
-      echo timestamp > `echo $am_file | sed 
's%:.*%%;s%[^/]*$%%'`stamp-h$am_indx
-      ;;
-    esac
-    am_indx=\`expr \$am_indx + 1\`
-  done])
-])
+        [dnl init our file count if it isn't already
+        m4_ifndef([_AM_Config_Header_Index], 
m4_define([_AM_Config_Header_Index], [0]))
+        dnl prepare to store our destination file list for use in config.status
+        AC_FOREACH([_AM_File], [$1],
+                   [m4_pushdef([_AM_Dest], m4_patsubst(_AM_File, [:.*]))
+                   m4_define([_AM_Config_Header_Index], 
m4_incr(_AM_Config_Header_Index))
+                   dnl and add it to the list of files AC keeps track of, along
+                   dnl with our hook
+                   AC_CONFIG_HEADERS(_AM_File,
+dnl COMMANDS, [, INIT-CMDS]
+[# update the timestamp
+echo timestamp 
>"AS_ESCAPE(_AM_DIRNAME(]_AM_Dest[))/stamp-h]_AM_Config_Header_Index["
+][$2]m4_ifval([$3], [, [$3]]))dnl AC_CONFIG_HEADERS
+                   m4_popdef([_AM_Dest])])
+]) # AM_CONFIG_HEADER
+
+# _AM_DIRNAME(PATH)
+# -----------------
+# Like AS_DIRNAME, only do it during macro expansion
+AC_DEFUN([_AM_DIRNAME],
+        [m4_if(m4_regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
+        m4_if(m4_regexp([$1], [^//\([^/]\|$\)]), -1,
+              m4_if(m4_regexp([$1], [^/.*]), -1,
+                    [.],
+                    m4_patsubst([$1], [^\(/\).*], [\1])),
+              m4_patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
+        m4_patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))])
Index: tests/ChangeLog
===================================================================
RCS file: /cvs/automake/tests/ChangeLog,v
retrieving revision 1.326
diff -u -r1.326 ChangeLog
--- tests/ChangeLog     2001/01/29 09:41:43     1.326
+++ tests/ChangeLog     2001/01/31 19:10:31
@@ -1,3 +1,8 @@
+2001-01-31  Derek Price  <address@hidden>
+
+       * stamph2.test: new
+       * dirname.test: new
+
 2001-01-29  Akim Demaille  <address@hidden>
 
        * check.test: New.
Index: tests/Makefile.am
===================================================================
RCS file: /cvs/automake/tests/Makefile.am,v
retrieving revision 1.247
diff -u -r1.247 Makefile.am
--- tests/Makefile.am   2001/01/29 09:41:43     1.247
+++ tests/Makefile.am   2001/01/31 19:10:31
@@ -88,6 +88,7 @@
 depacl2.test \
 depend.test \
 depend3.test \
+dirname.test \
 discover.test \
 distdir.test \
 double.test \
@@ -226,6 +227,7 @@
 spell3.test \
 spelling.test \
 stamph.test \
+stamph2.test \
 stdlib.test \
 subdir.test \
 subdir2.test \
Index: tests/Makefile.in
===================================================================
RCS file: /cvs/automake/tests/Makefile.in,v
retrieving revision 1.311
diff -u -r1.311 Makefile.in
--- tests/Makefile.in   2001/01/29 09:41:43     1.311
+++ tests/Makefile.in   2001/01/31 19:10:32
@@ -157,6 +157,7 @@
 depacl2.test \
 depend.test \
 depend3.test \
+dirname.test \
 discover.test \
 distdir.test \
 double.test \
@@ -295,6 +296,7 @@
 spell3.test \
 spelling.test \
 stamph.test \
+stamph2.test \
 stdlib.test \
 subdir.test \
 subdir2.test \
--- /dev/null   Thu Aug 24 05:00:32 2000
+++ tests/dirname.test  Wed Jan 31 13:56:55 2001
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+# Test the operation of the _AM_DIRNAME macro from m4/header.m4
+
+. $srcdir/defs || exit 1
+
+cat > configure.in << 'END'
+AC_PLAIN_SCRIPT
+echo "1 /a/path/to/a/file      = _AM_DIRNAME([/a/path/to/a/file])"
+echo "2 another/path/to/a/file = _AM_DIRNAME([another/path/to/a/file])"
+echo "3 file                   = _AM_DIRNAME([file])"
+echo "4 //                     = _AM_DIRNAME([//])"
+echo "5 //file                 = _AM_DIRNAME([//file])"
+echo "6 /                      = _AM_DIRNAME([/])"
+echo "7 /file                  = _AM_DIRNAME([/file])"
+END
+
+# Fail gracefully if no autoconf.
+(autoconf --version) > /dev/null 2>&1 || exit 77
+
+# Fail gracefully if no GNU diff
+(diff --version) > /dev/null 2>&1 || exit 77
+
+$ACLOCAL || exit 1
+autoconf || exit 1
+./configure >got || exit 1
+
+cat >wanted <<EOF
+1 /a/path/to/a/file      = /a/path/to/a
+2 another/path/to/a/file = another/path/to/a
+3 file                   = .
+4 //                     = //
+5 //file                 = //
+6 /                      = /
+7 /file                  = /
+EOF
+
+diff got wanted || exit 1
+
+exit 0
+
--- /dev/null   Thu Aug 24 05:00:32 2000
+++ tests/stamph2.test  Wed Jan 31 13:31:57 2001
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+# Make sure stamp-h* files are created where we expect
+
+. $srcdir/defs || exit 1
+
+cat > configure.in << 'END'
+AC_INIT(Makefile.am)
+AM_INIT_AUTOMAKE(nonesuch, nonesuch)
+AM_CONFIG_HEADER(firstfile.h sdir/secondfile.h thirdfile.h)
+AC_OUTPUT(Makefile)
+END
+
+: > Makefile.am
+mkdir sdir
+: > firstfile.h.in
+: > sdir/secondfile.h.in
+: > thirdfile.h.in
+
+# Fail gracefully if no autoconf.
+(autoconf --version) > /dev/null 2>&1 || exit 77
+
+$ACLOCAL || exit 1
+autoconf || exit 1
+$AUTOMAKE || exit 1
+./configure || exit 1
+
+(test -f stamp-h1 && test -f sdir/stamp-h2 && test -f stamp-h3) || exit 1
+exit 0

reply via email to

[Prev in Thread] Current Thread [Next in Thread]