Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next: (25 commits) setlocalversion: do not describe if there is nothing to describe kconfig: fix typos: "Suport" -> "Support" kconfig: make defconfig is no longer chatty kconfig: make oldconfig is now less chatty kconfig: speed up all*config + randconfig kconfig: set all new symbols automatically kconfig: add diffconfig utility kbuild: remove Module.markers during mrproper kbuild: sparse needs CF not CHECKFLAGS kernel-doc: handle/strip __init vmlinux.lds: move __attribute__((__cold__)) functions back into final .text section init: fix URL of "The GNU Accounting Utilities" kbuild: add arch/$ARCH/include to search path kbuild: asm symlink support for arch/$ARCH/include kbuild: support arch/$ARCH/include for tags, cscope kbuild: prepare headers_* for arch/$ARCH/include kbuild: install all headers when arch is changed kbuild: make clean removes *.o.* as well kbuild: optimize headers_* targets kbuild: only one call for include/ in make headers_* ...
This commit is contained in:
commit
6948385cbd
18 changed files with 576 additions and 325 deletions
|
@ -73,10 +73,10 @@ recompiled, or use "make C=2" to run sparse on the files whether they need to
|
|||
be recompiled or not. The latter is a fast way to check the whole tree if you
|
||||
have already built it.
|
||||
|
||||
The optional make variable CHECKFLAGS can be used to pass arguments to sparse.
|
||||
The build system passes -Wbitwise to sparse automatically. To perform
|
||||
endianness checks, you may define __CHECK_ENDIAN__:
|
||||
The optional make variable CF can be used to pass arguments to sparse. The
|
||||
build system passes -Wbitwise to sparse automatically. To perform endianness
|
||||
checks, you may define __CHECK_ENDIAN__:
|
||||
|
||||
make C=2 CHECKFLAGS="-D__CHECK_ENDIAN__"
|
||||
make C=2 CF="-D__CHECK_ENDIAN__"
|
||||
|
||||
These checks are disabled by default as they generate a host of warnings.
|
||||
|
|
3
Kbuild
3
Kbuild
|
@ -43,7 +43,7 @@ $(obj)/$(bounds-file): kernel/bounds.s Kbuild
|
|||
# 2) Generate asm-offsets.h
|
||||
#
|
||||
|
||||
offsets-file := include/asm-$(SRCARCH)/asm-offsets.h
|
||||
offsets-file := include/asm/asm-offsets.h
|
||||
|
||||
always += $(offsets-file)
|
||||
targets += $(offsets-file)
|
||||
|
@ -81,7 +81,6 @@ arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \
|
|||
$(call if_changed_dep,cc_s_c)
|
||||
|
||||
$(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s Kbuild
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(call cmd,offsets)
|
||||
|
||||
#####
|
||||
|
|
115
Makefile
115
Makefile
|
@ -205,6 +205,9 @@ ifeq ($(ARCH),x86_64)
|
|||
SRCARCH := x86
|
||||
endif
|
||||
|
||||
# Where to locate arch specific headers
|
||||
hdr-arch := $(SRCARCH)
|
||||
|
||||
KCONFIG_CONFIG ?= .config
|
||||
|
||||
# SHELL used by kbuild
|
||||
|
@ -326,7 +329,8 @@ AFLAGS_KERNEL =
|
|||
# Needed to be compatible with the O= option
|
||||
LINUXINCLUDE := -Iinclude \
|
||||
$(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
|
||||
-include include/linux/autoconf.h
|
||||
-I$(srctree)/arch/$(hdr-arch)/include \
|
||||
-include include/linux/autoconf.h
|
||||
|
||||
KBUILD_CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
|
||||
|
||||
|
@ -922,7 +926,9 @@ ifneq ($(KBUILD_SRC),)
|
|||
/bin/false; \
|
||||
fi;
|
||||
$(Q)if [ ! -d include2 ]; then mkdir -p include2; fi;
|
||||
$(Q)ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm
|
||||
$(Q)if [ -e $(srctree)/include/asm-$(SRCARCH)/system.h ]; then \
|
||||
ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \
|
||||
fi
|
||||
endif
|
||||
|
||||
# prepare2 creates a makefile if using a separate output directory
|
||||
|
@ -948,22 +954,34 @@ export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
|
|||
|
||||
# The asm symlink changes when $(ARCH) changes.
|
||||
# Detect this and ask user to run make mrproper
|
||||
|
||||
include/asm: FORCE
|
||||
$(Q)set -e; asmlink=`readlink include/asm | cut -d '-' -f 2`; \
|
||||
if [ -L include/asm ]; then \
|
||||
if [ "$$asmlink" != "$(SRCARCH)" ]; then \
|
||||
define check-symlink
|
||||
set -e; \
|
||||
if [ -L include/asm ]; then \
|
||||
asmlink=`readlink include/asm | cut -d '-' -f 2`; \
|
||||
if [ "$$asmlink" != "$(SRCARCH)" ]; then \
|
||||
echo "ERROR: the symlink $@ points to asm-$$asmlink but asm-$(SRCARCH) was expected"; \
|
||||
echo " set ARCH or save .config and run 'make mrproper' to fix it"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
else \
|
||||
echo ' SYMLINK $@ -> include/asm-$(SRCARCH)'; \
|
||||
if [ ! -d include ]; then \
|
||||
mkdir -p include; \
|
||||
fi; \
|
||||
ln -fsn asm-$(SRCARCH) $@; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# We create the target directory of the symlink if it does
|
||||
# not exist so the test in chack-symlink works and we have a
|
||||
# directory for generated filesas used by some architectures.
|
||||
define create-symlink
|
||||
if [ ! -L include/asm ]; then \
|
||||
echo ' SYMLINK $@ -> include/asm-$(SRCARCH)'; \
|
||||
if [ ! -d include/asm-$(SRCARCH) ]; then \
|
||||
mkdir -p include/asm-$(SRCARCH); \
|
||||
fi; \
|
||||
ln -fsn asm-$(SRCARCH) $@; \
|
||||
fi
|
||||
endef
|
||||
|
||||
include/asm: FORCE
|
||||
$(Q)$(check-symlink)
|
||||
$(Q)$(create-symlink)
|
||||
|
||||
# Generate some files
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -1010,36 +1028,43 @@ firmware_install: FORCE
|
|||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Kernel headers
|
||||
INSTALL_HDR_PATH=$(objtree)/usr
|
||||
export INSTALL_HDR_PATH
|
||||
|
||||
HDRFILTER=generic i386 x86_64
|
||||
HDRARCHES=$(filter-out $(HDRFILTER),$(patsubst $(srctree)/include/asm-%/Kbuild,%,$(wildcard $(srctree)/include/asm-*/Kbuild)))
|
||||
#Default location for installed headers
|
||||
export INSTALL_HDR_PATH = $(objtree)/usr
|
||||
|
||||
hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
# Find out where the Kbuild file is located to support
|
||||
# arch/$(ARCH)/include/asm
|
||||
hdr-dir = $(strip \
|
||||
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild), \
|
||||
arch/$(hdr-arch)/include/asm, include/asm-$(hdr-arch)))
|
||||
|
||||
# If we do an all arch process set dst to asm-$(hdr-arch)
|
||||
hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
|
||||
|
||||
PHONY += __headers
|
||||
__headers: include/linux/version.h scripts_basic FORCE
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
||||
|
||||
PHONY += headers_install_all
|
||||
headers_install_all: include/linux/version.h scripts_basic FORCE
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
||||
$(Q)for arch in $(HDRARCHES); do \
|
||||
$(MAKE) ARCH=$$arch -f $(srctree)/scripts/Makefile.headersinst obj=include BIASMDIR=-bi-$$arch ;\
|
||||
done
|
||||
headers_install_all:
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh install
|
||||
|
||||
PHONY += headers_install
|
||||
headers_install: include/linux/version.h scripts_basic FORCE
|
||||
@if [ ! -r $(srctree)/include/asm-$(SRCARCH)/Kbuild ]; then \
|
||||
echo '*** Error: Headers not exportable for this architecture ($(SRCARCH))'; \
|
||||
exit 1 ; fi
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.headersinst ARCH=$(SRCARCH) obj=include
|
||||
headers_install: __headers
|
||||
$(if $(wildcard $(srctree)/$(hdr-dir)/Kbuild),, \
|
||||
$(error Headers not exportable for the $(SRCARCH) architecture))
|
||||
$(Q)$(MAKE) $(hdr-inst)=include
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst)
|
||||
|
||||
PHONY += headers_check_all
|
||||
headers_check_all: headers_install_all
|
||||
$(Q)for arch in $(HDRARCHES); do \
|
||||
$(MAKE) ARCH=$$arch -f $(srctree)/scripts/Makefile.headersinst obj=include BIASMDIR=-bi-$$arch HDRCHECK=1 ;\
|
||||
done
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh check
|
||||
|
||||
PHONY += headers_check
|
||||
headers_check: headers_install
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.headersinst ARCH=$(SRCARCH) obj=include HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst) HDRCHECK=1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules
|
||||
|
@ -1131,7 +1156,7 @@ MRPROPER_FILES += .config .config.old include/asm .version .old_version \
|
|||
include/linux/autoconf.h include/linux/version.h \
|
||||
include/linux/utsrelease.h \
|
||||
include/linux/bounds.h include/asm*/asm-offsets.h \
|
||||
Module.symvers tags TAGS cscope*
|
||||
Module.symvers Module.markers tags TAGS cscope*
|
||||
|
||||
# clean - Delete most, but leave enough to build external modules
|
||||
#
|
||||
|
@ -1150,7 +1175,7 @@ clean: archclean $(clean-dirs)
|
|||
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
|
||||
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
||||
-o -name '*.symtypes' -o -name 'modules.order' \
|
||||
-o -name 'Module.markers' \) \
|
||||
-o -name 'Module.markers' -o -name '.tmp_*.o.*' \) \
|
||||
-type f -print | xargs rm -f
|
||||
|
||||
# mrproper - Delete all generated files, including .config
|
||||
|
@ -1224,21 +1249,17 @@ help:
|
|||
@echo ' cscope - Generate cscope index'
|
||||
@echo ' kernelrelease - Output the release version string'
|
||||
@echo ' kernelversion - Output the version stored in Makefile'
|
||||
@if [ -r $(srctree)/include/asm-$(SRCARCH)/Kbuild ]; then \
|
||||
echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
||||
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
||||
echo ' (default: $(INSTALL_HDR_PATH))'; \
|
||||
fi
|
||||
@echo ''
|
||||
echo ''
|
||||
@echo 'Static analysers'
|
||||
@echo ' checkstack - Generate a list of stack hogs'
|
||||
@echo ' namespacecheck - Name space analysis on compiled kernel'
|
||||
@echo ' versioncheck - Sanity check on version.h usage'
|
||||
@echo ' includecheck - Check for duplicate included header files'
|
||||
@echo ' export_report - List the usages of all exported symbols'
|
||||
@if [ -r $(srctree)/include/asm-$(SRCARCH)/Kbuild ]; then \
|
||||
echo ' headers_check - Sanity check on exported headers'; \
|
||||
fi
|
||||
@echo ''
|
||||
@echo ' headers_check - Sanity check on exported headers'; \
|
||||
echo ''
|
||||
@echo 'Kernel packaging:'
|
||||
@$(MAKE) $(build)=$(package-dir) help
|
||||
@echo ''
|
||||
|
@ -1411,7 +1432,11 @@ define find-sources
|
|||
\( -name config -o -name 'asm-*' \) -prune \
|
||||
-o -name $1 -print; \
|
||||
for arch in $(ALLINCLUDE_ARCHS) ; do \
|
||||
find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \
|
||||
test -e $(__srctree)include/asm-$${arch} && \
|
||||
find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \
|
||||
-name $1 -print; \
|
||||
test -e $(__srctree)arch/$${arch}/include/asm && \
|
||||
find $(__srctree)arch/$${arch}/include/asm $(RCS_FIND_IGNORE) \
|
||||
-name $1 -print; \
|
||||
done ; \
|
||||
find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
|
||||
|
|
|
@ -360,7 +360,7 @@ config THINKPAD_ACPI_VIDEO
|
|||
If you are not sure, say Y here.
|
||||
|
||||
config THINKPAD_ACPI_HOTKEY_POLL
|
||||
bool "Suport NVRAM polling for hot keys"
|
||||
bool "Support NVRAM polling for hot keys"
|
||||
depends on THINKPAD_ACPI
|
||||
default y
|
||||
---help---
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Top-level Makefile calls into asm-$(ARCH)
|
||||
# List only non-arch directories below
|
||||
|
||||
header-y += asm-generic/
|
||||
header-y += linux/
|
||||
header-y += sound/
|
||||
|
@ -5,5 +8,3 @@ header-y += mtd/
|
|||
header-y += rdma/
|
||||
header-y += video/
|
||||
header-y += drm/
|
||||
|
||||
header-y += asm-$(ARCH)/
|
||||
|
|
|
@ -221,6 +221,7 @@
|
|||
* during second ld run in second ld pass when generating System.map */
|
||||
#define TEXT_TEXT \
|
||||
ALIGN_FUNCTION(); \
|
||||
*(.text.hot) \
|
||||
*(.text) \
|
||||
*(.ref.text) \
|
||||
*(.text.init.refok) \
|
||||
|
@ -230,7 +231,8 @@
|
|||
CPU_KEEP(init.text) \
|
||||
CPU_KEEP(exit.text) \
|
||||
MEM_KEEP(init.text) \
|
||||
MEM_KEEP(exit.text)
|
||||
MEM_KEEP(exit.text) \
|
||||
*(.text.unlikely)
|
||||
|
||||
|
||||
/* sched.text is aling to function alignment to secure we have same
|
||||
|
|
|
@ -171,7 +171,7 @@ config BSD_PROCESS_ACCT_V3
|
|||
process and it's parent. Note that this file format is incompatible
|
||||
with previous v0/v1/v2 file formats, so you will need updated tools
|
||||
for processing it. A preliminary version of these tools is available
|
||||
at <http://www.physik3.uni-rostock.de/tim/kernel/utils/acct/>.
|
||||
at <http://www.gnu.org/software/acct/>.
|
||||
|
||||
config TASKSTATS
|
||||
bool "Export task/process statistics through netlink (EXPERIMENTAL)"
|
||||
|
@ -486,7 +486,7 @@ config PID_NS
|
|||
default n
|
||||
depends on NAMESPACES && EXPERIMENTAL
|
||||
help
|
||||
Suport process id namespaces. This allows having multiple
|
||||
Support process id namespaces. This allows having multiple
|
||||
process with the same pid as long as they are in different
|
||||
pid namespaces. This is a building block of containers.
|
||||
|
||||
|
|
|
@ -1,194 +1,98 @@
|
|||
# ==========================================================================
|
||||
# Installing headers
|
||||
#
|
||||
# header-y files will be installed verbatim
|
||||
# unifdef-y are the files where unifdef will be run before installing files
|
||||
# objhdr-y are generated files that will be installed verbatim
|
||||
# header-y - list files to be installed. They are preprocessed
|
||||
# to remove __KERNEL__ section of the file
|
||||
# unifdef-y - Same as header-y. Obsolete
|
||||
# objhdr-y - Same as header-y but for generated files
|
||||
#
|
||||
# ==========================================================================
|
||||
|
||||
UNIFDEF := scripts/unifdef -U__KERNEL__
|
||||
|
||||
# Eliminate the contents of (and inclusions of) compiler.h
|
||||
HDRSED := sed -e "s/ inline / __inline__ /g" \
|
||||
-e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \
|
||||
-e "s/(__user[[:space:]]\{1,\}/ (/g" \
|
||||
-e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \
|
||||
-e "s/(__force[[:space:]]\{1,\}/ (/g" \
|
||||
-e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \
|
||||
-e "s/(__iomem[[:space:]]\{1,\}/ (/g" \
|
||||
-e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \
|
||||
-e "s/[[:space:]]__attribute_const__$$//" \
|
||||
-e "/^\#include <linux\/compiler.h>/d"
|
||||
|
||||
# called may set destination dir (when installing to asm/)
|
||||
_dst := $(if $(dst),$(dst),$(obj))
|
||||
|
||||
ifeq (,$(patsubst include/asm/%,,$(obj)/))
|
||||
# For producing the generated stuff in include/asm for biarch builds, include
|
||||
# both sets of Kbuild files; we'll generate anything which is mentioned in
|
||||
# _either_ arch, and recurse into subdirectories which are mentioned in either
|
||||
# arch. Since some directories may exist in one but not the other, we must
|
||||
# use $(wildcard...).
|
||||
GENASM := 1
|
||||
archasm := $(subst include/asm,asm-$(ARCH),$(obj))
|
||||
altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj))
|
||||
KBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild)
|
||||
else
|
||||
KBUILDFILES := $(srctree)/$(obj)/Kbuild
|
||||
endif
|
||||
kbuild-file := $(srctree)/$(obj)/Kbuild
|
||||
include $(kbuild-file)
|
||||
|
||||
include $(KBUILDFILES)
|
||||
include scripts/Kbuild.include
|
||||
|
||||
include scripts/Kbuild.include
|
||||
install := $(INSTALL_HDR_PATH)/$(_dst)
|
||||
|
||||
# If this is include/asm-$(ARCH) and there's no $(ALTARCH), then
|
||||
# override $(_dst) so that we install to include/asm directly.
|
||||
# Unless $(BIASMDIR) is set, in which case we're probably doing
|
||||
# a 'headers_install_all' build and we should keep the -$(ARCH)
|
||||
# in the directory name.
|
||||
ifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR))
|
||||
_dst := include/asm
|
||||
endif
|
||||
header-y := $(sort $(header-y) $(unifdef-y))
|
||||
subdirs := $(patsubst %/,%,$(filter %/, $(header-y)))
|
||||
header-y := $(filter-out %/, $(header-y))
|
||||
|
||||
header-y := $(sort $(header-y))
|
||||
unifdef-y := $(sort $(unifdef-y))
|
||||
subdir-y := $(patsubst %/,%,$(filter %/, $(header-y)))
|
||||
header-y := $(filter-out %/, $(header-y))
|
||||
header-y := $(filter-out $(unifdef-y),$(header-y))
|
||||
# files used to track state of install/check
|
||||
install-file := $(install)/.install
|
||||
check-file := $(install)/.check
|
||||
|
||||
# stamp files for header checks
|
||||
check-y := $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y))
|
||||
# all headers files for this dir
|
||||
all-files := $(header-y) $(objhdr-y)
|
||||
input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \
|
||||
$(addprefix $(objtree)/$(obj)/,$(objhdr-y))
|
||||
output-files := $(addprefix $(install)/, $(all-files))
|
||||
|
||||
# Work out what needs to be removed
|
||||
oldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h))
|
||||
unwanted := $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders))
|
||||
oldheaders := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h))
|
||||
unwanted := $(filter-out $(all-files),$(oldheaders))
|
||||
|
||||
oldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h))
|
||||
unwanted += $(filter-out $(check-y),$(oldcheckstamps))
|
||||
# Prefix unwanted with full paths to $(INSTALL_HDR_PATH)
|
||||
unwanted-file := $(addprefix $(install)/, $(unwanted))
|
||||
|
||||
# Prefix them all with full paths to $(INSTALL_HDR_PATH)
|
||||
header-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y))
|
||||
unifdef-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(unifdef-y))
|
||||
objhdr-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y))
|
||||
check-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y))
|
||||
printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
|
||||
|
||||
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
|
||||
file$(if $(word 2, $(all-files)),s))
|
||||
cmd_install = \
|
||||
$(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \
|
||||
$(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \
|
||||
touch $@
|
||||
|
||||
ifdef ALTARCH
|
||||
ifeq ($(obj),include/asm-$(ARCH))
|
||||
altarch-y := altarch-dir
|
||||
endif
|
||||
endif
|
||||
quiet_cmd_remove = REMOVE $(unwanted)
|
||||
cmd_remove = rm -f $(unwanted-file)
|
||||
|
||||
# Make the definitions visible for recursive make invocations
|
||||
export ALTARCH
|
||||
export ARCHDEF
|
||||
export ALTARCHDEF
|
||||
quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files)
|
||||
cmd_check = $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH) \
|
||||
$(addprefix $(install)/, $(all-files)); \
|
||||
touch $@
|
||||
|
||||
quiet_cmd_o_hdr_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
|
||||
cmd_o_hdr_install = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \
|
||||
$(INSTALL_HDR_PATH)/$(_dst)
|
||||
PHONY += __headersinst __headerscheck
|
||||
|
||||
quiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
|
||||
cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \
|
||||
> $@
|
||||
|
||||
quiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
|
||||
cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \
|
||||
| $(HDRSED) > $@ || :
|
||||
|
||||
quiet_cmd_check = CHECK $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@)
|
||||
cmd_check = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \
|
||||
$(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@
|
||||
|
||||
quiet_cmd_remove = REMOVE $(_dst)/$@
|
||||
cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@
|
||||
|
||||
quiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
|
||||
cmd_mkdir = mkdir -p $@
|
||||
|
||||
quiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
|
||||
cmd_gen = \
|
||||
FNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@); \
|
||||
STUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z.- A-Z__`; \
|
||||
(echo "/* File autogenerated by 'make headers_install' */" ; \
|
||||
echo "\#ifndef $$STUBDEF" ; \
|
||||
echo "\#define $$STUBDEF" ; \
|
||||
echo "\# if $(ARCHDEF)" ; \
|
||||
if [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \
|
||||
echo "\# include <$(archasm)/$$FNAME>" ; \
|
||||
else \
|
||||
echo "\# error $(archasm)/$$FNAME does not exist in" \
|
||||
"the $(ARCH) architecture" ; \
|
||||
fi ; \
|
||||
echo "\# elif $(ALTARCHDEF)" ; \
|
||||
if [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \
|
||||
echo "\# include <$(altarchasm)/$$FNAME>" ; \
|
||||
else \
|
||||
echo "\# error $(altarchasm)/$$FNAME does not exist in" \
|
||||
"the $(ALTARCH) architecture" ; \
|
||||
fi ; \
|
||||
echo "\# else" ; \
|
||||
echo "\# warning This machine appears to be" \
|
||||
"neither $(ARCH) nor $(ALTARCH)." ; \
|
||||
echo "\# endif" ; \
|
||||
echo "\#endif /* $$STUBDEF */" ; \
|
||||
) > $@
|
||||
|
||||
.PHONY: __headersinst __headerscheck
|
||||
|
||||
ifdef HDRCHECK
|
||||
__headerscheck: $(subdir-y) $(check-y)
|
||||
@true
|
||||
|
||||
$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h
|
||||
$(call cmd,check)
|
||||
|
||||
# Other dependencies for $(check-y)
|
||||
include /dev/null $(wildcard $(check-y))
|
||||
|
||||
# ... but leave $(check-y) as .PHONY for now until those deps are actually correct.
|
||||
.PHONY: $(check-y)
|
||||
|
||||
else
|
||||
ifndef HDRCHECK
|
||||
# Rules for installing headers
|
||||
__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y)
|
||||
@true
|
||||
__headersinst: $(subdirs) $(install-file)
|
||||
@:
|
||||
|
||||
$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted)
|
||||
|
||||
$(INSTALL_HDR_PATH)/$(_dst):
|
||||
$(call cmd,mkdir)
|
||||
|
||||
.PHONY: $(unwanted)
|
||||
$(unwanted):
|
||||
$(call cmd,remove)
|
||||
|
||||
ifdef GENASM
|
||||
$(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES)
|
||||
$(call cmd,gen)
|
||||
targets += $(install-file)
|
||||
$(install-file): scripts/headers_install.pl $(input-files) FORCE
|
||||
$(if $(unwanted),$(call cmd,remove),)
|
||||
$(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
|
||||
$(call if_changed,install)
|
||||
|
||||
else
|
||||
$(objhdr-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(KBUILDFILES)
|
||||
$(call cmd,o_hdr_install)
|
||||
__headerscheck: $(subdirs) $(check-file)
|
||||
@:
|
||||
|
||||
$(header-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES)
|
||||
$(call cmd,headers_install)
|
||||
targets += $(check-file)
|
||||
$(check-file): scripts/headers_check.pl $(output-files) FORCE
|
||||
$(call if_changed,check)
|
||||
|
||||
$(unifdef-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES)
|
||||
$(call cmd,unifdef)
|
||||
endif
|
||||
endif
|
||||
|
||||
hdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
|
||||
.PHONY: altarch-dir
|
||||
# All the files in the normal arch dir must be created first, since we test
|
||||
# for their existence.
|
||||
altarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y)
|
||||
$(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH)
|
||||
$(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR)
|
||||
|
||||
# Recursion
|
||||
.PHONY: $(subdir-y)
|
||||
$(subdir-y):
|
||||
$(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel)
|
||||
hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
.PHONY: $(subdirs)
|
||||
$(subdirs):
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@
|
||||
|
||||
targets := $(wildcard $(sort $(targets)))
|
||||
cmd_files := $(wildcard \
|
||||
$(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
||||
|
||||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
PHONY += FORCE
|
||||
FORCE: ;
|
||||
|
|
129
scripts/diffconfig
Executable file
129
scripts/diffconfig
Executable file
|
@ -0,0 +1,129 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# diffconfig - a tool to compare .config files.
|
||||
#
|
||||
# originally written in 2006 by Matt Mackall
|
||||
# (at least, this was in his bloatwatch source code)
|
||||
# last worked on 2008 by Tim Bird
|
||||
#
|
||||
|
||||
import sys, os
|
||||
|
||||
def usage():
|
||||
print """Usage: diffconfig [-h] [-m] [<config1> <config2>]
|
||||
|
||||
Diffconfig is a simple utility for comparing two .config files.
|
||||
Using standard diff to compare .config files often includes extraneous and
|
||||
distracting information. This utility produces sorted output with only the
|
||||
changes in configuration values between the two files.
|
||||
|
||||
Added and removed items are shown with a leading plus or minus, respectively.
|
||||
Changed items show the old and new values on a single line.
|
||||
|
||||
If -m is specified, then output will be in "merge" style, which has the
|
||||
changed and new values in kernel config option format.
|
||||
|
||||
If no config files are specified, .config and .config.old are used.
|
||||
|
||||
Example usage:
|
||||
$ diffconfig .config config-with-some-changes
|
||||
-EXT2_FS_XATTR n
|
||||
-EXT2_FS_XIP n
|
||||
CRAMFS n -> y
|
||||
EXT2_FS y -> n
|
||||
LOG_BUF_SHIFT 14 -> 16
|
||||
PRINTK_TIME n -> y
|
||||
"""
|
||||
sys.exit(0)
|
||||
|
||||
# returns a dictionary of name/value pairs for config items in the file
|
||||
def readconfig(config_file):
|
||||
d = {}
|
||||
for line in config_file:
|
||||
line = line[:-1]
|
||||
if line[:7] == "CONFIG_":
|
||||
name, val = line[7:].split("=", 1)
|
||||
d[name] = val
|
||||
if line[-11:] == " is not set":
|
||||
d[line[9:-11]] = "n"
|
||||
return d
|
||||
|
||||
def print_config(op, config, value, new_value):
|
||||
global merge_style
|
||||
|
||||
if merge_style:
|
||||
if new_value:
|
||||
if new_value=="n":
|
||||
print "# CONFIG_%s is not set" % config
|
||||
else:
|
||||
print "CONFIG_%s=%s" % (config, new_value)
|
||||
else:
|
||||
if op=="-":
|
||||
print "-%s %s" % (config, value)
|
||||
elif op=="+":
|
||||
print "+%s %s" % (config, new_value)
|
||||
else:
|
||||
print " %s %s -> %s" % (config, value, new_value)
|
||||
|
||||
def main():
|
||||
global merge_style
|
||||
|
||||
# parse command line args
|
||||
if ("-h" in sys.argv or "--help" in sys.argv):
|
||||
usage()
|
||||
|
||||
merge_style = 0
|
||||
if "-m" in sys.argv:
|
||||
merge_style = 1
|
||||
sys.argv.remove("-m")
|
||||
|
||||
argc = len(sys.argv)
|
||||
if not (argc==1 or argc == 3):
|
||||
print "Error: incorrect number of arguments or unrecognized option"
|
||||
usage()
|
||||
|
||||
if argc == 1:
|
||||
# if no filenames given, assume .config and .config.old
|
||||
build_dir=""
|
||||
if os.environ.has_key("KBUILD_OUTPUT"):
|
||||
build_dir = os.environ["KBUILD_OUTPUT"]+"/"
|
||||
|
||||
configa_filename = build_dir + ".config.old"
|
||||
configb_filename = build_dir + ".config"
|
||||
else:
|
||||
configa_filename = sys.argv[1]
|
||||
configb_filename = sys.argv[2]
|
||||
|
||||
a = readconfig(file(configa_filename))
|
||||
b = readconfig(file(configb_filename))
|
||||
|
||||
# print items in a but not b (accumulate, sort and print)
|
||||
old = []
|
||||
for config in a:
|
||||
if config not in b:
|
||||
old.append(config)
|
||||
old.sort()
|
||||
for config in old:
|
||||
print_config("-", config, a[config], None)
|
||||
del a[config]
|
||||
|
||||
# print items that changed (accumulate, sort, and print)
|
||||
changed = []
|
||||
for config in a:
|
||||
if a[config] != b[config]:
|
||||
changed.append(config)
|
||||
else:
|
||||
del b[config]
|
||||
changed.sort()
|
||||
for config in changed:
|
||||
print_config("->", config, a[config], b[config])
|
||||
del b[config]
|
||||
|
||||
# now print items in b but not in a
|
||||
# (items from b that were in a were removed above)
|
||||
new = b.keys()
|
||||
new.sort()
|
||||
for config in new:
|
||||
print_config("+", config, None, b[config])
|
||||
|
||||
main()
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
for FILE in `grep '^[ \t]*#[ \t]*include[ \t]*<' $2 | cut -f2 -d\< | cut -f1 -d\> | egrep ^linux\|^asm` ; do
|
||||
if [ ! -r $1/$FILE ]; then
|
||||
echo $2 requires $FILE, which does not exist in exported headers
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
# FIXME: List dependencies into $3
|
||||
touch $3
|
41
scripts/headers.sh
Executable file
41
scripts/headers.sh
Executable file
|
@ -0,0 +1,41 @@
|
|||
#!/bin/sh
|
||||
# Run headers_$1 command for all suitable architectures
|
||||
|
||||
# Stop on error
|
||||
set -e
|
||||
|
||||
do_command()
|
||||
{
|
||||
if [ -f ${srctree}/arch/$2/include/asm/Kbuild ]; then
|
||||
make ARCH=$2 KBUILD_HEADERS=$1 headers_$1
|
||||
elif [ -f ${srctree}/include/asm-$2/Kbuild ]; then
|
||||
make ARCH=$2 KBUILD_HEADERS=$1 headers_$1
|
||||
else
|
||||
printf "Ignoring arch: %s\n" ${arch}
|
||||
fi
|
||||
}
|
||||
|
||||
# Do not try this architecture
|
||||
drop="generic um ppc sparc64 cris"
|
||||
|
||||
archs=$(ls ${srctree}/arch)
|
||||
|
||||
for arch in ${archs}; do
|
||||
case ${arch} in
|
||||
um) # no userspace export
|
||||
;;
|
||||
ppc) # headers exported by powerpc
|
||||
;;
|
||||
sparc64) # headers exported by sparc
|
||||
;;
|
||||
cris) # headers export are known broken
|
||||
;;
|
||||
*)
|
||||
if [ -d ${srctree}/arch/${arch} ]; then
|
||||
do_command $1 ${arch}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
56
scripts/headers_check.pl
Normal file
56
scripts/headers_check.pl
Normal file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# headers_check.pl execute a number of trivial consistency checks
|
||||
#
|
||||
# Usage: headers_check.pl dir [files...]
|
||||
# dir: dir to look for included files
|
||||
# arch: architecture
|
||||
# files: list of files to check
|
||||
#
|
||||
# The script reads the supplied files line by line and:
|
||||
#
|
||||
# 1) for each include statement it checks if the
|
||||
# included file actually exists.
|
||||
# Only include files located in asm* and linux* are checked.
|
||||
# The rest are assumed to be system include files.
|
||||
#
|
||||
# 2) TODO: check for leaked CONFIG_ symbols
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my ($dir, $arch, @files) = @ARGV;
|
||||
|
||||
my $ret = 0;
|
||||
my $line;
|
||||
my $lineno = 0;
|
||||
my $filename;
|
||||
|
||||
foreach my $file (@files) {
|
||||
$filename = $file;
|
||||
open(my $fh, '<', "$filename") or die "$filename: $!\n";
|
||||
$lineno = 0;
|
||||
while ($line = <$fh>) {
|
||||
$lineno++;
|
||||
check_include();
|
||||
}
|
||||
close $fh;
|
||||
}
|
||||
exit $ret;
|
||||
|
||||
sub check_include
|
||||
{
|
||||
if ($line =~ m/^\s*#\s*include\s+<((asm|linux).*)>/) {
|
||||
my $inc = $1;
|
||||
my $found;
|
||||
$found = stat($dir . "/" . $inc);
|
||||
if (!$found) {
|
||||
$inc =~ s#asm/#asm-$arch/#;
|
||||
$found = stat($dir . "/" . $inc);
|
||||
}
|
||||
if (!$found) {
|
||||
printf STDERR "$filename:$lineno: included file '$inc' is not exported\n";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
}
|
45
scripts/headers_install.pl
Normal file
45
scripts/headers_install.pl
Normal file
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# headers_install prepare the listed header files for use in
|
||||
# user space and copy the files to their destination.
|
||||
#
|
||||
# Usage: headers_install.pl readdir installdir arch [files...]
|
||||
# readdir: dir to open files
|
||||
# installdir: dir to install the files
|
||||
# arch: current architecture
|
||||
# arch is used to force a reinstallation when the arch
|
||||
# changes because kbuild then detect a command line change.
|
||||
# files: list of files to check
|
||||
#
|
||||
# Step in preparation for users space:
|
||||
# 1) Drop all use of compiler.h definitions
|
||||
# 2) Drop include of compiler.h
|
||||
# 3) Drop all sections defined out by __KERNEL__ (using unifdef)
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my ($readdir, $installdir, $arch, @files) = @ARGV;
|
||||
|
||||
my $unifdef = "scripts/unifdef -U__KERNEL__";
|
||||
|
||||
foreach my $file (@files) {
|
||||
my $tmpfile = "$installdir/$file.tmp";
|
||||
open(my $infile, '<', "$readdir/$file")
|
||||
or die "$readdir/$file: $!\n";
|
||||
open(my $outfile, '>', "$tmpfile") or die "$tmpfile: $!\n";
|
||||
while (my $line = <$infile>) {
|
||||
$line =~ s/([\s(])__user\s/$1/g;
|
||||
$line =~ s/([\s(])__force\s/$1/g;
|
||||
$line =~ s/([\s(])__iomem\s/$1/g;
|
||||
$line =~ s/\s__attribute_const__\s/ /g;
|
||||
$line =~ s/\s__attribute_const__$//g;
|
||||
$line =~ s/^#include <linux\/compiler.h>//;
|
||||
printf $outfile "%s", $line;
|
||||
}
|
||||
close $outfile;
|
||||
close $infile;
|
||||
system $unifdef . " $tmpfile > $installdir/$file";
|
||||
unlink $tmpfile;
|
||||
}
|
||||
exit 0;
|
|
@ -76,7 +76,6 @@ static void check_stdin(void)
|
|||
static int conf_askvalue(struct symbol *sym, const char *def)
|
||||
{
|
||||
enum symbol_type type = sym_get_type(sym);
|
||||
tristate val;
|
||||
|
||||
if (!sym_has_value(sym))
|
||||
printf(_("(NEW) "));
|
||||
|
@ -92,15 +91,6 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||
}
|
||||
|
||||
switch (input_mode) {
|
||||
case set_no:
|
||||
case set_mod:
|
||||
case set_yes:
|
||||
case set_random:
|
||||
if (sym_has_value(sym)) {
|
||||
printf("%s\n", def);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case ask_new:
|
||||
case ask_silent:
|
||||
if (sym_has_value(sym)) {
|
||||
|
@ -112,9 +102,6 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||
fflush(stdout);
|
||||
fgets(line, 128, stdin);
|
||||
return 1;
|
||||
case set_default:
|
||||
printf("%s\n", def);
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -128,52 +115,6 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||
default:
|
||||
;
|
||||
}
|
||||
switch (input_mode) {
|
||||
case set_yes:
|
||||
if (sym_tristate_within_range(sym, yes)) {
|
||||
line[0] = 'y';
|
||||
line[1] = '\n';
|
||||
line[2] = 0;
|
||||
break;
|
||||
}
|
||||
case set_mod:
|
||||
if (type == S_TRISTATE) {
|
||||
if (sym_tristate_within_range(sym, mod)) {
|
||||
line[0] = 'm';
|
||||
line[1] = '\n';
|
||||
line[2] = 0;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (sym_tristate_within_range(sym, yes)) {
|
||||
line[0] = 'y';
|
||||
line[1] = '\n';
|
||||
line[2] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case set_no:
|
||||
if (sym_tristate_within_range(sym, no)) {
|
||||
line[0] = 'n';
|
||||
line[1] = '\n';
|
||||
line[2] = 0;
|
||||
break;
|
||||
}
|
||||
case set_random:
|
||||
do {
|
||||
val = (tristate)(rand() % 3);
|
||||
} while (!sym_tristate_within_range(sym, val));
|
||||
switch (val) {
|
||||
case no: line[0] = 'n'; break;
|
||||
case mod: line[0] = 'm'; break;
|
||||
case yes: line[0] = 'y'; break;
|
||||
}
|
||||
line[1] = '\n';
|
||||
line[2] = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("%s", line);
|
||||
return 1;
|
||||
}
|
||||
|
@ -374,15 +315,7 @@ static int conf_choice(struct menu *menu)
|
|||
else
|
||||
continue;
|
||||
break;
|
||||
case set_random:
|
||||
if (is_new)
|
||||
def = (rand() % cnt) + 1;
|
||||
case set_default:
|
||||
case set_yes:
|
||||
case set_mod:
|
||||
case set_no:
|
||||
cnt = def;
|
||||
printf("%d\n", cnt);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -494,6 +427,43 @@ static void check_conf(struct menu *menu)
|
|||
check_conf(child);
|
||||
}
|
||||
|
||||
static void conf_do_update(void)
|
||||
{
|
||||
/* Update until a loop caused no more changes */
|
||||
do {
|
||||
conf_cnt = 0;
|
||||
check_conf(&rootmenu);
|
||||
} while (conf_cnt);
|
||||
}
|
||||
|
||||
static int conf_silent_update(void)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
if (conf_get_changed()) {
|
||||
name = getenv("KCONFIG_NOSILENTUPDATE");
|
||||
if (name && *name) {
|
||||
fprintf(stderr,
|
||||
_("\n*** Kernel configuration requires explicit update.\n\n"));
|
||||
return 1;
|
||||
}
|
||||
conf_do_update();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int conf_update(void)
|
||||
{
|
||||
rootEntry = &rootmenu;
|
||||
conf(&rootmenu);
|
||||
if (input_mode == ask_all) {
|
||||
input_mode = ask_silent;
|
||||
valid_stdin = 1;
|
||||
}
|
||||
conf_do_update();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
int opt;
|
||||
|
@ -599,36 +569,43 @@ int main(int ac, char **av)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (input_mode != ask_silent) {
|
||||
rootEntry = &rootmenu;
|
||||
conf(&rootmenu);
|
||||
if (input_mode == ask_all) {
|
||||
input_mode = ask_silent;
|
||||
valid_stdin = 1;
|
||||
}
|
||||
} else if (conf_get_changed()) {
|
||||
name = getenv("KCONFIG_NOSILENTUPDATE");
|
||||
if (name && *name) {
|
||||
fprintf(stderr, _("\n*** Kernel configuration requires explicit update.\n\n"));
|
||||
return 1;
|
||||
}
|
||||
} else
|
||||
goto skip_check;
|
||||
|
||||
do {
|
||||
conf_cnt = 0;
|
||||
check_conf(&rootmenu);
|
||||
} while (conf_cnt);
|
||||
if (conf_write(NULL)) {
|
||||
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
|
||||
return 1;
|
||||
switch (input_mode) {
|
||||
case set_no:
|
||||
conf_set_all_new_symbols(def_no);
|
||||
break;
|
||||
case set_yes:
|
||||
conf_set_all_new_symbols(def_yes);
|
||||
break;
|
||||
case set_mod:
|
||||
conf_set_all_new_symbols(def_mod);
|
||||
break;
|
||||
case set_random:
|
||||
conf_set_all_new_symbols(def_random);
|
||||
break;
|
||||
case set_default:
|
||||
conf_set_all_new_symbols(def_default);
|
||||
break;
|
||||
case ask_silent:
|
||||
case ask_new:
|
||||
if (conf_silent_update())
|
||||
exit(1);
|
||||
break;
|
||||
case ask_all:
|
||||
if (conf_update())
|
||||
exit(1);
|
||||
break;
|
||||
}
|
||||
skip_check:
|
||||
|
||||
if (conf_get_changed() && conf_write(NULL)) {
|
||||
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
|
||||
exit(1);
|
||||
}
|
||||
/* ask_silent is used during the build so we shall update autoconf.
|
||||
* All other commands are only used to generate a config.
|
||||
*/
|
||||
if (input_mode == ask_silent && conf_write_autoconf()) {
|
||||
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -812,3 +812,73 @@ void conf_set_changed_callback(void (*fn)(void))
|
|||
{
|
||||
conf_changed_callback = fn;
|
||||
}
|
||||
|
||||
|
||||
void conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||
{
|
||||
struct symbol *sym, *csym;
|
||||
struct property *prop;
|
||||
struct expr *e;
|
||||
int i, cnt, def;
|
||||
|
||||
for_all_symbols(i, sym) {
|
||||
if (sym_has_value(sym))
|
||||
continue;
|
||||
switch (sym_get_type(sym)) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE:
|
||||
switch (mode) {
|
||||
case def_yes:
|
||||
sym->def[S_DEF_USER].tri = yes;
|
||||
break;
|
||||
case def_mod:
|
||||
sym->def[S_DEF_USER].tri = mod;
|
||||
break;
|
||||
case def_no:
|
||||
sym->def[S_DEF_USER].tri = no;
|
||||
break;
|
||||
case def_random:
|
||||
sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
if (!sym_is_choice(sym) || mode != def_random)
|
||||
sym->flags |= SYMBOL_DEF_USER;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (modules_sym)
|
||||
sym_calc_value(modules_sym);
|
||||
|
||||
if (mode != def_random)
|
||||
return;
|
||||
|
||||
for_all_symbols(i, csym) {
|
||||
if (sym_has_value(csym) || !sym_is_choice(csym))
|
||||
continue;
|
||||
|
||||
sym_calc_value(csym);
|
||||
prop = sym_get_choice_prop(csym);
|
||||
def = -1;
|
||||
while (1) {
|
||||
cnt = 0;
|
||||
expr_list_for_each_sym(prop->expr, e, sym) {
|
||||
if (sym->visible == no)
|
||||
continue;
|
||||
if (def == cnt++) {
|
||||
csym->def[S_DEF_USER].val = sym;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (def >= 0 || cnt < 2)
|
||||
break;
|
||||
def = (rand() % cnt) + 1;
|
||||
}
|
||||
csym->flags |= SYMBOL_DEF_USER;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,14 @@ extern "C" {
|
|||
#define TF_PARAM 0x0002
|
||||
#define TF_OPTION 0x0004
|
||||
|
||||
enum conf_def_mode {
|
||||
def_default,
|
||||
def_yes,
|
||||
def_mod,
|
||||
def_no,
|
||||
def_random
|
||||
};
|
||||
|
||||
#define T_OPT_MODULES 1
|
||||
#define T_OPT_DEFCONFIG_LIST 2
|
||||
#define T_OPT_ENV 3
|
||||
|
@ -69,6 +77,7 @@ const char *conf_get_configname(void);
|
|||
char *conf_get_default_confname(void);
|
||||
void sym_set_change_count(int count);
|
||||
void sym_add_change_count(int count);
|
||||
void conf_set_all_new_symbols(enum conf_def_mode mode);
|
||||
|
||||
/* kconfig_load.c */
|
||||
void kconfig_load(void);
|
||||
|
|
|
@ -1643,6 +1643,7 @@ sub dump_function($$) {
|
|||
$prototype =~ s/^__always_inline +//;
|
||||
$prototype =~ s/^noinline +//;
|
||||
$prototype =~ s/__devinit +//;
|
||||
$prototype =~ s/__init +//;
|
||||
$prototype =~ s/^#define\s+//; #ak added
|
||||
$prototype =~ s/__attribute__\s*\(\([a-z,]*\)\)//;
|
||||
|
||||
|
|
|
@ -12,7 +12,9 @@ cd "${1:-.}" || usage
|
|||
if head=`git rev-parse --verify HEAD 2>/dev/null`; then
|
||||
# Do we have an untagged version?
|
||||
if git name-rev --tags HEAD | grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$' > /dev/null; then
|
||||
git describe | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
|
||||
if tag=`git describe 2>/dev/null`; then
|
||||
echo $tag | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
|
||||
fi
|
||||
fi
|
||||
|
||||
# Are there uncommitted changes?
|
||||
|
|
Loading…
Reference in a new issue