summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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");