]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Delete output files if this is a failed run.
authoricculus <icculus@noemail.net>
Sun, 14 Feb 2010 05:34:42 +0000 (05:34 +0000)
committericculus <icculus@noemail.net>
Sun, 14 Feb 2010 05:34:42 +0000 (05:34 +0000)
Otherwise, the fail will stop a Makefile from progressing, but if you
immediately run the build again, Make will think the output files are up to
date, since they are newer (albeit incomplete/incorrect).

FossilOrigin-Name: e38c08d9cdeb0476ac1a77cd3f29f547a8205835

manifest
manifest.uuid
tool/lemon.c

index 5c245639b9741e490a9a6e5363a99f36c695f535..765c370c6d63fbf8fc560fa7ab4387095345d951 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----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
@@ -765,7 +765,7 @@ F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
 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
@@ -790,24 +790,24 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 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-----
index fa1d380a462611165a7b22e8df09af513f70c33d..e88807a700ccf0fe738fdaee35a9bc3a22c4e932 100644 (file)
@@ -1 +1 @@
-d8bab8cf0bc3fbd4c489c31a65d724dda2944d83
\ No newline at end of file
+e38c08d9cdeb0476ac1a77cd3f29f547a8205835
\ No newline at end of file
index 122ab970c53a4eadd91b362f061af140b1c0cd33..4a3bfa1871d568b3638802825c2d00aec09ac381 100644 (file)
@@ -34,6 +34,24 @@ extern int access();
 #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*));
 
 /*
@@ -1470,6 +1488,8 @@ char **argv;
   int exitcode;
   struct lemon lem;
 
+  atexit(LemonAtExit);
+
   OptInit(argv,options,stderr);
   if( version ){
      printf("Lemon version 1.0\n");
@@ -1576,6 +1596,7 @@ char **argv;
 
   /* 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);
 }
@@ -2831,6 +2852,24 @@ char *mode;
     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;
 }