forked from mirrors/linux
		
	kconfig: Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE()
Replace the config_is_*() macros with a variant that allows for grepping for usage of CONFIG_* options in the code. Usage: if (IS_ENABLED(CONFIG_NUMA)) or #if IS_ENABLED(CONFIG_NUMA) The IS_ENABLED() macro evaluates to 1 if the argument is set (to either 'y' or 'm'), IS_BUILTIN() tests if the option is 'y' and IS_MODULE() test if the option is 'm'. Only boolean and tristate options are supported. Reviewed-by: Arnaud Lacombe <lacombar@gmail.com> Acked-by: Randy Dunlap <rdunlap@xenotime.net> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
		
							parent
							
								
									bac6aa865b
								
							
						
					
					
						commit
						2a11c8ea20
					
				
					 3 changed files with 47 additions and 58 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							|  | @ -360,7 +360,7 @@ CFLAGS_GCOV	= -fprofile-arcs -ftest-coverage | |||
| LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include \
 | ||||
|                    -Iarch/$(hdr-arch)/include/generated -Iinclude \
 | ||||
|                    $(if $(KBUILD_SRC), -I$(srctree)/include) \
 | ||||
|                    -include include/generated/autoconf.h | ||||
|                    -include $(srctree)/include/linux/kconfig.h | ||||
| 
 | ||||
| KBUILD_CPPFLAGS := -D__KERNEL__ | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										32
									
								
								include/linux/kconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								include/linux/kconfig.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| #ifndef __LINUX_KCONFIG_H | ||||
| #define __LINUX_KCONFIG_H | ||||
| 
 | ||||
| #include <generated/autoconf.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Helper macros to use CONFIG_ options in C expressions. Note that | ||||
|  * these only work with boolean and tristate options. | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm', | ||||
|  * 0 otherwise. | ||||
|  * | ||||
|  */ | ||||
| #define IS_ENABLED(option) \ | ||||
| 	(__enabled_ ## option || __enabled_ ## option ## _MODULE) | ||||
| 
 | ||||
| /*
 | ||||
|  * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0 | ||||
|  * otherwise. For boolean options, this is equivalent to | ||||
|  * IS_ENABLED(CONFIG_FOO). | ||||
|  */ | ||||
| #define IS_BUILTIN(option) __enabled_ ## option | ||||
| 
 | ||||
| /*
 | ||||
|  * IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0 | ||||
|  * otherwise. | ||||
|  */ | ||||
| #define IS_MODULE(option) __enabled_ ## option ## _MODULE | ||||
| 
 | ||||
| #endif /* __LINUX_KCONFIG_H */ | ||||
|  | @ -495,15 +495,25 @@ header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | |||
| 
 | ||||
| 		switch (*value) { | ||||
| 		case 'n': | ||||
| 			return; | ||||
| 			break; | ||||
| 		case 'm': | ||||
| 			suffix = "_MODULE"; | ||||
| 			/* fall through */ | ||||
| 		default: | ||||
| 			value = "1"; | ||||
| 			fprintf(fp, "#define %s%s%s 1\n", | ||||
| 			    CONFIG_, sym->name, suffix); | ||||
| 		} | ||||
| 		fprintf(fp, "#define %s%s%s %s\n", | ||||
| 		    CONFIG_, sym->name, suffix, value); | ||||
| 		/*
 | ||||
| 		 * Generate the __enabled_CONFIG_* and | ||||
| 		 * __enabled_CONFIG_*_MODULE macros for use by the | ||||
| 		 * IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is | ||||
| 		 * generated even for booleans so that the IS_ENABLED() macro | ||||
| 		 * works. | ||||
| 		 */ | ||||
| 		fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n", | ||||
| 				sym->name, (*value == 'y')); | ||||
| 		fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n", | ||||
| 				sym->name, (*value == 'm')); | ||||
| 		break; | ||||
| 	} | ||||
| 	case S_HEX: { | ||||
|  | @ -554,58 +564,6 @@ static struct conf_printer header_printer_cb = | |||
| 	.print_comment = header_print_comment, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Function-style header printer | ||||
|  * | ||||
|  * This printer is used to generate the config_is_xxx() function-style macros | ||||
|  * in `include/generated/autoconf.h'  | ||||
|  */ | ||||
| static void | ||||
| header_function_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | ||||
| { | ||||
| 	int val = 0; | ||||
| 	char c; | ||||
| 	char *tmp, *d; | ||||
| 
 | ||||
| 	switch (sym->type) { | ||||
| 	case S_BOOLEAN: | ||||
| 	case S_TRISTATE: | ||||
| 		break; | ||||
| 	default: | ||||
| 		return; | ||||
| 	} | ||||
| 	if (*value == 'm') | ||||
| 		val = 2; | ||||
| 	else if (*value == 'y') | ||||
| 		val = 1; | ||||
| 
 | ||||
| 	d = strdup(CONFIG_); | ||||
| 	tmp = d; | ||||
| 	while ((c = *d)) { | ||||
| 		*d = tolower(c); | ||||
| 		d++; | ||||
| 	} | ||||
| 
 | ||||
| 	fprintf(fp, "#define %sis_", tmp); | ||||
| 	free(tmp); | ||||
| 
 | ||||
| 	d = strdup(sym->name); | ||||
| 	tmp = d; | ||||
| 	while ((c = *d)) { | ||||
| 		*d = tolower(c); | ||||
| 		d++; | ||||
| 	} | ||||
| 	fprintf(fp, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "", | ||||
| 		      val ? 1 : 0); | ||||
| 	free(tmp); | ||||
| } | ||||
| 
 | ||||
| static struct conf_printer header_function_printer_cb = | ||||
| { | ||||
| 	.print_symbol = header_function_print_symbol, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Tristate printer | ||||
|  * | ||||
|  | @ -997,7 +955,6 @@ int conf_write_autoconf(void) | |||
| 		conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1); | ||||
| 
 | ||||
| 		conf_write_symbol(out_h, sym, &header_printer_cb, NULL); | ||||
| 		conf_write_symbol(out_h, sym, &header_function_printer_cb, NULL); | ||||
| 	} | ||||
| 	fclose(out); | ||||
| 	fclose(tristate); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Michal Marek
						Michal Marek