Add -C dir and -M options to %GNUconfigure.
authorjbj <devnull@localhost>
Tue, 20 Apr 1999 22:45:52 +0000 (22:45 +0000)
committerjbj <devnull@localhost>
Tue, 20 Apr 1999 22:45:52 +0000 (22:45 +0000)
CVS patchset: 3024
CVS date: 1999/04/20 22:45:52

docs/macros
lib/macro.c
macros.in
rpmio/macro.c

index 38777b7..4fcbfd1 100644 (file)
@@ -28,7 +28,7 @@ a macro invocation.  While a parameterized macro is being expanded, the
 following shell-like macros are available:
 
        %0      the name of the macro being invoked
-       %*      all arguments
+       %*      all arguments (unlike shell, not including any processed flags)
        %#      the number of arguments
        %{-f}   if present at invocation, the flag f itself
        %{-f*}  if present at invocation, the argument to flag f
index 0e7d2ea..5d1a71a 100644 (file)
@@ -617,8 +617,10 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
        argc++;
     }
 
+#if 0  /* XXX this is shell syntax, macros need !* to be "the rest" */
     /* Add unexpanded args as macro */
     addMacro(mb->mc, "*", NULL, b, mb->depth);
+#endif
 
 #ifdef NOTYET
     /* XXX if macros can be passed as args ... */
@@ -658,7 +660,7 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
     optv[0] = me->name;
     optv[opte] = NULL;
 
-    /* ... and finally copy the options */
+    /* ... and finally define option macros. */
     optind = 0;
     optc = 0;
     optc++;    /* XXX count optv[0] */
@@ -683,15 +685,28 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
        optc++;
     }
 
+    /* Add macro for each arg. Concatenate args for !* */
+    b = be;
     for (c = optind; c < argc; c++) {
        sprintf(aname, "%d", (c - optind + 1));
        addMacro(mb->mc, aname, NULL, argv[c], mb->depth);
+
+       if (be > b) *be++ = ' ';
+       strcpy(be, argv[c]);
+       be += strlen(be);
+       *be = '\0';
+
        optv[optc] = argv[c];
        optc++;
     }
+
+    /* Add arg count as macro */
     sprintf(aname, "%d", (argc - optind + 1));
     addMacro(mb->mc, "#", NULL, aname, mb->depth);
 
+    /* Add unexpanded args as macro */
+    addMacro(mb->mc, "*", NULL, b, mb->depth);
+
     return se;
 }
 
@@ -1379,8 +1394,7 @@ rpmGetPath(const char *path, ...)
 
 #ifdef DEBUG_MACROS
 
-MacroContext mc = { NULL, 0, 0};
-char *macrofiles = "../macros";
+char *macrofiles = "../macros:./testmacros";
 char *testfile = "./test";
 
 int
@@ -1390,13 +1404,13 @@ main(int argc, char *argv[])
        FILE *fp;
        int x;
 
-       initMacros(&mc, macrofiles);
-       dumpMacroTable(&mc, NULL);
+       initMacros(NULL, macrofiles);
+       dumpMacroTable(NULL, NULL);
 
        if ((fp = fopen(testfile, "r")) != NULL) {
                while(fgets(buf, sizeof(buf), fp)) {
                        buf[strlen(buf)-1] = '\0';
-                       x = expandMacros(NULL, &mc, buf, sizeof(buf));
+                       x = expandMacros(NULL, NULL, buf, sizeof(buf));
                        fprintf(stderr, "%d->%s\n", x, buf);
                        memset(buf, 0, sizeof(buf));
                }
@@ -1405,7 +1419,7 @@ main(int argc, char *argv[])
 
        while(fgets(buf, sizeof(buf), stdin)) {
                buf[strlen(buf)-1] = '\0';
-               x = expandMacros(NULL, &mc, buf, sizeof(buf));
+               x = expandMacros(NULL, NULL, buf, sizeof(buf));
                fprintf(stderr, "%d->%s\n <-\n", x, buf);
                memset(buf, 0, sizeof(buf));
        }
index 8d804d1..46cd6d3 100644 (file)
--- a/macros.in
+++ b/macros.in
@@ -1,4 +1,4 @@
-# $Id: macros.in,v 1.23 1999/04/20 18:21:08 jbj Exp $
+# $Id: macros.in,v 1.24 1999/04/20 22:45:52 jbj Exp $
 #==============================================================================
 # Macro naming conventions (preliminary):
 #
 # The GNUconfigure macro does the following:
 #      update config.guess and config.sub.
 #      regenerate all autoconf/automake files
+#      optionally change to a directory (make the directory if requested).
 #      run configure with correct prefix, platform, and CFLAGS.
+#      optionally restore current directory.
 #
-%GNUconfigure  \
+%GNUconfigure(MC:)     \
   %{__libtoolize} --copy --force \
   %{__aclocal} \
   %{__autoheader} \
   %{__automake} \
   %{__autoconf} \
-  CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix}
+  %{-C:_mydir="`pwd`"; %{-M; %{__mkdirp} %{-C*};} cd %{-C*}} \
+  CFLAGS="%{optflags}" %{-C:${_mydir}}%{!-C:.}/configure %{_target_platform} --prefix=%{_prefix} !*
+  %{-C:cd ${_mydir}; unset _mydir}
index 0e7d2ea..5d1a71a 100644 (file)
@@ -617,8 +617,10 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
        argc++;
     }
 
