Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: aldot at uclibc.org <aldot@uclibc.org>
To: buildroot@busybox.net
Subject: [Buildroot] svn commit: trunk/buildroot/package/config
Date: Sun, 23 Sep 2007 13:28:54 -0700 (PDT)	[thread overview]
Message-ID: <20070923202854.3B44530046@busybox.net> (raw)

Author: aldot
Date: 2007-09-23 13:28:53 -0700 (Sun, 23 Sep 2007)
New Revision: 19978

Log:
- thinking loud about auto-generating dependencies for make(1)
  Don't use this, it doesn't work yet. Thoughs welcome.
  Like: We should probably use the sym->text and not fiddle with the name since
  the name looses information ('_' != '-' in host-fakeroot). This would not
  be too robust, i fear, since the name can contain additional, arbitrary info.
  Also, the real 'depends' are a little bit ugly in kconfig. There doesn't seem
  to be a nice property that holds reverse deps that are only contain selected
  symbols.
  Thoughts?


Modified:
   trunk/buildroot/package/config/kconfig-to-buildroot2.patch
   trunk/buildroot/package/config/util.c


Changeset:
Modified: trunk/buildroot/package/config/kconfig-to-buildroot2.patch
===================================================================
--- trunk/buildroot/package/config/kconfig-to-buildroot2.patch	2007-09-23 18:34:49 UTC (rev 19977)
+++ trunk/buildroot/package/config/kconfig-to-buildroot2.patch	2007-09-23 20:28:53 UTC (rev 19978)
@@ -1303,3 +1303,127 @@
  
  	return name ? name : ".config";
  }
+Index: util.c
+===================================================================
+--- kernel-config/util.c	(revision 19969)
++++ config/util.c	(working copy)
+@@ -26,6 +26,109 @@ struct file *file_lookup(const char *nam
+ 	return file;
+ }
+ 
++static char* br2_symbol_printer(const char * const in)
++{
++	ssize_t i, j, len = strlen(in);
++	char *ret;
++	if (len < 1)
++		return NULL;
++	ret = malloc(len);
++	if (!ret) {
++		printf("Out of memory!");
++		exit(1);
++	}
++	memset(ret, 0, len);
++	i = j = 0;
++	if (strncmp("BR2_", in, 4) == 0)
++		i += 4;
++	if (strncmp("PACKAGE_", in + i, 8) == 0)
++		i += 8;
++	else if (strncmp("TARGET_", in + i, 7) == 0)
++		i += 7;
++	while (i <= len)
++		ret[j++] = tolower(in[i++]);
++	return ret;
++}
++
++/* write dependencies of the infividual config-symbols */
++static int write_make_deps(const char *name)
++{
++	struct menu *menu;
++	struct symbol *sym;
++	struct property *prop, *p;
++	unsigned done;
++	const char * const name_tmp = "..make.deps.tmp";
++	FILE *out;
++	if (!name)
++		name = ".auto.deps";
++	out = fopen(name_tmp, "w");
++	if (!out)
++		return 1;
++	fprintf(out, "# ATTENTION! This does not handle 'depends', just 'select'! \n"
++		"# See package/config/util.c write_make_deps()\n#\n");
++	menu = &rootmenu;//rootmenu.list;
++	while (menu) {
++		sym = menu->sym;
++		if (!sym) {
++			if (!menu_is_visible(menu))
++				goto next;
++		} else if (!(sym->flags & SYMBOL_CHOICE)) {
++			sym_calc_value(sym);
++			if (sym->type == S_BOOLEAN
++			    && sym_get_tristate_value(sym) != no) {
++			    done = 0;
++			    for_all_prompts(sym, prop) {
++			        struct expr *e;
++//printf("\nname=%s\n", sym->name);
++			        for_all_properties(sym, p, P_SELECT) {
++				    e = p->expr;
++				    if (e && e->left.sym->name) {
++				        if (!done) {
++					    fprintf(out, "%s:", br2_symbol_printer(sym->name));
++					    done = 1;
++					}
++//printf("SELECTS %s\n",e->left.sym->name);
++					fprintf(out, " %s",br2_symbol_printer(e->left.sym->name));
++				    }
++				}
++				if (done)
++				    fprintf(out, "\n");
++#if 0
++				e = sym->rev_dep.expr;
++				if (e && e->type == E_SYMBOL
++					&& e->left.sym->name) {
++				    fprintf(out, "%s: %s", br2_symbol_printer(e->left.sym->name),
++						br2_symbol_printer(sym->name));
++printf("%s is Selected BY: %s", sym->name, e->left.sym->name);
++				}
++#endif
++			    }
++			}
++		}
++next:
++		if (menu->list) {
++			menu = menu->list;
++			continue;
++		}
++		if (menu->next)
++			menu = menu->next;
++		else while ((menu = menu->parent)) {
++			if (menu->next) {
++				menu = menu->next;
++				break;
++			}
++		}
++	}
++	fclose(out);
++	rename(name_tmp, name);
++	printf(_("#\n"
++		 "# make dependencies written to %s\n"
++		 "# ATTENTION buildroot devels!\n"
++		 "# See top of this file before playing with this auto-preprequisites!\n"
++		 "#\n"), name);
++	return 0;
++}
++
+ /* write a dependency file as used by kbuild to track dependencies */
+ int file_write_dep(const char *name)
+ {
+@@ -49,7 +152,8 @@ int file_write_dep(const char *name)
+ 		     "$(deps_config): ;\n");
+ 	fclose(out);
+ 	rename("..config.tmp", name);
+-	return 0;
++
++	return write_make_deps(NULL);
+ }
+ 
+ 

