]> granicus.if.org Git - postgresql/commitdiff
Add ecpg --help and --version. Renumber the exit status codes, which were
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 24 Aug 2001 22:37:36 +0000 (22:37 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
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 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/ecpg-ref.sgml,v 1.8 2001/07/11 03:43:52 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/ecpg-ref.sgml,v 1.9 2001/08/24 22:37:36 petere Exp $
 Postgres documentation
 -->
 
@@ -116,7 +116,7 @@ ecpg [ -v ] [ -t ] [ -I include-path ] [ -o outfile ]  file1 [ file2 ] [ ... ]
       <term><replaceable>return value</replaceable></term>
       <listitem>
        <para>
-       <application>ecpg</application> returns 0 to the shell on successful completion, -1
+       <application>ecpg</application> returns 0 to the shell on successful completion, non-zero
        for errors.
        </para>
       </listitem>
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 <meskes@postgresql.org> 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 <pgsql-bugs@postgresql.org>.\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