aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/kconfig/confdata.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 2bafd9a7c8d..a1a9872e4a2 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -768,6 +768,29 @@ out:
768 return res; 768 return res;
769} 769}
770 770
771static void conf_write_function_autoconf(FILE *out, char* conf, char* name,
772 int val)
773{
774 char c;
775 char *tmp, *d;
776
777 d = strdup(conf);
778 tmp = d;
779 while ((c = *conf++))
780 *d++ = tolower(c);
781
782 fprintf(out, "#define %sis_", tmp);
783 free(tmp);
784
785 d = strdup(name);
786 tmp = d;
787 while ((c = *name++))
788 *d++ = tolower(c);
789 fprintf(out, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "",
790 val ? 1 : 0);
791 free(tmp);
792}
793
771int conf_write_autoconf(void) 794int conf_write_autoconf(void)
772{ 795{
773 struct symbol *sym; 796 struct symbol *sym;
@@ -775,6 +798,7 @@ int conf_write_autoconf(void)
775 const char *name; 798 const char *name;
776 FILE *out, *tristate, *out_h; 799 FILE *out, *tristate, *out_h;
777 int i; 800 int i;
801 int fct_val;
778 802
779 sym_clear_all_valid(); 803 sym_clear_all_valid();
780 804
@@ -815,6 +839,7 @@ int conf_write_autoconf(void)
815 rootmenu.prompt->text); 839 rootmenu.prompt->text);
816 840
817 for_all_symbols(i, sym) { 841 for_all_symbols(i, sym) {
842 fct_val = 1;
818 sym_calc_value(sym); 843 sym_calc_value(sym);
819 if (!(sym->flags & SYMBOL_WRITE) || !sym->name) 844 if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
820 continue; 845 continue;
@@ -828,12 +853,14 @@ int conf_write_autoconf(void)
828 case S_TRISTATE: 853 case S_TRISTATE:
829 switch (sym_get_tristate_value(sym)) { 854 switch (sym_get_tristate_value(sym)) {
830 case no: 855 case no:
856 fct_val = 0;
831 break; 857 break;
832 case mod: 858 case mod:
833 fprintf(tristate, "%s%s=M\n", 859 fprintf(tristate, "%s%s=M\n",
834 CONFIG_, sym->name); 860 CONFIG_, sym->name);
835 fprintf(out_h, "#define %s%s_MODULE 1\n", 861 fprintf(out_h, "#define %s%s_MODULE 1\n",
836 CONFIG_, sym->name); 862 CONFIG_, sym->name);
863 fct_val = 2;
837 break; 864 break;
838 case yes: 865 case yes:
839 if (sym->type == S_TRISTATE) 866 if (sym->type == S_TRISTATE)
@@ -860,8 +887,10 @@ int conf_write_autoconf(void)
860 CONFIG_, sym->name, str); 887 CONFIG_, sym->name, str);
861 break; 888 break;
862 default: 889 default:
890 fct_val = 0;
863 break; 891 break;
864 } 892 }
893 conf_write_function_autoconf(out_h, CONFIG_, sym->name, fct_val);
865 } 894 }
866 fclose(out); 895 fclose(out);
867 fclose(tristate); 896 fclose(tristate);