With all the good changes to lemon recently, I thought I'd post changes that I
have made to my personal copy. One of my customers requires that I demonstrate
the version of all build tools I use at build time, so I added a few command
line parameters to help with that.
It would be nice if the version identifier for lemon would increment as it
matures, but I understand why it doesn't currently increment. It doesn't make
sense to tie the version of lemon.exe to sqlite3.exe. I've toyed with using
the build script to query fossil finfo lemon.c --limit 1 and use the artifact
id or version id to uniquely identify a particular lemon build.
RW
Ron Wilson, Engineering Project Lead
(o) 434.455.6453, (m) 434.851.1612, www.harris.com
project-name: SQLite
repository: C:/rev/fossil/sqlite3.f
local-root: C:/rev/src/sqlite3/
user-home: C:/Documents and Settings/ma088024/Application Data
project-code: 2ab58778c2967968b94284e989e43dc11791f548
server-code: dcd2b579c69c56d9973f76b372db9806df4a3252
checkout: 1e8b842039cc06b57a321226633c55b94eb8dcd7 2010-02-22 19:37:44 UTC
parent: a8076aede33c07e9a2aaa05be8a888f37b45e41c 2010-02-22 19:32:32 UTC
parent: 721f33e7221c5fc907e9e293ac3242843f4fcfb7 2010-02-17 20:31:32 UTC
tags: trunk
--- lemon.c
+++ lemon.c
@@ -4,10 +4,13 @@
** single file to make it easy to include LEMON in the source tree
** and Makefile of another program.
**
** The author of this program disclaims copyright.
*/
+
+#define SZVERSION "1.0"
+
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
@@ -99,10 +102,11 @@
enum option_type type;
const char *label;
char *arg;
const char *message;
};
+void OptVersion(void);
int OptInit(char**,struct s_options*,FILE*);
int OptNArgs(void);
char *OptArg(int);
void OptErr(int);
void OptPrint(void);
@@ -1395,10 +1399,12 @@
}
/* The main program. Parse the command line and do it... */
int main(int argc, char **argv)
{
+ static int help = 0;
+ static int versiononly = 0;
static int version = 0;
static int rpflag = 0;
static int basisflag = 0;
static int compress = 0;
static int quiet = 0;
@@ -1409,31 +1415,46 @@
{OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},
{OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
{OPT_FSTR, "D", (char*)handle_D_option, "Define an %ifdef macro."},
{OPT_FSTR, "T", (char*)handle_T_option, "Specify a template file."},
{OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."},
+ {OPT_FLAG, "h", (char*)&help, "Print this help message."},
{OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file."},
{OPT_FLAG, "l", (char*)&nolinenosflag, "Do not print #line statements."},
{OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
{OPT_FLAG, "s", (char*)&statistics,
"Print parser stats to standard output."},
- {OPT_FLAG, "x", (char*)&version, "Print the version number."},
+ {OPT_FLAG, "v", (char*)&version, "Print the version number and continue."},
+ {OPT_FLAG, "x", (char*)&versiononly, "Print the version number and exit."},
{OPT_FLAG,0,0,0}
};
int i;
int exitcode;
struct lemon lem;
atexit(LemonAtExit);
OptInit(argv,options,stderr);
+
+ if ( help ) {
+ OptVersion();
+ printf("Valid command line options are:\n");
+ OptPrint();
+ exit(0);
+ }
+ if( versiononly ){
+ OptVersion();
+ exit(0);
+ }
if( version ){
- printf("Lemon version 1.0\n");
- exit(0);
+ OptVersion();
}
if( OptNArgs()!=1 ){
fprintf(stderr,"Exactly one filename argument is required.\n");
+ OptVersion();
+ printf("Valid command line options are:\n");
+ OptPrint();
exit(1);
}
memset(&lem, 0, sizeof(lem));
lem.errorcnt = 0;
@@ -1821,10 +1842,15 @@
(*(void(*)(char *))(op[j].arg))(sv);
break;
}
}
return errcnt;
+}
+
+void OptVersion()
+{
+ printf("Lemon version %s\n", SZVERSION);
}
int OptInit(char **a, struct s_options *o, FILE *err)
{
int errcnt = 0;
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users