+#if 0  /* XXX this is shell syntax, macros need !* to be "the rest" */
     /* Add unexpanded args as macro */
     addMacro(mb->mc, "*", NULL, b, mb->depth);
+#endif
 
 #ifdef NOTYET
     /* XXX if macros can be passed as args ... */
@@ -658,7 +660,7 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
     optv[0] = me->name;
     optv[opte] = NULL;
 
-    /* ... and finally copy the options */
+    /* ... and finally define option macros. */
     optind = 0;
     optc = 0;
     optc++;    /* XXX count optv[0] */
@@ -683,15 +685,28 @@ grabArgs(MacroBuf *mb, const MacroEntry *me, const char *se)
        optc++;
     }
 
+    /* Add macro for each arg. Concatenate args for !* */
+    b = be;
     for (c = optind; c < argc; c++) {
        sprintf(aname, "%d", (c - optind + 1));
        addMacro(mb->mc, aname, NULL, argv[c], mb->depth);
+
+       if (be > b) *be++ = ' ';
+       strcpy(be, argv[c]);
+       be += strlen(be);
+       *be = '\0';
+
        optv[optc] = argv[c];
        optc++;
     }
+
+    /* Add arg count as macro */
     sprintf(aname, "%d", (argc - optind + 1));
     addMacro(mb->mc, "#", NULL, aname, mb->depth);
 
+    /* Add unexpanded args as macro */
+    addMacro(mb->mc, "*", NULL, b, mb->depth);
+
     return se;
 }
 
@@ -1379,8 +1394,7 @@ rpmGetPath(const char *path, ...)
 
 #ifdef DEBUG_MACROS
 
-MacroContext mc = { NULL, 0, 0};
-char *macrofiles = "../macros";
+char *macrofiles = "../macros:./testmacros";
 char *testfile = "./test";
 
 int
@@ -1390,13 +1404,13 @@ main(int argc, char *argv[])
        FILE *fp;
        int x;
 
-       initMacros(&mc, macrofiles);
-       dumpMacroTable(&mc, NULL);
+       initMacros(NULL, macrofiles);
+       dumpMacroTable(NULL, NULL);
 
        if ((fp = fopen(testfile, "r")) != NULL) {
                while(fgets(buf, sizeof(buf), fp)) {
                        buf[strlen(buf)-1] = '\0';
-                       x = expandMacros(NULL, &mc, buf, sizeof(buf));
+                       x = expandMacros(NULL, NULL, buf, sizeof(buf));
                        fprintf(stderr, "%d->%s\n", x, buf);
                        memset(buf, 0, sizeof(buf));
                }
@@ -1405,7 +1419,7 @@ main(int argc, char *argv[])
 
        while(fgets(buf, sizeof(buf), stdin)) {
                buf[strlen(buf)-1] = '\0';
-               x = expandMacros(NULL, &mc, buf, sizeof(buf));
+               x = expandMacros(NULL, NULL, buf, sizeof(buf));
                fprintf(stderr, "%d->%s\n <-\n", x, buf);
                memset(buf, 0, sizeof(buf));
        }