fixed typo. Thanks Thierry\!
[build.git] / parseSpec.c
index a7c038b..3f3bb10 100644 (file)
@@ -6,13 +6,14 @@
  * Mark Huang <mlhuang@cs.princeton.edu>
  * Copyright (C) 2006 The Trustees of Princeton University
  *
- * $Id: parseSpec.c,v 1.2 2006/03/08 21:48:42 mlhuang Exp $
+ * $Id: parseSpec.c,v 1.7 2007/07/23 15:12:44 mef Exp $
  */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <libgen.h>
+#include <errno.h>
 #include <rpm/rpmlib.h>
 #include <rpm/rpmts.h>
 #include <rpm/rpmcli.h>
@@ -51,7 +52,7 @@ rpmspecGet(rpmts ts, const char * arg)
 }
 
 int
-main(int argc, char *const argv[])
+main(int argc, char *argv[])
 {
        poptContext context;
        rpmts ts = NULL;
@@ -61,6 +62,41 @@ main(int argc, char *const argv[])
        Package pkg;
        const char *name, *version, *release, *arch, *unused;
 
+       /* BEGIN: support to pull out --target from the args list */
+       int  alen, i;
+       char *target = NULL;
+       int args = 1;
+       int tlen = strlen("--target");
+
+       /* walk argv list looking for --target */
+       while ((args+1)<argc) {
+         if(strncmp(argv[args],"--target",tlen)==0){
+           char **dash;
+
+           /* get arch component of the --target option */
+           dash = (char**)strchr(argv[args+1],'-');
+           if (dash != NULL) *dash=NULL;
+
+           /* copy arch component of --target option to target */
+           alen = strnlen(argv[args+1],32);
+           target = (char*)malloc(alen+1);
+           if (target == NULL) return errno;
+           strncpy(target,argv[args+1],alen);
+           target[alen]='\0';
+
+           /* change argc, argv to take out the "--target xxx" */
+           for (i=args;i<argc;i++) argv[i]=argv[i+2];
+           argc-=2;
+
+           break;
+         }
+         args++;
+       }
+       argv[1]=argv[argc-1];
+       argv[2]=0;
+       argc=2;
+       /* END: support to pull out --target from the args list */
+
        /* Parse common options for all rpm modes and executables */
        context = rpmcliInit(argc, argv, optionsTable);
 
@@ -97,6 +133,12 @@ main(int argc, char *const argv[])
                if (name && version && release && arch) {
                        if (!pkg->fileList)
                                printf("# Empty\n# ");
+
+                       if (target != NULL) {
+                         if (strcmp(arch,target)!=0) {
+                           arch=target;
+                         }
+                       }
                        printf("RPMS += RPMS/%s/%s-%s-%s.%s.rpm\n",
                               arch, name, version, release, arch);
                }