-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
-C Added\s%expect\sdirective,\sto\sconsider\sa\scertain\snumber\sof\sconflicts\s"correct."\n\nThis\shas\sthe\sside\seffect\sof\schanging\sthe\sprocess\sexit\scode\sto\snever\soverflow.
-D 2010-02-14T05:19:56
+C Delete\soutput\sfiles\sif\sthis\sis\sa\sfailed\srun.\n\nOtherwise,\sthe\sfail\swill\sstop\sa\sMakefile\sfrom\sprogressing,\sbut\sif\syou\nimmediately\srun\sthe\sbuild\sagain,\sMake\swill\sthink\sthe\soutput\sfiles\sare\sup\sto\ndate,\ssince\sthey\sare\snewer\s(albeit\sincomplete/incorrect).
+D 2010-02-14T05:34:43
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5
-F tool/lemon.c 415104859db0e4badd3571dee4a60582297ebaaa
+F tool/lemon.c 83edd1726151a939d0e5f4d30d1775b53196a42e
F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
F tool/mkkeywordhash.c d2e6b4a5965e23afb80fbe74bb54648cd371f309
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P e6cbe1e5ee80db282a41951b805b7bd8b13adf28
-R a52aa69eba0e0915125e4230ac657715
+P d8bab8cf0bc3fbd4c489c31a65d724dda2944d83
+R f18701bb0bf4342a5fa49e46ec7b784c
U icculus
-Z f5a330aab159045deb825a581ad23995
+Z 9daac77a325dba22777be0affa01d6ac
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.14 (Darwin)
-iQIcBAEBAgAGBQJLd4gDAAoJEDDcKcGyC63VQkkQAJmHE1TfQc5uu5XhBLZ+kexv
-dZ1QOkvx9yV2mX+2GG1QZgQpUaYaBIaP7rRtFuIZN+I8sqkcFxjG9SARWEYArtJj
-udPUnNn6CVmsp7isbBZYBDw2UhsH0B00uOQvxCdEDT36MUjtkxjiM2T1M8lp+aAH
-jmxilkTSVojq6WJE1/oTVNcMSJnNaEI7fi0GvmBzaxOGalxis8miiBwpVv/3CY39
-chkrTITynbJtwGMoUikNLlVYfuXAfTDBAQYAZT5b50QAYfA/S5l9g+C3KMY9ffNa
-XZwBZu9DCBtdv57D8koUoCYcA0bUr9dyT6GrTgJORq5ePqtoXU2rLB3F1ckkuN2a
-hkScfFj8TjYsik1Oou8GvN5CtUihq1ekCUFyh/M+vLHFbLVge+zgUNO57s3mK7e7
-D+2y9HcY2txBptzjMkNuZgV4DzIqAhjHIK9JmbR/oO2w+NAiYw3wfBiMOEq5kDKT
-X1u2kOEKFaJhOaGIYnCIjHH3yc9bqzHPIyrwpBoyjtqZnsQbnZZP7hZ2hmjKVXoT
-O0EQmNsxQw4z6/EFx2/OPr1IhIKON7rwIl2mb1hWczA1GDroNVi+zRDkabMCAWik
-Fwxwnf4IJsAgd4v8JQi22h+EudRP9s/O24MModCsahBX1xkQKoL3poXEQyYAE0Ki
-Fg8EO6hKudpsXjb09VvE
-=XLI+
+iQIcBAEBAgAGBQJLd4t3AAoJEDDcKcGyC63VLIsP/15NDKg2Ow3n6Mzn9T43RYF3
++qMDlBmmS80bYCLjVwuJNTU2EDTEw5/qCrcpnS3pqPtBwObVrA934v9Q9wZFMY/a
+zhrNgnduUl/KIvYQkdJWgi8GFUn7zOJzkeZeZnW2Qx0QIlN+cNRucpnrG292CnWK
+9Xa/jHD6eiv1Zdi4mhkcP/bISERHQk7Wf5KoCZOw7K/yHECnc2dV8jnzk19gGzBV
+Z9MHC6WwSwuPGulizlvG/huIn53aWLAXnWr3IMnKOHdMii0eTvRfUu7KQN80zi54
+CBolUPlV3aJt14DvZm+FRqxnoZ0NW67MjwlU1dL/zxnciVXZhJyE4DDfYkAia341
+2QVRuKu8KurxWfR7hFDtCKX9MvGpmeyAGUN//njr7mZl/dgIS/h1tJmIW2qQ5aAv
+S71Q0Pos6wTFuhDptpC/vJWQjb+2fuxU4WjTXpUXYq0UuObUjBu0CIZPG/q3tQOT
+JB0iSqWCBY3twHh7K1koUK4tQDE75ILLSTxxXDdWls3bAdSadGUF4lgnXNaCtElc
+3N8vuzr8YfssaLWqENp6pNIKLJNJUiRk4DxFuQfOxoCi1iHT0JLZqe1FSdjaZJWK
+YXzv0N/fhbqQ/EZyqcLro3lMU6iWCZTvemp/fjFCp5rcm9czvsFcHLODoKL5YqkN
+wxWpwAcL7ybFSMVfhJRE
+=otDK
-----END PGP SIGNATURE-----
#define MAXRHS 1000
#endif
+static const char **made_files = NULL;
+static int made_files_count = 0;
+static int successful_exit = 0;
+static void LemonAtExit(void)
+{
+ /* if we failed, delete (most) files we made, to unconfuse build tools. */
+ int i;
+ for (i = 0; i < made_files_count; i++) {
+ if (!successful_exit) {
+ remove(made_files[i]);
+ }
+ free((void *) made_files[i]);
+ }
+ free(made_files);
+ made_files_count = 0;
+ made_files = NULL;
+}
+
static char *msort(char*,char**,int(*)(const char*,const char*));
/*
int exitcode;
struct lemon lem;
+ atexit(LemonAtExit);
+
OptInit(argv,options,stderr);
if( version ){
printf("Lemon version 1.0\n");
/* return 0 on success, 1 on failure. */
exitcode = ((lem.errorcnt > 0) || (lem.nconflict != lem.nexpected)) ? 1 : 0;
+ successful_exit = (exitcode == 0);
exit(exitcode);
return (exitcode);
}
lemp->errorcnt++;
return 0;
}
+
+ /* Add files we create to a list, so we can delete them if we fail. This
+ ** is to keep makefiles from getting confused. We don't include .out files,
+ ** though: this is debug information, and you don't want it deleted if there
+ ** was an error you need to track down.
+ */
+ if(( *mode=='w' ) && (strcmp(suffix, ".out") != 0)){
+ const char **ptr = (const char **)
+ realloc(made_files, sizeof (const char **) * (made_files_count + 1));
+ char *fname = strdup(lemp->outname);
+ if ((ptr == NULL) || (fname == NULL)) {
+ free(ptr);
+ free(fname);
+ memory_error();
+ }
+ made_files = ptr;
+ made_files[made_files_count++] = fname;
+ }
return fp;
}