Add ecpg --help and --version. Renumber the exit status codes, which were

documented wrong.
This commit is contained in:
Peter Eisentraut 2001-08-24 22:37:36 +00:00
parent 9cf701f324
commit 7e20c35e1c
3 changed files with 67 additions and 25 deletions

View 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>

View 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"
@ -10,9 +12,12 @@
#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]"
"[-d] "
#else
""
#endif
" [-v] [-t] [-I include path] [ -o output file name] [-D define name] file1 [file2] ...\n", progname);
);
printf("Options:\n");
#ifdef YYDEBUG
printf(" -d generate parser debug output\n");
#endif
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

View 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