]> pd.if.org Git - zpackage/blobdiff - zpm-script.c
fix compile process for elf programs
[zpackage] / zpm-script.c
index 438cf50099a8e99d243e29dcb107dd95ad8ec9df..7c03b241792ae1f91ea504215b1400526580c71b 100644 (file)
  */
 
 void usage(void) {
-       fprintf(stderr, "usage: db hash file\n");
+       fprintf(stderr, "usage: zpm script ...\n");
 }
 
 int setdir(char *rootdir) {
+       if (chdir(rootdir ? rootdir : "/") == -1) {
+               perror("can not chdir to rootdir");
+               return 0;
+       }
+#if 0
        if (rootdir && strcmp(rootdir, "/")) {
-               if (chdir(rootdir) == -1) {
-                       perror("can not chdir to rootdir");
-                       return 0;
-               }
                if (geteuid() == 0) {
                        /* chroot is deprecated, and not in posix.  need to use
                         * OS/kernel specific code.
@@ -43,12 +44,8 @@ int setdir(char *rootdir) {
                } else {
                        fprintf(stderr, "unable to chroot as non root user\n");
                }
-       } else {
-               if (chdir("/") == -1) {
-                       perror("can not chdir to /");
-                       return 0;
-               }
        }
+#endif
        return 1;
 }
 
@@ -119,6 +116,12 @@ int run(char *program, char **args, char *output, int *status) {
 #define SOFT 1
 #define HARD 2
 
+static int list_scripts(void *ud, const char *pkg, const char *stage,
+               const char *hash) {
+       printf("%s %s %.8s\n", pkg, stage, hash);
+       return 0;
+}
+
 int main(int ac, char **av){
        struct zpm zpm;
        int rv;
@@ -133,14 +136,14 @@ int main(int ac, char **av){
        char *pkgid;
 
        char *rootdir = 0;
-       char *db = "/var/lib/zpm/zpm.db";
+       char *db = "/var/lib/zpm/local.db";
        char *script = "/var/tmp/zpm-script";
        char *output = "/var/tmp/zpm-script.out";
        char *phase = 0;
+       char *envvar = 0;
        int quiet = 0;
        int scriptishash = 0;
        int mode = RUN;
-       int all = 0;
 
        if (getenv("ZPMDB")) {
                db = getenv("ZPMDB");
@@ -149,6 +152,16 @@ int main(int ac, char **av){
 
        rootdir = getenv("ZPM_ROOT_DIR");
 
+       envvar = getenv("ZPM_SCRIPT_FILE");
+       if (envvar) {
+               script = envvar;
+       }
+
+       envvar = getenv("ZPM_SCRIPT_OUTPUT");
+       if (envvar) {
+               output = envvar;
+       }
+
        /* run, set, show, hash */
        /* set -S, if -H set the hash, output hash, unless quiet
         * show: -o, or stdout, 
@@ -172,12 +185,11 @@ int main(int ac, char **av){
                        case 'l': mode = LIST; break;
                        case 'R': rootdir = optarg; break;
                        case 'F': required = 1; break;
-                       case 'a': all = 1; break;
 
                        case 'h': scriptishash = 1; break;
                        case 'o': output = optarg; break;
                        case 'S': script = optarg; break;
-                       case 'q': quiet = 1;
+                       case 'q': quiet = 1; break;
 
                        default:
                                  usage();
@@ -202,7 +214,7 @@ int main(int ac, char **av){
 
        /* first non option arg is always a package id */
        pkgstr = av[argn];
-       pkgid = zpm_findpkg(&zpm, pkgstr);
+       pkgid = zpm_findpkg(&zpm, pkgstr, NULL);
 
        if (!pkgid) {
                fprintf(stderr, "no package for %s\n", pkgstr);
@@ -248,10 +260,14 @@ int main(int ac, char **av){
                        fail = HARD;
                }
        } else if (mode == LIST) {
-               if (!zpm_script_hash(&zpm, pkgid, phase, hash)) {
+               if (!phase) {
+                       zpm_foreach_script(&zpm, pkgid, phase, 0, list_scripts);
+               } else if (!zpm_script_hash(&zpm, pkgid, phase, hash)) {
                        fail = SOFT;
                } else if (scriptishash) {
-                       printf("%s\n", hash);
+                       if (!quiet) {
+                               printf("%s\n", hash);
+                       }
                } else {
                        if (!output) {
                                output = "-";
@@ -300,6 +316,7 @@ int main(int ac, char **av){
                if (!zpm_extract(&zpm, hash, script, 0700)) {
                        fprintf(stderr, "unable to extract script");
                        fail = HARD;
+                       zpm_note_add(&zpm, pkgid, NULL, hash, "unable to extract %s script", phase);
                        goto cleanup;
                }
 
@@ -307,6 +324,10 @@ int main(int ac, char **av){
                if (rv) {
                        fprintf(stderr, "package %s script failed with code %d\n",
                                        pkgid, rv);
+                       
+                       zpm_import(&zpm, output, 0, hash);
+                       zpm_note_add(&zpm, pkgid, NULL, hash, "package %s script failed with code %d", phase, rv);
+
                        fail = HARD;
                }
 
@@ -324,5 +345,4 @@ cleanup:
        zpm_close(&zpm);
 
        return (fail == HARD || (required && fail)) ? EXIT_FAILURE : 0;
-
 }