[Midnightbsd-cvs] src: libexec/mport.create: mport.create hook binary.

ctriv at midnightbsd.org ctriv at midnightbsd.org
Sun Sep 23 18:32:13 EDT 2007


Log Message:
-----------
mport.create hook binary. This is basically complete, but needs some input
checking, a usage function, and a manpage.

Added Files:
-----------
    src/libexec/mport.create:
        Makefile (r1.1)
        mport.create.c (r1.1)

-------------- next part --------------
--- /dev/null
+++ libexec/mport.create/mport.create.c
@@ -0,0 +1,176 @@
+/*-
+ * Copyright (c) 2007 Chris Reinhardt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $MidnightBSD: src/libexec/mport.create/mport.create.c,v 1.1 2007/09/23 22:32:13 ctriv Exp $
+ */
+
+
+
+#include <sys/cdefs.h>
+__MBSDID("$MidnightBSD: src/libexec/mport.create/mport.create.c,v 1.1 2007/09/23 22:32:13 ctriv Exp $");
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <err.h>
+#include <string.h>
+#include <unistd.h>
+#include <mport.h>
+
+
+#define STRING_EQ(s1, s2) (strcmp((s1), (s2)) == 0)
+
+static void parselist(char *, char ***);
+static void usage(void);
+
+int main(int argc, char *argv[]) 
+{
+  int ch;
+  mportPackageMeta *pack = mport_new_packagemeta();
+  mportPlist *plist = mport_new_plist();
+  FILE *fp;
+    
+  while ((ch = getopt(argc, argv, "o:n:v:c:l:s:d:p:P:D:M:O:C:i:j:m:r:")) != -1) {
+    switch (ch) {
+      case 'o':
+        pack->pkg_filename = optarg;
+        break;
+      case 'n':
+        pack->name = optarg;
+        break;
+      case 'v':
+        pack->version = optarg;
+        break;
+      case 'c':
+        pack->comment = optarg;
+        break;
+      case 'l':
+        pack->lang = optarg;
+        break;
+      case 's':
+        pack->sourcedir = optarg;
+        break;
+      case 'd':
+        pack->desc = optarg;
+        break;
+      case 'p':
+        if ((fp = fopen(optarg, "r")) == NULL) {
+          err(1, "%s", optarg);
+        }
+        if (mport_parse_plist_file(fp, plist) != 0) {
+          fprintf(stderr, "Could not parse plist file '%s'.\n", optarg);
+          exit(1);
+        }
+        
+        break;
+      case 'P':
+        pack->prefix = optarg;
+        break;
+      case 'D':
+        parselist(optarg, &(pack->depends));
+        break;
+      case 'M':
+        pack->mtree = optarg;
+        break;
+      case 'O':
+        pack->origin = optarg;
+        break;
+      case 'C':
+        parselist(optarg, &(pack->conflicts));
+        break;
+      case 'i':
+        pack->pkginstall = optarg;
+        break;
+      case 'j':
+        pack->pkgdeinstall = optarg;
+        break;
+      case 'm':
+        pack->pkgmessage = optarg;
+        break;
+      case 'r':
+        pack->req_script = optarg;
+        break;
+      default:
+        usage();
+        break; 
+    }
+  } 
+  
+  
+  // XXX Check that we have all the required args.
+  
+  if (mport_create_pkg(plist, pack) != MPORT_OK) {
+    fprintf(stderr, "mport.create: error: %s\n", mport_err_string());
+    return 1;
+  }
+  
+  return 0;
+}
+
+static void parselist(char *opt, char ***list) 
+{
+  int len;
+  char *input;
+  char *field;
+
+  input = (char *)malloc(strlen(opt));
+  strlcpy(input, opt, strlen(opt));
+  
+  /* first we need to get the length of the depends list */
+  for (len = 0; (field = strsep(&opt, " \t\n")) != NULL;) {
+    if (*field != '\0')
+      len++;
+  }    
+
+  if (len == 0) {
+    *list = NULL;
+    return;
+  }
+
+  fprintf(stderr, "List len: %i\n", len);
+
+  *list = (char **)malloc((len + 1) * sizeof(char *));
+
+  /* dereference once so we don't loose our minds. */
+  char **vec = *list;
+  
+  fprintf(stderr, "Parsing '%s'\n", input);
+  while ((field = strsep(&input, " \t\n")) != NULL) {
+    if (*field == '\0')
+      continue;
+
+    *vec = field;
+    fprintf(stderr, "List pos: %p\n", vec);
+    vec++;
+  }
+  
+  vec = NULL;
+}
+  
+static void usage() 
+{
+  fprintf(stderr, "Coming soon: usage!\n");
+  exit(1);
+}
--- /dev/null
+++ libexec/mport.create/Makefile
@@ -0,0 +1,11 @@
+PROG= mport.create
+
+CFLAGS+=	-I${.CURDIR}/../../lib/libmport/
+WARNS?= 	4
+
+NO_MAN=		yes
+
+LDADD= 	${LIBMPORT} ${LIBSQLITE3} ${LIBPTHREAD} ${LIBMD}
+DPADD= 	${LIBMPORT} ${LIBSQLITE3} ${LIBPTHREAD} ${LIBMD}
+
+.include <bsd.prog.mk>


More information about the Midnightbsd-cvs mailing list