aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2001-06-08 00:49:17 +0000
committerRoland McGrath <roland@gnu.org>2001-06-08 00:49:17 +0000
commit2405ef9a4e44e7423f9c3debfec2a5d9b06c15ff (patch)
tree62568dac635a0edd5265e791d5bbdff1461da469
parent1a10fa88882c793dd77cb11a2c70760a970ffbec (diff)
downloadmig-2405ef9a4e44e7423f9c3debfec2a5d9b06c15ff.tar.gz
mig-2405ef9a4e44e7423f9c3debfec2a5d9b06c15ff.tar.bz2
mig-2405ef9a4e44e7423f9c3debfec2a5d9b06c15ff.zip
2001-06-07 Roland McGrath <roland@frob.com>
* header.c (WriteRoutineList): New function. * write.h: Declare it. * migcom.c (RoutineListFileName): New variable. (parseArgs): New option -list to set it. (main): If set, write the named output file with WriteRoutineList. * mig.in: Grok -list and put it in the usage message. * global.c (DefaultFiles): New variable, boolean initialized to true. (more_global): Leave null file name variables alone if it's false. * global.h (DefaultFiles): Declare it. * migcom.c (parseArgs): New option -n clears it. * mig.in: Grok -n (pass it through) and put it in the usage message.
-rw-r--r--mig.in7
-rw-r--r--migcom.c22
2 files changed, 28 insertions, 1 deletions
diff --git a/mig.in b/mig.in
index a6d02fc..e268577 100644
--- a/mig.in
+++ b/mig.in
@@ -72,6 +72,8 @@ which Mach RPC stubs from \`.defs' files.
-server FILE generate server stubs in FILE
-user FILE generate user stubs in FILE
-header FILE generate stub header file in FILE
+ -list FILE generate list of RPC names and message IDs in FILE
+ -n suppress default output file names, create only given files
-migcom use migcom instead of CPP
Any switches not listed are passed on to the preprocessor, invoked by:
@@ -80,13 +82,14 @@ Any switches not listed are passed on to the preprocessor, invoked by:
Report bugs to <bug-hurd@gnu.org>. Request assistance at <help-hurd@gnu.org>.\
"; exit 0 ;;
- -[qQvVtTrRsS] ) migflags="$migflags $1"; shift;;
+ -[qQvVtTrRsSn] ) migflags="$migflags $1"; shift;;
-i ) sawI=1; migflags="$migflags $1 $2"; shift; shift;;
-user ) user="$2"; if [ ! "${sawI-}" ]; then migflags="$migflags $1 $2"; fi; shift; shift;;
-server ) server="$2"; migflags="$migflags $1 $2"; shift; shift;;
-header ) header="$2"; migflags="$migflags $1 $2"; shift; shift;;
-sheader ) sheader="$2"; migflags="$migflags $1 $2"; shift; shift;;
-iheader ) iheader="$2"; migflags="$migflags $1 $2"; shift; shift;;
+ -list ) list="$2"; migflags="$migflags $1 $2"; shift; shift;;
-prefix | -subrprefix ) migflags="$migflags $1 $2"; shift; shift;;
-MD ) sawMD=1; cppflags="$cppflags $1"; shift;;
@@ -125,6 +128,8 @@ do
if [ "$rsheader" != /dev/null ]; then deps="$deps $rsheader"; fi
riheader="${iheader-/dev/null}"
if [ "$riheader" != /dev/null ]; then deps="$deps $riheader"; fi
+ rlist="${list-/dev/null}"
+ if [ "$rlist" != /dev/null ]; then deps="$deps $rlist"; fi
sed 's%^[^:]*:%'"${deps}"':%' <"${base}.d" >"${base}-mig.d"
rm -f ${base}.d
fi
diff --git a/migcom.c b/migcom.c
index 14b9dd6..db04455 100644
--- a/migcom.c
+++ b/migcom.c
@@ -80,6 +80,8 @@
extern int yyparse();
static FILE *myfopen(const char *name, const char *mode);
+static string_t RoutineListFileName;
+
static void
parseArgs(int argc, char **argv)
{
@@ -88,6 +90,9 @@ parseArgs(int argc, char **argv)
{
switch (argv[0][1])
{
+ case 'n':
+ DefaultFiles = FALSE;
+ break;
case 'q':
BeQuiet = TRUE;
break;
@@ -106,6 +111,15 @@ parseArgs(int argc, char **argv)
case 'R':
UseMsgRPC = FALSE;
break;
+ case 'l':
+ if (streql(argv[0], "-list"))
+ {
+ --argc; ++argv;
+ if (argc == 0)
+ fatal("missing name for -list option");
+ RoutineListFileName = strmake(argv[0]);
+ }
+ break;
case 's':
if (streql(argv[0], "-server"))
{
@@ -272,6 +286,14 @@ main(int argc, char **argv)
}
WriteServer(server, StatementList);
fclose(server);
+
+ if (RoutineListFileName != strNULL)
+ {
+ FILE *listfile = myfopen (RoutineListFileName, "w");
+ WriteRoutineList (listfile, StatementList);
+ fclose (listfile);
+ }
+
if (BeVerbose)
printf("done.\n");