]> rtime.felk.cvut.cz Git - linux-conf-perf.git/blob - scripts/allconfig/allconfig.c
Allow importing lcp_django from other python scripts
[linux-conf-perf.git] / scripts / allconfig / allconfig.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <locale.h>
5 #include <stdbool.h>
6
7 #include <kconfig/lkc.h>
8 #include <build_files.h>
9 #include <macros.h>
10 #include "inv.h"
11 #include <kconfig/lcp_utils.h>
12
13 int verbose_level;
14 bool full_config, inv_config;
15
16 char *kconfig_file;
17 char *output_config_file;
18 char *input_config_file;
19
20 void print_help();
21
22 int main(int argc, char **argv) {
23     full_config = false;
24     verbose_level = 1;
25     int i;
26     for (i = 1; i < argc; i++) {
27         if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")) {
28             print_help();
29             exit(0);
30         } else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--verbose")) {
31             verbose_level++;
32         } else if (!strcmp(argv[i], "--all")) {
33             full_config = true;
34         } else if (!strcmp(argv[i], "--inv")) {
35             inv_config = true;
36         } else if (!strcmp(argv[i], "--env")) {
37             if (++i < argc)
38                 set_missing_env(argv[i]);
39             else {
40                 print_help();
41                 exit(1);
42             }
43         } else if (kconfig_file == NULL) {
44             kconfig_file = argv[i];
45         } else if (input_config_file == NULL) {
46             input_config_file = argv[i];
47         } else if (output_config_file == NULL) {
48             output_config_file = argv[i];
49         } else {
50             Eprintf("Unknown parameter: %s\n", argv[i]);
51             exit(-1);
52         }
53     }
54
55     if (output_config_file == NULL || kconfig_file == NULL
56         || input_config_file == NULL) {
57         Eprintf("Parameters mismatch.\n");
58         print_help();
59         exit(-2);
60     }
61
62     setlocale(LC_ALL, "");
63     bindtextdomain(PACKAGE, LOCALEDIR);
64     textdomain(PACKAGE);
65
66     conf_parse_path(kconfig_file);
67     conf_read(input_config_file);
68
69     if (inv_config) {
70         inv_prepare(input_config_file);
71     }
72
73     struct symbol *sym;
74     sym = sym_find("MODULES");
75     if (sym == NULL) {
76         Eprintf("Config MODULES not found. Ignoring...\n");
77     } else if (sym_get_tristate_value(sym) == yes) {
78         Eprintf("Config MODULES set as yes. This is not supported.\n");
79         exit(-4);
80     }
81
82     FILE *f;
83     f = fopen(output_config_file, "w");
84     if (f == NULL) {
85         Eprintf("Can't write to file %s\n", output_config_file);
86         exit(-3);
87     }
88
89     struct property *prop;
90     for_all_symbols(i, sym) {
91         if ((sym->type == S_BOOLEAN || sym->type == S_TRISTATE)
92             && sym->name != NULL) {
93             if (!full_config) {
94                 for_all_prompts(sym, prop) {
95                     goto printit;
96                 }
97             } else
98                 goto printit;
99             continue;
100           printit:
101             if (!inv_config || !inv_fixed(sym))
102                 fprintf(f, "CONFIG_%s=%s\n", sym->name,
103                         sym_get_tristate_value(sym) == no ? "n" : "y");
104         }
105     }
106     fclose(f);
107
108     return 0;
109 }
110
111 void print_help() {
112     printf
113         ("Usage: allconfig [-v] [-h] [--all] [--inv] Kconfig Input Output\n");
114     printf("  This is generating full configuration.\n");
115     printf("  Output configuration has all configuration options.\n");
116     printf("\n");
117     printf(" Options:\n");
118     printf("  -v, --verbose Increase level of verbose output.\n");
119     printf("  -h, --help    Print this help text.\n");
120     printf
121         ("  --all         Genetate full configuration. Including non dependency\n");
122     printf("                configuration options");
123     printf
124         ("  --inv         Generate configuration of missing configratuon options.\n");
125     printf("  --env <file>  Read needed environment variables from .conf.mk.\n");
126 }