summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2011-01-18 18:10:19 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2011-01-18 18:10:19 +0100
commit46b2bb3001ce838ba2483a08418587d8a027f3a9 (patch)
treeb2b618839b5afcc859fcb90556e6f199d9a9a10c /tools
parent88d3e6d6c572143bd95a589a44e30bfefd616b88 (diff)
parent902ee7e7b23751ca7a8264d36a837aa4aae12032 (diff)
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'tools')
-rw-r--r--tools/adk/Makefile18
-rw-r--r--tools/adk/pkgmaker.c111
-rw-r--r--tools/cpio/Makefile6
-rw-r--r--tools/mkcrypt/Makefile6
4 files changed, 104 insertions, 37 deletions
diff --git a/tools/adk/Makefile b/tools/adk/Makefile
index 02171c99b..638935e5e 100644
--- a/tools/adk/Makefile
+++ b/tools/adk/Makefile
@@ -3,19 +3,17 @@
include $(TOPDIR)/rules.mk
-$(TOPDIR)/bin/tools:
- @mkdir -p $(TOPDIR)/bin/tools
+CCANDLD.c= ${HOSTCC} ${HOSTCFLAGS} ${HOSTCPPFLAGS} ${HOSTLDFLAGS}
-${TOPDIR}/bin/tools/depmaker: $(TOPDIR)/bin/tools
- $(HOSTCC) -o $(TOPDIR)/bin/tools/depmaker depmaker.c
+${TOOLS_DIR}/depmaker:
+ ${CCANDLD.c} -Wall -o $@ depmaker.c
-${TOPDIR}/bin/tools/pkgrebuild: $(TOPDIR)/bin/tools
- $(HOSTCC) -o $(TOPDIR)/bin/tools/pkgrebuild pkgrebuild.c strmap.c
+${TOOLS_DIR}/pkgrebuild:
+ ${CCANDLD.c} -Wall -o $@ pkgrebuild.c strmap.c
-${TOPDIR}/bin/tools/dkgetsz: ${TOPDIR}/bin/tools
- ${HOSTCC} -O2 -Wall -o $@ dkgetsz.c
+${TOOLS_DIR}/dkgetsz:
+ ${CCANDLD.c} -Wall -o $@ dkgetsz.c
-install: ${TOPDIR}/bin/tools/depmaker ${TOPDIR}/bin/tools/pkgrebuild \
- ${TOPDIR}/bin/tools/dkgetsz
+install: ${TOOLS_DIR}/depmaker ${TOOLS_DIR}/pkgrebuild ${TOOLS_DIR}/dkgetsz
include $(TOPDIR)/mk/tools.mk
diff --git a/tools/adk/pkgmaker.c b/tools/adk/pkgmaker.c
index cee3f1420..18465ce18 100644
--- a/tools/adk/pkgmaker.c
+++ b/tools/adk/pkgmaker.c
@@ -1,7 +1,7 @@
/*
* pkgmaker - create package meta-data for OpenADK buildsystem
*
- * Copyright (C) 2010 Waldemar Brodkorb <wbx@openadk.org>
+ * Copyright (C) 2010,2011 Waldemar Brodkorb <wbx@openadk.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -37,10 +37,11 @@
static int nobinpkgs;
-static void fatal_error(const char *message) {
-
- fprintf(stderr, "Fatal error. %s\n", message);
- exit(1);
+#define fatal_error(...) { \
+ fprintf(stderr, "Fatal error. "); \
+ fprintf(stderr, __VA_ARGS__); \
+ fprintf(stderr, "\n"); \
+ exit(1); \
}
static int parse_var_hash(char *buf, const char *varname, StrMap *strmap) {
@@ -110,6 +111,53 @@ static int parse_var(char *buf, const char *varname, char *pvalue, char **result
return(1);
}
+static int parse_var_with_pkg(char *buf, const char *varname, char *pvalue, char **result, char **pkgname, int varlen) {
+
+ char *pkg_var, *check;
+ char *key, *value, *string;
+
+ if ((pkg_var = malloc(MAXLINE)) != NULL)
+ memset(pkg_var, 0, MAXLINE);
+ else {
+ perror("Can not allocate memory");
+ exit(EXIT_FAILURE);
+ }
+
+ check = strstr(buf, ":=");
+ if (check != NULL) {
+ string = strstr(buf, varname);
+ if (string != NULL) {
+ string[strlen(string)-1] = '\0';
+ key = strtok(string, ":=");
+ *pkgname = strdup(key+varlen);
+ value = strtok(NULL, "=\t");
+ if (value != NULL) {
+ strncat(pkg_var, value, strlen(value));
+ *result = strdup(pkg_var);
+ }
+ free(pkg_var);
+ return(0);
+ }
+ } else {
+ string = strstr(buf, varname);
+ if (string != NULL) {
+ string[strlen(string)-1] = '\0';
+ key = strtok(string, "+=");
+ value = strtok(NULL, "=\t");
+ if (pvalue != NULL)
+ strncat(pkg_var, pvalue, strlen(pvalue));
+ strncat(pkg_var, " ", 1);
+ if (value != NULL)
+ strncat(pkg_var, value, strlen(value));
+ *result = strdup(pkg_var);
+ free(pkg_var);
+ return(0);
+ }
+ }
+ free(pkg_var);
+ return(1);
+}
+
/*
static void iter_debug(const char *key, const char *value, const void *obj) {
fprintf(stderr, "HASHMAP key: %s value: %s\n", key, value);
@@ -222,6 +270,7 @@ int main() {
char *key, *value, *token, *cftoken, *sp, *hkey, *val, *pkg_fd;
char *pkg_name, *pkg_depends, *pkg_section, *pkg_descr, *pkg_url;
char *pkg_cxx, *pkg_subpkgs, *pkg_cfline, *pkg_dflt, *pkg_multi;
+ char *pkg_need_cxx, *pkg_need_java, *pkgname;
char *pkg_host_depends, *pkg_arch_depends, *pkg_flavours, *pkg_choices, *pseudo_name;
char *packages, *pkg_name_u, *pkgs;
char *saveptr, *p_ptr, *s_ptr;
@@ -242,6 +291,9 @@ int main() {
pkg_dflt = NULL;
pkg_cfline = NULL;
pkg_multi = NULL;
+ pkg_need_cxx = NULL;
+ pkg_need_java = NULL;
+ pkgname = NULL;
p_ptr = NULL;
s_ptr = NULL;
@@ -301,7 +353,8 @@ int main() {
fclose(section);
}
} else
- fatal_error("Can not find section description for package.");
+ fatal_error("Can not find section description for package %s.",
+ pkgdirp->d_name);
fclose(pkg);
continue;
@@ -351,17 +404,21 @@ int main() {
continue;
if ((parse_var(buf, "PKG_CXX", NULL, &pkg_cxx)) == 0)
continue;
+ if ((parse_var(buf, "PKG_NEED_CXX", NULL, &pkg_need_cxx)) == 0)
+ continue;
+ if ((parse_var(buf, "PKG_NEED_JAVA", NULL, &pkg_need_java)) == 0)
+ continue;
if ((parse_var(buf, "PKG_MULTI", NULL, &pkg_multi)) == 0)
continue;
if ((parse_var(buf, "PKG_DEPENDS", pkg_depends, &pkg_depends)) == 0)
continue;
- if ((parse_var(buf, "PKG_FLAVOURS", pkg_flavours, &pkg_flavours)) == 0)
+ if ((parse_var_with_pkg(buf, "PKG_FLAVOURS_", pkg_flavours, &pkg_flavours, &pkgname, 13)) == 0)
continue;
if ((parse_var_hash(buf, "PKGFD_", pkgmap)) == 0)
continue;
if ((parse_var_hash(buf, "PKGFS_", pkgmap)) == 0)
continue;
- if ((parse_var(buf, "PKG_CHOICES", pkg_choices, &pkg_choices)) == 0)
+ if ((parse_var_with_pkg(buf, "PKG_CHOICES_", pkg_choices, &pkg_choices, &pkgname, 12)) == 0)
continue;
if ((parse_var_hash(buf, "PKGCD_", pkgmap)) == 0)
continue;
@@ -393,10 +450,10 @@ int main() {
fprintf(stderr, "Package dependencies are %s\n", pkg_depends);
if (pkg_subpkgs != NULL)
fprintf(stderr, "Package subpackages are %s\n", pkg_subpkgs);
- if (pkg_flavours != NULL)
- fprintf(stderr, "Package flavours are %s\n", pkg_flavours);
- if (pkg_choices != NULL)
- fprintf(stderr, "Package choices are %s\n", pkg_choices);
+ if (pkg_flavours != NULL && pkgname != NULL)
+ fprintf(stderr, "Package flavours for %s are %s\n", pkgname, pkg_flavours);
+ if (pkg_choices != NULL && pkgname != NULL)
+ fprintf(stderr, "Package choices for %s are %s\n", pkgname, pkg_choices);
if (pkg_url != NULL)
fprintf(stderr, "Package homepage is %s\n", pkg_url);
if (pkg_cfline != NULL)
@@ -494,15 +551,19 @@ int main() {
fclose(section);
}
} else
- fatal_error("Can not find section description for package");
+ fatal_error("Can not find section description for package %s.", pkgdirp->d_name);
unlink(path);
cfg = fopen(path, "w");
if (cfg == NULL)
perror("Can not open Config.in file");
+ if (pkg_need_cxx != NULL) {
+ fprintf(cfg, "comment \"%s... %s (disabled, c++ missing)\"\n", token, pkg_descr);
+ fprintf(cfg, "depends on !ADK_TOOLCHAIN_GCC_CXX\n\n");
+ }
fprintf(cfg, "config ADK_PACKAGE_%s\n", toupperstr(token));
- fprintf(cfg, "\tprompt \"%s... %s\"\n", pseudo_name, pkg_descr);
+ fprintf(cfg, "\tprompt \"%s. %s\"\n", pseudo_name, pkg_descr);
fprintf(cfg, "\ttristate\n");
if (pkg_multi != NULL)
if (strncmp(pkg_multi, "1", 1) == 0)
@@ -584,6 +645,14 @@ int main() {
pkg_depends = NULL;
}
+ if (pkg_need_cxx != NULL) {
+ fprintf(cfg, "\tdepends on ADK_TOOLCHAIN_GCC_CXX\n");
+ }
+ if (pkg_need_java != NULL) {
+ fprintf(cfg, "\tdepends on ADK_TOOLCHAIN_GCC_JAVA\n");
+ pkg_need_java = NULL;
+ }
+
fprintf(cfg, "\tselect ADK_COMPILE_%s\n", toupperstr(pkgdirp->d_name));
if (pkg_dflt != NULL) {
@@ -620,9 +689,8 @@ int main() {
if (pkg_flavours != NULL) {
token = strtok(pkg_flavours, " ");
while (token != NULL) {
- fprintf(cfg, "\nconfig ADK_PACKAGE_%s_%s\n", toupperstr(pkgdirp->d_name),
- toupperstr(token));
- fprintf(cfg, "\tbool ");
+ fprintf(cfg, "\nconfig ADK_PACKAGE_%s_%s\n", pkgname, toupperstr(token));
+ fprintf(cfg, "\tboolean ");
strncat(hkey, "PKGFD_", 6);
strncat(hkey, token, strlen(token));
memset(hvalue, 0 , MAXVALUE);
@@ -632,7 +700,7 @@ int main() {
fprintf(cfg, "\"%s\"\n", pkg_fd);
fprintf(cfg, "\tdefault n\n");
- fprintf(cfg, "\tdepends on ADK_PACKAGE_%s\n", toupperstr(pkgdirp->d_name));
+ fprintf(cfg, "\tdepends on ADK_PACKAGE_%s\n", pkgname);
strncat(hkey, "PKGFS_", 6);
strncat(hkey, token, strlen(token));
@@ -657,11 +725,10 @@ int main() {
if (pkg_choices != NULL) {
fprintf(cfg, "\nchoice\n");
fprintf(cfg, "prompt \"Package flavour choice\"\n");
- fprintf(cfg, "depends on ADK_COMPILE_%s\n\n", toupperstr(pkgdirp->d_name));
+ fprintf(cfg, "depends on ADK_PACKAGE_%s\n\n", pkgname);
token = strtok(pkg_choices, " ");
while (token != NULL) {
- fprintf(cfg, "config ADK_PACKAGE_%s_%s\n", toupperstr(pkgdirp->d_name),
- toupperstr(token));
+ fprintf(cfg, "config ADK_PACKAGE_%s_%s\n", pkgname, toupperstr(token));
fprintf(cfg, "\tbool ");
strncat(hkey, "PKGCD_", 6);
@@ -698,6 +765,8 @@ int main() {
free(packages);
packages = NULL;
+ pkg_need_cxx = NULL;
+ pkg_need_java = NULL;
/* reset flags, free memory */
free(pkg_name);
free(pkg_descr);
diff --git a/tools/cpio/Makefile b/tools/cpio/Makefile
index 142f65b70..a012c43a5 100644
--- a/tools/cpio/Makefile
+++ b/tools/cpio/Makefile
@@ -27,9 +27,9 @@ SRCS+= \
src/nonpax.c \
src/cpio.c
-${TOPDIR}/bin/tools/cpio: ${SRCS}
- @${HOSTCC} ${HOSTCFLAGS} -D_GNU_SOURCE -Isrc -o $@ $^
+${TOOLS_DIR}/cpio: ${SRCS}
+ ${HOSTCC} ${HOSTCFLAGS} -D_GNU_SOURCE -Isrc -o $@ $^
-install: ${TOPDIR}/bin/tools/cpio
+install: ${TOOLS_DIR}/cpio
include $(TOPDIR)/mk/tools.mk
diff --git a/tools/mkcrypt/Makefile b/tools/mkcrypt/Makefile
index 4baf56c44..1708f9f13 100644
--- a/tools/mkcrypt/Makefile
+++ b/tools/mkcrypt/Makefile
@@ -3,9 +3,9 @@
include $(TOPDIR)/rules.mk
-${TOPDIR}/bin/tools/mkcrypt:
- $(HOSTCC) -o $(TOPDIR)/bin/tools/mkcrypt mkcrypt.c
+${TOOLS_DIR}/mkcrypt:
+ $(HOSTCC) ${HOSTCFLAGS} -o $@ mkcrypt.c
-install: ${TOPDIR}/bin/tools/mkcrypt
+install: ${TOOLS_DIR}/mkcrypt
include $(TOPDIR)/mk/tools.mk