Add ecpg --help and --version. Renumber the exit status codes, which were
authorPeter Eisentraut
Fri, 24 Aug 2001 22:37:36 +0000 (22:37 +0000)
committerPeter Eisentraut
Fri, 24 Aug 2001 22:37:36 +0000 (22:37 +0000)
documented wrong.

doc/src/sgml/ref/ecpg-ref.sgml
src/interfaces/ecpg/preproc/ecpg.c
src/interfaces/ecpg/preproc/extern.h

index 2840d38c733a5889f7b1f6a16a5361e678f1c412..83128c23648b7978a61a4bb311b5e6d698194da6 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -116,7 +116,7 @@ ecpg [ -v ] [ -t ] [ -I include-path ] [ -o outfile ]  file1 [ file2 ] [ ... ]
       return value
       
        
-   ecpg returns 0 to the shell on successful completion, -1
+   ecpg returns 0 to the shell on successful completion, non-zero
    for errors.
        
       
index e2eccf41fd71ca3e02177438098e0cef56ba9d47..bf0dd18d68055e236f4a4c1588c0a2e96d717246 100644 (file)
@@ -1,6 +1,8 @@
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.47 2001/08/24 22:37:36 petere Exp $ */
+
 /* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
 /* (C) Michael Meskes  Feb 5th, 1998 */
-/* Placed under the same copyright as PostgresSQL */
+/* Placed under the same license as PostgresSQL */
 
 #include "postgres_fe.h"
 
 #include "getopt.h"
 #endif
 
+extern int optind;
+extern char *optarg;
+
 #include "extern.h"
 
-int            ret_value = OK,
+int            ret_value = 0,
            autocommit = 0;
 struct _include_path *include_paths = NULL;
 struct cursor *cur = NULL;
@@ -20,14 +25,29 @@ struct typedefs *types = NULL;
 struct _defines *defines = NULL;
 
 static void
-usage(char *progname)
+help(const char *progname)
 {
-   fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
-   fprintf(stderr, "Usage: %s: "
+   printf("%s is the PostgreSQL embedded SQL preprocessor for C programs.\n\n",
+          progname);
+   printf("Usage:\n"
+          "  %s %s[-I DIRECTORY] [-o OUTFILE] [-t] file1 [file2...]\n\n",
+          progname,
+#ifdef YYDEBUG
+          "[-d] "
+#else
+          ""
+#endif
+       );
+   printf("Options:\n");
 #ifdef YYDEBUG
-           "[-d]"
+   printf("  -d                   generate parser debug output\n");
 #endif
-           " [-v] [-t] [-I include path] [ -o output file name] [-D define name] file1 [file2] ...\n", progname);
+   printf("  -I DIRECTORY         search DIRECTORY for include files\n");
+   printf("  -o OUTFILE           write result to OUTFILE\n");
+   printf("  -t                   turn on autocommit of transactions\n");
+   printf("\nIf no output file is specified, the name is formed by adding .c\n"
+          "to the input file name, after stripping off .pgc if present.\n");
+   printf("\nReport bugs to .\n");
 }
 
 static void
@@ -60,9 +80,27 @@ main(int argc, char *const argv[])
                verbose = false,
                out_option = 0;
    struct _include_path *ip;
+   char       *progname;
 
-   extern int  optind;
-   extern char *optarg;
+   if (!strrchr(argv[0], '/'))
+       progname = argv[0];
+   else
+       progname = strrchr(argv[0], '/') + 1;
+
+   if (argc > 1)
+   {
+       if (strcmp(argv[1], "--help")==0 || strcmp(argv[1], "-?")==0)
+       {
+           help(progname);
+           exit(0);
+       }
+       else if (strcmp(argv[1], "--version")==0)
+       {
+           printf("ecpg (PostgreSQL %s) %d.%d.%d\n", PG_VERSION,
+                  MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
+           exit(0);
+       }
+   }
 
    add_include_path("/usr/include");
    add_include_path(INCLUDE_PATH);
@@ -90,32 +128,38 @@ main(int argc, char *const argv[])
                verbose = true;
                break;
            case 'D':
+               /* XXX not documented */
                add_preprocessor_define(optarg);
                break;
-#ifdef YYDEBUG
            case 'd':
+#ifdef YYDEBUG
                yydebug = 1;
-               break;
+#else
+               fprintf(stderr, "%s: parser debug support (-d) not available\n",
+                       progname);
 #endif
+               break;
            default:
-               usage(argv[0]);
+               fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]);
                return ILLEGAL_OPTION;
        }
    }
 
    if (verbose)
    {
-       fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
+       fprintf(stderr, "%s, the PostgreSQL embedded C preprocessor, version %d.%d.%d\n",
+               progname, MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
        fprintf(stderr, "exec sql include ... search starts here:\n");
        for (ip = include_paths; ip != NULL; ip = ip->next)
            fprintf(stderr, " %s\n", ip->path);
-       fprintf(stderr, "End of search list.\n");
-       return OK;
+       fprintf(stderr, "end of search list\n");
+       return 0;
    }
 
    if (optind >= argc)         /* no files specified */
    {
-       usage(argv[0]);
+       fprintf(stderr, "%s: no input files specified\n", progname);
+       fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]);
        return (ILLEGAL_OPTION);
    }
    else
index a6813c23795804a8926edb37be0a360a62aa3743..43cfd086c5a5b38bd6914bc7b79ffb9f9dd1af82 100644 (file)
@@ -80,10 +80,8 @@ extern ScanKeyword *ScanKeywordLookup(char *text);
 
 /* return codes */
 
-#define OK          0
-#define PARSE_ERROR        -1
-#define ILLEGAL_OPTION     -2
-#define INDICATOR_NOT_ARRAY -3
-
-#define NO_INCLUDE_FILE        ENOENT
-#define OUT_OF_MEMORY      ENOMEM
+#define ILLEGAL_OPTION     1
+#define NO_INCLUDE_FILE        2
+#define PARSE_ERROR            3
+#define INDICATOR_NOT_ARRAY 4
+#define OUT_OF_MEMORY      5