Modified: trunk/buildroot/package/config/util.c
===================================================================
--- trunk/buildroot/package/config/util.c	2007-09-23 18:34:49 UTC (rev 19977)
+++ trunk/buildroot/package/config/util.c	2007-09-23 20:28:53 UTC (rev 19978)
@@ -26,6 +26,109 @@
 	return file;
 }
 
+static char* br2_symbol_printer(const char * const in)
+{
+	ssize_t i, j, len = strlen(in);
+	char *ret;
+	if (len < 1)
+		return NULL;
+	ret = malloc(len);
+	if (!ret) {
+		printf("Out of memory!");
+		exit(1);
+	}
+	memset(ret, 0, len);
+	i = j = 0;
+	if (strncmp("BR2_", in, 4) == 0)
+		i += 4;
+	if (strncmp("PACKAGE_", in + i, 8) == 0)
+		i += 8;
+	else if (strncmp("TARGET_", in + i, 7) == 0)
+		i += 7;
+	while (i <= len)
+		ret[j++] = tolower(in[i++]);
+	return ret;
+}
+
+/* write dependencies of the infividual config-symbols */
+static int write_make_deps(const char *name)
+{
+	struct menu *menu;
+	struct symbol *sym;
+	struct property *prop, *p;
+	unsigned done;
+	const char * const name_tmp = "..make.deps.tmp";
+	FILE *out;
+	if (!name)
+		name = ".auto.deps";
+	out = fopen(name_tmp, "w");
+	if (!out)
+		return 1;
+	fprintf(out, "# ATTENTION! This does not handle 'depends', just 'select'! \n"
+		"# See package/config/util.c write_make_deps()\n#\n");
+	menu = &rootmenu;//rootmenu.list;
+	while (menu) {
+		sym = menu->sym;
+		if (!sym) {
+			if (!menu_is_visible(menu))
+				goto next;
+		} else if (!(sym->flags & SYMBOL_CHOICE)) {
+			sym_calc_value(sym);
+			if (sym->type == S_BOOLEAN
+			    && sym_get_tristate_value(sym) != no) {
+			    done = 0;
+			    for_all_prompts(sym, prop) {
+			        struct expr *e;
+//printf("\nname=%s\n", sym->name);
+			        for_all_properties(sym, p, P_SELECT) {
+				    e = p->expr;
+				    if (e && e->left.sym->name) {
+				        if (!done) {
+					    fprintf(out, "%s:", br2_symbol_printer(sym->name));
+					    done = 1;
+					}
+//printf("SELECTS %s\n",e->left.sym->name);
+					fprintf(out, " %s",br2_symbol_printer(e->left.sym->name));
+				    }
+				}
+				if (done)
+				    fprintf(out, "\n");
+#if 0
+				e = sym->rev_dep.expr;
+				if (e && e->type == E_SYMBOL
+					&& e->left.sym->name) {
+				    fprintf(out, "%s: %s", br2_symbol_printer(e->left.sym->name),
+						br2_symbol_printer(sym->name));
+printf("%s is Selected BY: %s", sym->name, e->left.sym->name);
+				}
+#endif
+			    }
+			}
+		}
+next:
+		if (menu->list) {
+			menu = menu->list;
+			continue;
+		}
+		if (menu->next)
+			menu = menu->next;
+		else while ((menu = menu->parent)) {
+			if (menu->next) {
+				menu = menu->next;
+				break;
+			}
+		}
+	}
+	fclose(out);
+	rename(name_tmp, name);
+	printf(_("#\n"
+		 "# make dependencies written to %s\n"
+		 "# ATTENTION buildroot devels!\n"
+		 "# See top of this file before playing with this auto-preprequisites!\n"
+		 "#\n"), name);
+	return 0;
+}
+
 /* write a dependency file as used by kbuild to track dependencies */
 int file_write_dep(const char *name)
 {
@@ -49,7 +152,8 @@
 		     "$(deps_config): ;\n");
 	fclose(out);
 	rename("..config.tmp", name);
-	return 0;
+
+	return write_make_deps(NULL);
 }
 
 

             reply	other threads:[~2007-09-23 20:28 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-23 20:28 aldot at uclibc.org [this message]
  -- strict thread matches above, loose matches on Subject: below --
2008-12-13 11:52 [Buildroot] svn commit: trunk/buildroot/package/config jacmet at uclibc.org
2008-10-16 19:28 jacmet at uclibc.org
2008-08-27 20:18 jacmet at uclibc.org
2008-06-19 19:06 jacmet at uclibc.org
2008-06-19  8:11 jacmet at uclibc.org
2008-06-19 16:44 ` hartleys
2008-06-19 18:18   ` Fathi Boudra
2008-06-19 19:07     ` Peter Korsgaard
2008-06-19 19:06   ` Peter Korsgaard
2007-09-29 20:21 aldot at uclibc.org
2007-09-29 20:08 aldot at uclibc.org
2007-09-23 20:46 aldot at uclibc.org
2007-09-23 14:12 aldot at uclibc.org
2007-07-24 18:20 aldot at uclibc.org
2007-07-20  7:47 ulf at uclibc.org
2007-07-11 14:47 ulf at uclibc.org
2007-07-08  0:18 aldot at uclibc.org
2007-07-07 18:17 aldot at uclibc.org
2007-07-06  4:58 sjhill at uclibc.org
2007-07-02 14:35 aldot at uclibc.org
2007-06-28 22:38 aldot at uclibc.org
2007-06-28 12:11 aldot at uclibc.org
2007-06-28 11:54 aldot at uclibc.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070923202854.3B44530046@busybox.net \
    --to=aldot@uclibc.org \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox