mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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