Merge branch 'for-33' of git://repo.or.cz/linux-kbuild

* 'for-33' of git://repo.or.cz/linux-kbuild: (29 commits)
  net: fix for utsrelease.h moving to generated
  gen_init_cpio: fixed fwrite warning
  kbuild: fix make clean after mismerge
  kbuild: generate modules.builtin
  genksyms: properly consider  EXPORT_UNUSED_SYMBOL{,_GPL}()
  score: add asm/asm-offsets.h wrapper
  unifdef: update to upstream revision 1.190
  kbuild: specify absolute paths for cscope
  kbuild: create include/generated in silentoldconfig
  scripts/package: deb-pkg: use fakeroot if available
  scripts/package: add KBUILD_PKG_ROOTCMD variable
  scripts/package: tar-pkg: use tar --owner=root
  Kbuild: clean up marker
  net: add net_tstamp.h to headers_install
  kbuild: move utsrelease.h to include/generated
  kbuild: move autoconf.h to include/generated
  drop explicit include of autoconf.h
  kbuild: move compile.h to include/generated
  kbuild: drop include/asm
  kbuild: do not check for include/asm-$ARCH
  ...

Fixed non-conflicting clean merge of modpost.c as per comments from
Stephen Rothwell (modpost.c had grown an include of linux/autoconf.h
that needed to be changed to generated/autoconf.h)
This commit is contained in:
Linus Torvalds 2009-12-17 07:23:42 -08:00
commit 5a865c0606
90 changed files with 577 additions and 422 deletions

7
.gitignore vendored
View file

@ -22,6 +22,7 @@
*.lst *.lst
*.symtypes *.symtypes
*.order *.order
modules.builtin
*.elf *.elf
*.bin *.bin
*.gz *.gz
@ -45,14 +46,8 @@ Module.symvers
# #
# Generated include files # Generated include files
# #
include/asm
include/asm-*/asm-offsets.h
include/config include/config
include/linux/autoconf.h
include/linux/compile.h
include/linux/version.h include/linux/version.h
include/linux/utsrelease.h
include/linux/bounds.h
include/generated include/generated
# stgit generated dirs # stgit generated dirs

View file

@ -103,6 +103,7 @@ gconf
gen-devlist gen-devlist
gen_crc32table gen_crc32table
gen_init_cpio gen_init_cpio
generated
genheaders genheaders
genksyms genksyms
*_gray256.c *_gray256.c

View file

@ -1,3 +1,17 @@
Output files
modules.order
--------------------------------------------------
This file records the order in which modules appear in Makefiles. This
is used by modprobe to deterministically resolve aliases that match
multiple modules.
modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
Environment variables Environment variables
KCPPFLAGS KCPPFLAGS

View file

@ -103,10 +103,16 @@ KCONFIG_AUTOCONFIG
This environment variable can be set to specify the path & name of the This environment variable can be set to specify the path & name of the
"auto.conf" file. Its default value is "include/config/auto.conf". "auto.conf" file. Its default value is "include/config/auto.conf".
KCONFIG_TRISTATE
--------------------------------------------------
This environment variable can be set to specify the path & name of the
"tristate.conf" file. Its default value is "include/config/tristate.conf".
KCONFIG_AUTOHEADER KCONFIG_AUTOHEADER
-------------------------------------------------- --------------------------------------------------
This environment variable can be set to specify the path & name of the This environment variable can be set to specify the path & name of the
"autoconf.h" (header) file. Its default value is "include/linux/autoconf.h". "autoconf.h" (header) file.
Its default value is "include/generated/autoconf.h".
====================================================================== ======================================================================

4
Kbuild
View file

@ -8,7 +8,7 @@
##### #####
# 1) Generate bounds.h # 1) Generate bounds.h
bounds-file := include/linux/bounds.h bounds-file := include/generated/bounds.h
always := $(bounds-file) always := $(bounds-file)
targets := $(bounds-file) kernel/bounds.s targets := $(bounds-file) kernel/bounds.s
@ -43,7 +43,7 @@ $(obj)/$(bounds-file): kernel/bounds.s Kbuild
# 2) Generate asm-offsets.h # 2) Generate asm-offsets.h
# #
offsets-file := include/asm/asm-offsets.h offsets-file := include/generated/asm-offsets.h
always += $(offsets-file) always += $(offsets-file)
targets += $(offsets-file) targets += $(offsets-file)

View file

@ -5434,6 +5434,12 @@ F: drivers/uwb/*
F: include/linux/uwb.h F: include/linux/uwb.h
F: include/linux/uwb/ F: include/linux/uwb/
UNIFDEF
M: Tony Finch <dot@dotat.at>
W: http://dotat.at/prog/unifdef
S: Maintained
F: scripts/unifdef.c
UNIFORM CDROM DRIVER UNIFORM CDROM DRIVER
M: Jens Axboe <axboe@kernel.dk> M: Jens Axboe <axboe@kernel.dk>
W: http://www.kernel.dk W: http://www.kernel.dk

View file

@ -334,10 +334,9 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
# Use LINUXINCLUDE when you must reference the include/ directory. # Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option # Needed to be compatible with the O= option
LINUXINCLUDE := -Iinclude \ LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include -Iinclude \
$(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \ $(if $(KBUILD_SRC), -I$(srctree)/include) \
-I$(srctree)/arch/$(hdr-arch)/include \ -include include/generated/autoconf.h
-include include/linux/autoconf.h
KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CPPFLAGS := -D__KERNEL__
@ -465,7 +464,7 @@ ifeq ($(KBUILD_EXTMOD),)
# Carefully list dependencies so we do not try to build scripts twice # Carefully list dependencies so we do not try to build scripts twice
# in parallel # in parallel
PHONY += scripts PHONY += scripts
scripts: scripts_basic include/config/auto.conf scripts: scripts_basic include/config/auto.conf include/config/tristate.conf
$(Q)$(MAKE) $(build)=$(@) $(Q)$(MAKE) $(build)=$(@)
# Objects we will link into vmlinux / subdirs we need to visit # Objects we will link into vmlinux / subdirs we need to visit
@ -492,18 +491,18 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
# with it and forgot to run make oldconfig. # with it and forgot to run make oldconfig.
# if auto.conf.cmd is missing then we are probably in a cleaned tree so # if auto.conf.cmd is missing then we are probably in a cleaned tree so
# we execute the config step to be sure to catch updated Kconfig files # we execute the config step to be sure to catch updated Kconfig files
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
else else
# external modules needs include/linux/autoconf.h and include/config/auto.conf # external modules needs include/generated/autoconf.h and include/config/auto.conf
# but do not care if they are up-to-date. Use auto.conf to trigger the test # but do not care if they are up-to-date. Use auto.conf to trigger the test
PHONY += include/config/auto.conf PHONY += include/config/auto.conf
include/config/auto.conf: include/config/auto.conf:
$(Q)test -e include/linux/autoconf.h -a -e $@ || ( \ $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
echo; \ echo; \
echo " ERROR: Kernel configuration is invalid."; \ echo " ERROR: Kernel configuration is invalid."; \
echo " include/linux/autoconf.h or $@ are missing."; \ echo " include/generated/autoconf.h or $@ are missing.";\
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo; \ echo; \
/bin/false) /bin/false)
@ -877,6 +876,9 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
PHONY += $(vmlinux-dirs) PHONY += $(vmlinux-dirs)
$(vmlinux-dirs): prepare scripts $(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@ $(Q)$(MAKE) $(build)=$@
ifdef CONFIG_MODULES
$(Q)$(MAKE) $(modbuiltin)=$@
endif
# Build the kernel release string # Build the kernel release string
# #
@ -955,7 +957,6 @@ PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
# prepare3 is used to check if we are building in a separate output directory, # prepare3 is used to check if we are building in a separate output directory,
# and if so do: # and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree) # 1) Check that make has not been executed in the kernel src $(srctree)
# 2) Create the include2 directory, used for the second asm symlink
prepare3: include/config/kernel.release prepare3: include/config/kernel.release
ifneq ($(KBUILD_SRC),) ifneq ($(KBUILD_SRC),)
@$(kecho) ' Using $(srctree) as source for kernel' @$(kecho) ' Using $(srctree) as source for kernel'
@ -964,17 +965,13 @@ ifneq ($(KBUILD_SRC),)
echo " in the '$(srctree)' directory.";\ echo " in the '$(srctree)' directory.";\
/bin/false; \ /bin/false; \
fi; fi;
$(Q)if [ ! -d include2 ]; then \
mkdir -p include2; \
ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \
fi
endif endif
# prepare2 creates a makefile if using a separate output directory # prepare2 creates a makefile if using a separate output directory
prepare2: prepare3 outputmakefile prepare2: prepare3 outputmakefile
prepare1: prepare2 include/linux/version.h include/linux/utsrelease.h \ prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
include/asm include/config/auto.conf include/config/auto.conf
$(cmd_crmodverdir) $(cmd_crmodverdir)
archprepare: prepare1 scripts_basic archprepare: prepare1 scripts_basic
@ -986,42 +983,6 @@ prepare0: archprepare FORCE
# All the preparing.. # All the preparing..
prepare: prepare0 prepare: prepare0
# The asm symlink changes when $(ARCH) changes.
# Detect this and ask user to run make mrproper
# If asm is a stale symlink (point to dir that does not exist) remove it
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; \
test -e $$asmlink || rm include/asm; \
elif [ -d include/asm ]; then \
echo "ERROR: $@ is a directory but a symlink was expected";\
exit 1; \
fi
endef
# We create the target directory of the symlink if it does
# not exist so the test in check-symlink works and we have a
# directory for generated filesas used by some architectures.
define create-symlink
if [ ! -L include/asm ]; then \
$(kecho) ' 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 # Generate some files
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@ -1046,7 +1007,7 @@ endef
include/linux/version.h: $(srctree)/Makefile FORCE include/linux/version.h: $(srctree)/Makefile FORCE
$(call filechk,version.h) $(call filechk,version.h)
include/linux/utsrelease.h: include/config/kernel.release FORCE include/generated/utsrelease.h: include/config/kernel.release FORCE
$(call filechk,utsrelease.h) $(call filechk,utsrelease.h)
PHONY += headerdep PHONY += headerdep
@ -1076,11 +1037,6 @@ firmware_install: FORCE
export INSTALL_HDR_PATH = $(objtree)/usr export INSTALL_HDR_PATH = $(objtree)/usr
hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj 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) # 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) hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
@ -1095,10 +1051,10 @@ headers_install_all:
PHONY += headers_install PHONY += headers_install
headers_install: __headers headers_install: __headers
$(if $(wildcard $(srctree)/$(hdr-dir)/Kbuild),, \ $(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild),, \
$(error Headers not exportable for the $(SRCARCH) architecture)) $(error Headers not exportable for the $(SRCARCH) architecture))
$(Q)$(MAKE) $(hdr-inst)=include $(Q)$(MAKE) $(hdr-inst)=include
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst) $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst)
PHONY += headers_check_all PHONY += headers_check_all
headers_check_all: headers_install_all headers_check_all: headers_install_all
@ -1107,7 +1063,7 @@ headers_check_all: headers_install_all
PHONY += headers_check PHONY += headers_check
headers_check: headers_install headers_check: headers_install
$(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst) HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst) HDRCHECK=1
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Modules # Modules
@ -1127,6 +1083,7 @@ all: modules
PHONY += modules PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin
@$(kecho) ' Building modules, stage 2.'; @$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
@ -1156,6 +1113,7 @@ _modinst_:
ln -s $(objtree) $(MODLIB)/build ; \ ln -s $(objtree) $(MODLIB)/build ; \
fi fi
@cp -f $(objtree)/modules.order $(MODLIB)/ @cp -f $(objtree)/modules.order $(MODLIB)/
@cp -f $(objtree)/modules.builtin $(MODLIB)/
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
# This depmod is only for convenience to give the initial # This depmod is only for convenience to give the initial
@ -1194,12 +1152,10 @@ CLEAN_FILES += vmlinux System.map \
.tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
# Directories & files removed with 'make mrproper' # Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include2 usr/include include/generated MRPROPER_DIRS += include/config usr/include include/generated
MRPROPER_FILES += .config .config.old include/asm .version .old_version \ MRPROPER_FILES += .config .config.old .version .old_version \
include/linux/autoconf.h include/linux/version.h \ include/linux/version.h \
include/linux/utsrelease.h \ Module.symvers tags TAGS cscope*
include/linux/bounds.h include/asm*/asm-offsets.h \
Module.symvers Module.markers tags TAGS cscope*
# clean - Delete most, but leave enough to build external modules # clean - Delete most, but leave enough to build external modules
# #
@ -1218,7 +1174,7 @@ clean: archclean $(clean-dirs)
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.symtypes' -o -name 'modules.order' \ -o -name '*.symtypes' -o -name 'modules.order' \
-o -name 'Module.markers' -o -name '.tmp_*.o.*' \ -o -name modules.builtin -o -name '.tmp_*.o.*' \
-o -name '*.gcno' \) -type f -print | xargs rm -f -o -name '*.gcno' \) -type f -print | xargs rm -f
# mrproper - Delete all generated files, including .config # mrproper - Delete all generated files, including .config
@ -1416,8 +1372,8 @@ $(clean-dirs):
clean: rm-dirs := $(MODVERDIR) clean: rm-dirs := $(MODVERDIR)
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \ clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \
$(KBUILD_EXTMOD)/Module.markers \ $(KBUILD_EXTMOD)/modules.order \
$(KBUILD_EXTMOD)/modules.order $(KBUILD_EXTMOD)/modules.builtin
clean: $(clean-dirs) clean: $(clean-dirs)
$(call cmd,rmdirs) $(call cmd,rmdirs)
$(call cmd,rmfiles) $(call cmd,rmfiles)

View file

@ -9,7 +9,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/system.h> #include <asm/system.h>

View file

@ -11,7 +11,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/system.h> #include <asm/system.h>

View file

@ -7,7 +7,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/system.h> #include <asm/system.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -242,15 +242,8 @@ all: $(KBUILD_IMAGE)
boot := arch/arm/boot boot := arch/arm/boot
# Update machine arch and proc symlinks if something which affects archprepare:
# them changed. We use .arch to indicate when they were updated $(Q)$(MAKE) $(build)=arch/arm/tools include/generated/mach-types.h
# last, otherwise make uses the target directory mtime.
archprepare: maketools
PHONY += maketools FORCE
maketools: include/linux/version.h FORCE
$(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
# Convert bzImage to zImage # Convert bzImage to zImage
bzImage: zImage bzImage: zImage
@ -261,9 +254,6 @@ zImage Image xipImage bootpImage uImage: vmlinux
zinstall install: vmlinux zinstall install: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
CLEAN_FILES += include/asm-arm/mach-types.h \
include/asm-arm/arch include/asm-arm/.arch
# We use MRPROPER_FILES and CLEAN_FILES now # We use MRPROPER_FILES and CLEAN_FILES now
archclean: archclean:
$(Q)$(MAKE) $(clean)=$(boot) $(Q)$(MAKE) $(clean)=$(boot)

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/mach-types.h>

View file

@ -4,7 +4,7 @@
# Copyright (C) 2001 Russell King # Copyright (C) 2001 Russell King
# #
include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
@echo ' Generating $@' @echo ' Generating $@'
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

View file

@ -1,6 +1,6 @@
#!/bin/awk #!/bin/awk
# #
# Awk script to generate include/asm-arm/mach-types.h # Awk script to generate include/generated/mach-types.h
# #
BEGIN { nr = 0 } BEGIN { nr = 0 }
/^#/ { next } /^#/ { next }

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -10,7 +10,6 @@
* The macros found in mmu_defs_asm.h uses the ## concatenation operator, so * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so
* -traditional must not be used when assembling this file. * -traditional must not be used when assembling this file.
*/ */
#include <linux/autoconf.h>
#include <arch/memmap.h> #include <arch/memmap.h>
#include <hwregs/reg_rdwr.h> #include <hwregs/reg_rdwr.h>
#include <hwregs/intr_vect.h> #include <hwregs/intr_vect.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -1,6 +1,5 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <linux/autoconf.h>
/* /*
* Generate definitions needed by assembly language modules. * Generate definitions needed by assembly language modules.

View file

@ -8,7 +8,6 @@
* the kernel has booted. * the kernel has booted.
*/ */
#include <linux/autoconf.h>
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/page.h> #include <asm/page.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/delay.h> #include <linux/delay.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -103,4 +103,4 @@ archprepare: make_nr_irqs_h FORCE
PHONY += make_nr_irqs_h FORCE PHONY += make_nr_irqs_h FORCE
make_nr_irqs_h: FORCE make_nr_irqs_h: FORCE
$(Q)$(MAKE) $(build)=arch/ia64/kernel include/asm-ia64/nr-irqs.h $(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -13,7 +13,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <asm-ia64/nr-irqs.h> #include <generated/nr-irqs.h>
static __inline__ int static __inline__ int
irq_canonicalize (int irq) irq_canonicalize (int irq)

View file

@ -81,17 +81,14 @@ define cmd_nr_irqs
endef endef
# We use internal kbuild rules to avoid the "is up to date" message from make # We use internal kbuild rules to avoid the "is up to date" message from make
arch/$(SRCARCH)/kernel/nr-irqs.s: $(srctree)/arch/$(SRCARCH)/kernel/nr-irqs.c \ arch/$(SRCARCH)/kernel/nr-irqs.s: arch/$(SRCARCH)/kernel/nr-irqs.c
$(wildcard $(srctree)/include/asm-ia64/*/irq.h)
$(Q)mkdir -p $(dir $@) $(Q)mkdir -p $(dir $@)
$(call if_changed_dep,cc_s_c) $(call if_changed_dep,cc_s_c)
include/asm-ia64/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s include/generated/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s
$(Q)mkdir -p $(dir $@) $(Q)mkdir -p $(dir $@)
$(call cmd,nr_irqs) $(call cmd,nr_irqs)
clean-files += $(objtree)/include/asm-ia64/nr-irqs.h
# #
# native ivt.S, entry.S and fsys.S # native ivt.S, entry.S and fsys.S
# #

View file

@ -22,7 +22,6 @@
* *
*/ */
#include <linux/autoconf.h>
#include <linux/kvm_host.h> #include <linux/kvm_host.h>
#include <linux/kbuild.h> #include <linux/kbuild.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -196,7 +196,7 @@
* for them and trying to understand what they mean. * for them and trying to understand what they mean.
* *
* CONFIG_xxx: These are the obvious machine configuration defines created * CONFIG_xxx: These are the obvious machine configuration defines created
* during configuration. These are defined in include/linux/autoconf.h. * during configuration. These are defined in autoconf.h.
* *
* CONSOLE: There is support for head.S console in this file. This * CONSOLE: There is support for head.S console in this file. This
* console can talk to a Mac frame buffer, but could easily be extrapolated * console can talk to a Mac frame buffer, but could easily be extrapolated

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -10,7 +10,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/of.h> #include <linux/of.h>
#include <asm/prom.h> #include <asm/prom.h>

View file

@ -14,7 +14,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/cputable.h> #include <asm/cputable.h>

View file

@ -13,10 +13,8 @@ SPU_CC := $(SPU_CROSS)gcc
SPU_AS := $(SPU_CROSS)gcc SPU_AS := $(SPU_CROSS)gcc
SPU_LD := $(SPU_CROSS)ld SPU_LD := $(SPU_CROSS)ld
SPU_OBJCOPY := $(SPU_CROSS)objcopy SPU_OBJCOPY := $(SPU_CROSS)objcopy
SPU_CFLAGS := -O2 -Wall -I$(srctree)/include \ SPU_CFLAGS := -O2 -Wall -I$(srctree)/include -D__KERNEL__
-I$(objtree)/include2 -D__KERNEL__ SPU_AFLAGS := -c -D__ASSEMBLY__ -I$(srctree)/include -D__KERNEL__
SPU_AFLAGS := -c -D__ASSEMBLY__ -I$(srctree)/include \
-I$(objtree)/include2 -D__KERNEL__
SPU_LDFLAGS := -N -Ttext=0x0 SPU_LDFLAGS := -N -Ttext=0x0
$(obj)/switch.o: $(obj)/spu_save_dump.h $(obj)/spu_restore_dump.h $(obj)/switch.o: $(obj)/spu_save_dump.h $(obj)/spu_restore_dump.h

View file

@ -23,7 +23,7 @@
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/adb.h> #include <linux/adb.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/delay.h> #include <linux/delay.h>

View file

@ -12,7 +12,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/page.h> #include <asm/page.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -205,10 +205,7 @@ libs-$(CONFIG_SUPERH64) := arch/sh/lib64/ $(libs-y)
BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.srec uImage.bin \ BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.srec uImage.bin \
zImage vmlinux.srec romImage zImage vmlinux.srec romImage
PHONY += maketools $(BOOT_TARGETS) FORCE PHONY += $(BOOT_TARGETS)
maketools: include/linux/version.h FORCE
$(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
all: $(KBUILD_IMAGE) all: $(KBUILD_IMAGE)
@ -217,7 +214,8 @@ $(BOOT_TARGETS): vmlinux
compressed: zImage compressed: zImage
archprepare: maketools archprepare:
$(Q)$(MAKE) $(build)=arch/sh/tools include/generated/machtypes.h
archclean: archclean:
$(Q)$(MAKE) $(clean)=$(boot) $(Q)$(MAKE) $(clean)=$(boot)
@ -234,5 +232,3 @@ define archhelp
@echo ' uImage.bz2 - Kernel-only image for U-Boot (bzip2)' @echo ' uImage.bz2 - Kernel-only image for U-Boot (bzip2)'
@echo ' uImage.lzma - Kernel-only image for U-Boot (lzma)' @echo ' uImage.lzma - Kernel-only image for U-Boot (lzma)'
endef endef
CLEAN_FILES += include/asm-sh/machtypes.h

View file

@ -15,7 +15,7 @@
#include <mach/lboxre2.h> #include <mach/lboxre2.h>
#include <mach/r2d.h> #include <mach/r2d.h>
#include "pci-sh4.h" #include "pci-sh4.h"
#include <asm/machtypes.h> #include <generated/machtypes.h>
#define PCIMCR_MRSET_OFF 0xBFFFFFFF #define PCIMCR_MRSET_OFF 0xBFFFFFFF
#define PCIMCR_RFSH_OFF 0xFFFFFFFB #define PCIMCR_RFSH_OFF 0xFFFFFFFB

View file

@ -1 +0,0 @@
machtypes.h

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -12,7 +12,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/time.h> #include <linux/time.h>
#include <asm/machtypes.h> #include <generated/machtypes.h>
struct sh_machine_vector { struct sh_machine_vector {
void (*mv_setup)(char **cmdline_p); void (*mv_setup)(char **cmdline_p);

View file

@ -10,7 +10,7 @@
# Shamelessly cloned from ARM. # Shamelessly cloned from ARM.
# #
include/asm-sh/machtypes.h: $(src)/gen-mach-types $(src)/mach-types include/generated/machtypes.h: $(src)/gen-mach-types $(src)/mach-types
@echo ' Generating $@' @echo ' Generating $@'
$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi $(Q)mkdir -p $(dir $@)
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

View file

@ -1,6 +1,6 @@
#!/bin/awk #!/bin/awk
# #
# Awk script to generate include/asm-sh/machtypes.h # Awk script to generate include/generated/machtypes.h
# Heavily based on arch/arm/tools/gen-mach-types # Heavily based on arch/arm/tools/gen-mach-types
# #
BEGIN { nr = 0 } BEGIN { nr = 0 }

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -149,6 +149,6 @@ $(SHARED_HEADERS)/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s
$(SHARED_HEADERS)/kern_constants.h: $(SHARED_HEADERS)/kern_constants.h:
$(Q)mkdir -p $(dir $@) $(Q)mkdir -p $(dir $@)
$(Q)echo '#include "../../../../include/asm/asm-offsets.h"' >$@ $(Q)echo '#include "../../../../include/generated/asm-offsets.h"' >$@
export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -16,7 +16,7 @@
*/ */
#include <asm/segment.h> #include <asm/segment.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <asm/boot.h> #include <asm/boot.h>
#include <asm/e820.h> #include <asm/e820.h>
#include <asm/page_types.h> #include <asm/page_types.h>

View file

@ -13,8 +13,8 @@
*/ */
#include "boot.h" #include "boot.h"
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/compile.h> #include <generated/compile.h>
const char kernel_version[] = const char kernel_version[] =
UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") "

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -0,0 +1 @@
#include <generated/asm-offsets.h>

View file

@ -21,7 +21,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/autoconf.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>

View file

@ -1,8 +1,6 @@
#ifndef __HID_LG_H #ifndef __HID_LG_H
#define __HID_LG_H #define __HID_LG_H
#include <linux/autoconf.h>
#ifdef CONFIG_LOGITECH_FF #ifdef CONFIG_LOGITECH_FF
int lgff_init(struct hid_device *hdev); int lgff_init(struct hid_device *hdev);
#else #else

View file

@ -63,7 +63,7 @@
#ifndef __iwl_core_h__ #ifndef __iwl_core_h__
#define __iwl_core_h__ #define __iwl_core_h__
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
/************************ /************************
* forward declarations * * forward declarations *

View file

@ -51,7 +51,6 @@
#include <linux/dmi.h> #include <linux/dmi.h>
#include <linux/backlight.h> #include <linux/backlight.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/autoconf.h>
#define COMPAL_DRIVER_VERSION "0.2.6" #define COMPAL_DRIVER_VERSION "0.2.6"

View file

@ -29,7 +29,6 @@
* driver requests - some may support multiple options */ * driver requests - some may support multiple options */
#include <linux/autoconf.h>
#include "iio.h" #include "iio.h"
#include "ring_generic.h" #include "ring_generic.h"

View file

@ -55,7 +55,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/io.h> #include <linux/io.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View file

@ -118,6 +118,7 @@ header-y += mtio.h
header-y += ncp_no.h header-y += ncp_no.h
header-y += neighbour.h header-y += neighbour.h
header-y += net_dropmon.h header-y += net_dropmon.h
header-y += net_tstamp.h
header-y += netfilter_arp.h header-y += netfilter_arp.h
header-y += netrom.h header-y += netrom.h
header-y += nfs2.h header-y += nfs2.h

View file

@ -1,8 +1,6 @@
#ifndef LINUX_MM_DEBUG_H #ifndef LINUX_MM_DEBUG_H
#define LINUX_MM_DEBUG_H 1 #define LINUX_MM_DEBUG_H 1
#include <linux/autoconf.h>
#ifdef CONFIG_DEBUG_VM #ifdef CONFIG_DEBUG_VM
#define VM_BUG_ON(cond) BUG_ON(cond) #define VM_BUG_ON(cond) BUG_ON(cond)
#else #else

View file

@ -15,7 +15,7 @@
#include <linux/seqlock.h> #include <linux/seqlock.h>
#include <linux/nodemask.h> #include <linux/nodemask.h>
#include <linux/pageblock-flags.h> #include <linux/pageblock-flags.h>
#include <linux/bounds.h> #include <generated/bounds.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/page.h> #include <asm/page.h>

View file

@ -8,7 +8,7 @@
#include <linux/types.h> #include <linux/types.h>
#ifndef __GENERATING_BOUNDS_H #ifndef __GENERATING_BOUNDS_H
#include <linux/mm_types.h> #include <linux/mm_types.h>
#include <linux/bounds.h> #include <generated/bounds.h>
#endif /* !__GENERATING_BOUNDS_H */ #endif /* !__GENERATING_BOUNDS_H */
/* /*

View file

@ -1,4 +1,4 @@
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/module.h> #include <linux/module.h>
/* Simply sanity version stamp for modules. */ /* Simply sanity version stamp for modules. */

View file

@ -15,12 +15,8 @@ mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o
mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o
mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o
# files to be removed upon make clean
clean-files := ../include/linux/compile.h
# dependencies on generated files need to be listed explicitly # dependencies on generated files need to be listed explicitly
$(obj)/version.o: include/generated/compile.h
$(obj)/version.o: include/linux/compile.h
# compile.h changes depending on hostname, generation number, etc, # compile.h changes depending on hostname, generation number, etc,
# so we regenerate it always. # so we regenerate it always.
@ -30,7 +26,7 @@ $(obj)/version.o: include/linux/compile.h
chk_compile.h = : chk_compile.h = :
quiet_chk_compile.h = echo ' CHK $@' quiet_chk_compile.h = echo ' CHK $@'
silent_chk_compile.h = : silent_chk_compile.h = :
include/linux/compile.h: FORCE include/generated/compile.h: FORCE
@$($(quiet)chk_compile.h) @$($(quiet)chk_compile.h)
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)" "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)"

View file

@ -6,11 +6,11 @@
* May be freely distributed as part of Linux. * May be freely distributed as part of Linux.
*/ */
#include <linux/compile.h> #include <generated/compile.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/uts.h> #include <linux/uts.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/version.h> #include <linux/version.h>
#ifndef CONFIG_KALLSYMS #ifndef CONFIG_KALLSYMS

View file

@ -12,7 +12,7 @@
void foo(void) void foo(void)
{ {
/* The enum constants to put into include/linux/bounds.h */ /* The enum constants to put into include/generated/bounds.h */
DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS); DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS);
DEFINE(MAX_NR_ZONES, __MAX_NR_ZONES); DEFINE(MAX_NR_ZONES, __MAX_NR_ZONES);
/* End of constants */ /* End of constants */

View file

@ -21,7 +21,7 @@
#include <linux/hardirq.h> #include <linux/hardirq.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/numa.h> #include <linux/numa.h>
#include <linux/suspend.h> #include <linux/suspend.h>

View file

@ -12,7 +12,7 @@
* Copyright (C) 2004 William Lee Irwin III * Copyright (C) 2004 William Lee Irwin III
*/ */
#include <linux/ring_buffer.h> #include <linux/ring_buffer.h>
#include <linux/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/stacktrace.h> #include <linux/stacktrace.h>
#include <linux/writeback.h> #include <linux/writeback.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>

View file

@ -149,6 +149,12 @@ ld-option = $(call try-run,\
# $(Q)$(MAKE) $(build)=dir # $(Q)$(MAKE) $(build)=dir
build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
###
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.modbuiltin obj=
# Usage:
# $(Q)$(MAKE) $(modbuiltin)=dir
modbuiltin := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.modbuiltin obj
# Prefix -I with $(srctree) if it is not an absolute path. # Prefix -I with $(srctree) if it is not an absolute path.
# skip if -I has no parameter # skip if -I has no parameter
addtree = $(if $(patsubst -I%,%,$(1)), \ addtree = $(if $(patsubst -I%,%,$(1)), \

View file

@ -213,7 +213,7 @@ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
# Bzip2 and LZMA do not include size in file... so we have to fake that; # Bzip2 and LZMA do not include size in file... so we have to fake that;
# append the size as a 32-bit littleendian number as gzip does. # append the size as a 32-bit littleendian number as gzip does.
size_append = /bin/echo -ne $(shell \ size_append = printf $(shell \
dec_size=0; \ dec_size=0; \
for F in $1; do \ for F in $1; do \
fsize=$$(stat -c "%s" $$F); \ fsize=$$(stat -c "%s" $$F); \

View file

@ -0,0 +1,55 @@
# ==========================================================================
# Generating modules.builtin
# ==========================================================================
src := $(obj)
PHONY := __modbuiltin
__modbuiltin:
-include include/config/auto.conf
# tristate.conf sets tristate variables to uppercase 'Y' or 'M'
# That way, we get the list of built-in modules in obj-Y
-include include/config/tristate.conf
include scripts/Kbuild.include
# The filename Kbuild has precedence over Makefile
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
include $(kbuild-file)
include scripts/Makefile.lib
__subdir-Y := $(patsubst %/,%,$(filter %/, $(obj-Y)))
subdir-Y += $(__subdir-Y)
subdir-ym := $(sort $(subdir-y) $(subdir-Y) $(subdir-m))
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
obj-Y := $(addprefix $(obj)/,$(obj-Y))
modbuiltin-subdirs := $(patsubst %,%/modules.builtin, $(subdir-ym))
modbuiltin-mods := $(filter %.ko, $(obj-Y:.o=.ko))
modbuiltin-target := $(obj)/modules.builtin
__modbuiltin: $(modbuiltin-target) $(subdir-ym)
@:
$(modbuiltin-target): $(subdir-ym) FORCE
$(Q)(for m in $(modbuiltin-mods); do echo kernel/$$m; done; \
cat /dev/null $(modbuiltin-subdirs)) > $@
PHONY += FORCE
FORCE:
# Descending
# ---------------------------------------------------------------------------
PHONY += $(subdir-ym)
$(subdir-ym):
$(Q)$(MAKE) $(modbuiltin)=$@
# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable se we can use it in if_changed and friends.
.PHONY: $(PHONY)

View file

@ -16,15 +16,15 @@
* tells make when to remake a file. * tells make when to remake a file.
* *
* To use this list as-is however has the drawback that virtually * To use this list as-is however has the drawback that virtually
* every file in the kernel includes <linux/autoconf.h>. * every file in the kernel includes autoconf.h.
* *
* If the user re-runs make *config, linux/autoconf.h will be * If the user re-runs make *config, autoconf.h will be
* regenerated. make notices that and will rebuild every file which * regenerated. make notices that and will rebuild every file which
* includes autoconf.h, i.e. basically all files. This is extremely * includes autoconf.h, i.e. basically all files. This is extremely
* annoying if the user just changed CONFIG_HIS_DRIVER from n to m. * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
* *
* So we play the same trick that "mkdep" played before. We replace * So we play the same trick that "mkdep" played before. We replace
* the dependency on linux/autoconf.h by a dependency on every config * the dependency on autoconf.h by a dependency on every config
* option which is mentioned in any of the listed prequisites. * option which is mentioned in any of the listed prequisites.
* *
* kconfig populates a tree in include/config/ with an empty file * kconfig populates a tree in include/config/ with an empty file
@ -73,7 +73,7 @@
* cmd_<target> = <cmdline> * cmd_<target> = <cmdline>
* *
* and then basically copies the .<target>.d file to stdout, in the * and then basically copies the .<target>.d file to stdout, in the
* process filtering out the dependency on linux/autoconf.h and adding * process filtering out the dependency on autoconf.h and adding
* dependencies on include/config/my/option.h for every * dependencies on include/config/my/option.h for every
* CONFIG_MY_OPTION encountered in any of the prequisites. * CONFIG_MY_OPTION encountered in any of the prequisites.
* *
@ -324,7 +324,7 @@ static void parse_dep_file(void *map, size_t len)
p++; p++;
} }
memcpy(s, m, p-m); s[p-m] = 0; memcpy(s, m, p-m); s[p-m] = 0;
if (strrcmp(s, "include/linux/autoconf.h") && if (strrcmp(s, "include/generated/autoconf.h") &&
strrcmp(s, "arch/um/include/uml-config.h") && strrcmp(s, "arch/um/include/uml-config.h") &&
strrcmp(s, ".ver")) { strrcmp(s, ".ver")) {
printf(" %s \\\n", s); printf(" %s \\\n", s);

View file

@ -1,4 +1,4 @@
/* ANSI-C code produced by gperf version 3.0.3 */ /* ANSI-C code produced by gperf version 3.0.4 */
/* Command-line: gperf -L ANSI-C -a -C -E -g -H is_reserved_hash -k '1,3,$' -N is_reserved_word -p -t scripts/genksyms/keywords.gperf */ /* Command-line: gperf -L ANSI-C -a -C -E -g -H is_reserved_hash -k '1,3,$' -N is_reserved_word -p -t scripts/genksyms/keywords.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@ -34,7 +34,7 @@ struct resword;
static const struct resword *is_reserved_word(register const char *str, register unsigned int len); static const struct resword *is_reserved_word(register const char *str, register unsigned int len);
#line 5 "scripts/genksyms/keywords.gperf" #line 5 "scripts/genksyms/keywords.gperf"
struct resword { const char *name; int token; }; struct resword { const char *name; int token; };
/* maximum key range = 62, duplicates = 0 */ /* maximum key range = 64, duplicates = 0 */
#ifdef __GNUC__ #ifdef __GNUC__
__inline __inline
@ -48,39 +48,39 @@ is_reserved_hash (register const char *str, register unsigned int len)
{ {
static const unsigned char asso_values[] = static const unsigned char asso_values[] =
{ {
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 5, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0,
65, 65, 65, 65, 65, 65, 35, 65, 65, 65, 67, 67, 67, 67, 67, 67, 15, 67, 67, 67,
0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 0, 65, 0, 65, 5, 67, 67, 67, 67, 67, 0, 67, 0, 67, 5,
20, 15, 10, 30, 65, 15, 65, 65, 20, 0, 25, 20, 15, 30, 67, 15, 67, 67, 10, 0,
10, 35, 20, 65, 10, 5, 0, 10, 5, 65, 10, 40, 20, 67, 10, 5, 0, 10, 15, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
65, 65, 65, 65, 65, 65 67, 67, 67, 67, 67, 67
}; };
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]]; return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
} }
#ifdef __GNUC__ #ifdef __GNUC__
__inline __inline
#ifdef __GNUC_STDC_INLINE__ #if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
__attribute__ ((__gnu_inline__)) __attribute__ ((__gnu_inline__))
#endif #endif
#endif #endif
@ -89,116 +89,119 @@ is_reserved_word (register const char *str, register unsigned int len)
{ {
enum enum
{ {
TOTAL_KEYWORDS = 43, TOTAL_KEYWORDS = 45,
MIN_WORD_LENGTH = 3, MIN_WORD_LENGTH = 3,
MAX_WORD_LENGTH = 24, MAX_WORD_LENGTH = 24,
MIN_HASH_VALUE = 3, MIN_HASH_VALUE = 3,
MAX_HASH_VALUE = 64 MAX_HASH_VALUE = 66
}; };
static const struct resword wordlist[] = static const struct resword wordlist[] =
{ {
{""}, {""}, {""}, {""}, {""}, {""},
#line 28 "scripts/genksyms/keywords.gperf" #line 30 "scripts/genksyms/keywords.gperf"
{"asm", ASM_KEYW}, {"asm", ASM_KEYW},
{""}, {""},
#line 10 "scripts/genksyms/keywords.gperf" #line 12 "scripts/genksyms/keywords.gperf"
{"__asm", ASM_KEYW}, {"__asm", ASM_KEYW},
{""}, {""},
#line 11 "scripts/genksyms/keywords.gperf" #line 13 "scripts/genksyms/keywords.gperf"
{"__asm__", ASM_KEYW}, {"__asm__", ASM_KEYW},
{""}, {""}, {""}, {""},
#line 54 "scripts/genksyms/keywords.gperf" #line 56 "scripts/genksyms/keywords.gperf"
{"__typeof__", TYPEOF_KEYW}, {"__typeof__", TYPEOF_KEYW},
{""}, {""},
#line 14 "scripts/genksyms/keywords.gperf"
{"__const", CONST_KEYW},
#line 13 "scripts/genksyms/keywords.gperf"
{"__attribute__", ATTRIBUTE_KEYW},
#line 15 "scripts/genksyms/keywords.gperf"
{"__const__", CONST_KEYW},
#line 20 "scripts/genksyms/keywords.gperf"
{"__signed__", SIGNED_KEYW},
#line 46 "scripts/genksyms/keywords.gperf"
{"static", STATIC_KEYW},
#line 22 "scripts/genksyms/keywords.gperf"
{"__volatile__", VOLATILE_KEYW},
#line 41 "scripts/genksyms/keywords.gperf"
{"int", INT_KEYW},
#line 34 "scripts/genksyms/keywords.gperf"
{"char", CHAR_KEYW},
#line 35 "scripts/genksyms/keywords.gperf"
{"const", CONST_KEYW},
#line 47 "scripts/genksyms/keywords.gperf"
{"struct", STRUCT_KEYW},
#line 26 "scripts/genksyms/keywords.gperf"
{"__restrict__", RESTRICT_KEYW},
#line 27 "scripts/genksyms/keywords.gperf"
{"restrict", RESTRICT_KEYW},
#line 25 "scripts/genksyms/keywords.gperf"
{"_restrict", RESTRICT_KEYW},
#line 18 "scripts/genksyms/keywords.gperf"
{"__inline__", INLINE_KEYW},
#line 12 "scripts/genksyms/keywords.gperf"
{"__attribute", ATTRIBUTE_KEYW},
{""},
#line 16 "scripts/genksyms/keywords.gperf" #line 16 "scripts/genksyms/keywords.gperf"
{"__extension__", EXTENSION_KEYW}, {"__const", CONST_KEYW},
#line 37 "scripts/genksyms/keywords.gperf" #line 15 "scripts/genksyms/keywords.gperf"
{"enum", ENUM_KEYW}, {"__attribute__", ATTRIBUTE_KEYW},
#line 21 "scripts/genksyms/keywords.gperf" #line 17 "scripts/genksyms/keywords.gperf"
{"__volatile", VOLATILE_KEYW}, {"__const__", CONST_KEYW},
#line 38 "scripts/genksyms/keywords.gperf" #line 22 "scripts/genksyms/keywords.gperf"
{"extern", EXTERN_KEYW}, {"__signed__", SIGNED_KEYW},
#line 48 "scripts/genksyms/keywords.gperf"
{"static", STATIC_KEYW},
{""}, {""},
#line 19 "scripts/genksyms/keywords.gperf" #line 43 "scripts/genksyms/keywords.gperf"
{"__signed", SIGNED_KEYW}, {"int", INT_KEYW},
#line 36 "scripts/genksyms/keywords.gperf"
{"char", CHAR_KEYW},
#line 37 "scripts/genksyms/keywords.gperf"
{"const", CONST_KEYW},
#line 49 "scripts/genksyms/keywords.gperf"
{"struct", STRUCT_KEYW},
#line 28 "scripts/genksyms/keywords.gperf"
{"__restrict__", RESTRICT_KEYW},
#line 29 "scripts/genksyms/keywords.gperf"
{"restrict", RESTRICT_KEYW},
#line 9 "scripts/genksyms/keywords.gperf" #line 9 "scripts/genksyms/keywords.gperf"
{"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW}, {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
{""}, #line 20 "scripts/genksyms/keywords.gperf"
#line 53 "scripts/genksyms/keywords.gperf" {"__inline__", INLINE_KEYW},
{"typeof", TYPEOF_KEYW},
#line 48 "scripts/genksyms/keywords.gperf"
{"typedef", TYPEDEF_KEYW},
#line 17 "scripts/genksyms/keywords.gperf"
{"__inline", INLINE_KEYW},
#line 33 "scripts/genksyms/keywords.gperf"
{"auto", AUTO_KEYW},
#line 49 "scripts/genksyms/keywords.gperf"
{"union", UNION_KEYW},
{""}, {""},
#line 50 "scripts/genksyms/keywords.gperf"
{"unsigned", UNSIGNED_KEYW},
#line 51 "scripts/genksyms/keywords.gperf"
{"void", VOID_KEYW},
#line 44 "scripts/genksyms/keywords.gperf"
{"short", SHORT_KEYW},
{""}, {""},
#line 52 "scripts/genksyms/keywords.gperf"
{"volatile", VOLATILE_KEYW},
{""},
#line 39 "scripts/genksyms/keywords.gperf"
{"float", FLOAT_KEYW},
#line 36 "scripts/genksyms/keywords.gperf"
{"double", DOUBLE_KEYW},
{""},
#line 7 "scripts/genksyms/keywords.gperf"
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
{""}, {""},
#line 40 "scripts/genksyms/keywords.gperf"
{"inline", INLINE_KEYW},
#line 8 "scripts/genksyms/keywords.gperf"
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
#line 43 "scripts/genksyms/keywords.gperf"
{"register", REGISTER_KEYW},
{""}, {""},
#line 24 "scripts/genksyms/keywords.gperf" #line 24 "scripts/genksyms/keywords.gperf"
{"_Bool", BOOL_KEYW}, {"__volatile__", VOLATILE_KEYW},
#line 45 "scripts/genksyms/keywords.gperf" #line 7 "scripts/genksyms/keywords.gperf"
{"signed", SIGNED_KEYW}, {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
#line 27 "scripts/genksyms/keywords.gperf"
{"_restrict", RESTRICT_KEYW},
{""},
#line 14 "scripts/genksyms/keywords.gperf"
{"__attribute", ATTRIBUTE_KEYW},
#line 8 "scripts/genksyms/keywords.gperf"
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
#line 18 "scripts/genksyms/keywords.gperf"
{"__extension__", EXTENSION_KEYW},
#line 39 "scripts/genksyms/keywords.gperf"
{"enum", ENUM_KEYW},
#line 10 "scripts/genksyms/keywords.gperf"
{"EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW},
#line 40 "scripts/genksyms/keywords.gperf"
{"extern", EXTERN_KEYW},
{""},
#line 21 "scripts/genksyms/keywords.gperf"
{"__signed", SIGNED_KEYW},
#line 11 "scripts/genksyms/keywords.gperf"
{"EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
#line 51 "scripts/genksyms/keywords.gperf"
{"union", UNION_KEYW},
#line 55 "scripts/genksyms/keywords.gperf"
{"typeof", TYPEOF_KEYW},
#line 50 "scripts/genksyms/keywords.gperf"
{"typedef", TYPEDEF_KEYW},
#line 19 "scripts/genksyms/keywords.gperf"
{"__inline", INLINE_KEYW},
#line 35 "scripts/genksyms/keywords.gperf"
{"auto", AUTO_KEYW},
#line 23 "scripts/genksyms/keywords.gperf"
{"__volatile", VOLATILE_KEYW},
{""}, {""}, {""}, {""},
#line 52 "scripts/genksyms/keywords.gperf"
{"unsigned", UNSIGNED_KEYW},
{""},
#line 46 "scripts/genksyms/keywords.gperf"
{"short", SHORT_KEYW},
#line 42 "scripts/genksyms/keywords.gperf" #line 42 "scripts/genksyms/keywords.gperf"
{"long", LONG_KEYW} {"inline", INLINE_KEYW},
{""},
#line 54 "scripts/genksyms/keywords.gperf"
{"volatile", VOLATILE_KEYW},
#line 44 "scripts/genksyms/keywords.gperf"
{"long", LONG_KEYW},
#line 26 "scripts/genksyms/keywords.gperf"
{"_Bool", BOOL_KEYW},
{""}, {""},
#line 45 "scripts/genksyms/keywords.gperf"
{"register", REGISTER_KEYW},
#line 53 "scripts/genksyms/keywords.gperf"
{"void", VOID_KEYW},
#line 41 "scripts/genksyms/keywords.gperf"
{"float", FLOAT_KEYW},
#line 38 "scripts/genksyms/keywords.gperf"
{"double", DOUBLE_KEYW},
{""}, {""}, {""}, {""},
#line 47 "scripts/genksyms/keywords.gperf"
{"signed", SIGNED_KEYW}
}; };
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)

View file

@ -7,6 +7,8 @@ struct resword { const char *name; int token; }
EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW
EXPORT_UNUSED_SYMBOL, EXPORT_SYMBOL_KEYW
EXPORT_UNUSED_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
__asm, ASM_KEYW __asm, ASM_KEYW
__asm__, ASM_KEYW __asm__, ASM_KEYW
__attribute, ATTRIBUTE_KEYW __attribute, ATTRIBUTE_KEYW

View file

@ -8,8 +8,6 @@ do_command()
{ {
if [ -f ${srctree}/arch/$2/include/asm/Kbuild ]; then if [ -f ${srctree}/arch/$2/include/asm/Kbuild ]; then
make ARCH=$2 KBUILD_HEADERS=$1 headers_$1 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 else
printf "Ignoring arch: %s\n" ${arch} printf "Ignoring arch: %s\n" ${arch}
fi fi

View file

@ -27,6 +27,7 @@ oldconfig: $(obj)/conf
$< -o $(Kconfig) $< -o $(Kconfig)
silentoldconfig: $(obj)/conf silentoldconfig: $(obj)/conf
$(Q)mkdir -p include/generated
$< -s $(Kconfig) $< -s $(Kconfig)
localmodconfig: $(obj)/streamline_config.pl $(obj)/conf localmodconfig: $(obj)/streamline_config.pl $(obj)/conf

View file

@ -677,7 +677,7 @@ int conf_write_autoconf(void)
struct symbol *sym; struct symbol *sym;
const char *str; const char *str;
const char *name; const char *name;
FILE *out, *out_h; FILE *out, *tristate, *out_h;
time_t now; time_t now;
int i, l; int i, l;
@ -692,9 +692,16 @@ int conf_write_autoconf(void)
if (!out) if (!out)
return 1; return 1;
tristate = fopen(".tmpconfig_tristate", "w");
if (!tristate) {
fclose(out);
return 1;
}
out_h = fopen(".tmpconfig.h", "w"); out_h = fopen(".tmpconfig.h", "w");
if (!out_h) { if (!out_h) {
fclose(out); fclose(out);
fclose(tristate);
return 1; return 1;
} }
@ -707,6 +714,9 @@ int conf_write_autoconf(void)
"# %s" "# %s"
"#\n", "#\n",
sym_get_string_value(sym), ctime(&now)); sym_get_string_value(sym), ctime(&now));
fprintf(tristate, "#\n"
"# Automatically generated - do not edit\n"
"\n");
fprintf(out_h, "/*\n" fprintf(out_h, "/*\n"
" * Automatically generated C config: don't edit\n" " * Automatically generated C config: don't edit\n"
" * Linux kernel version: %s\n" " * Linux kernel version: %s\n"
@ -727,10 +737,14 @@ int conf_write_autoconf(void)
break; break;
case mod: case mod:
fprintf(out, "CONFIG_%s=m\n", sym->name); fprintf(out, "CONFIG_%s=m\n", sym->name);
fprintf(tristate, "CONFIG_%s=M\n", sym->name);
fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
break; break;
case yes: case yes:
fprintf(out, "CONFIG_%s=y\n", sym->name); fprintf(out, "CONFIG_%s=y\n", sym->name);
if (sym->type == S_TRISTATE)
fprintf(tristate, "CONFIG_%s=Y\n",
sym->name);
fprintf(out_h, "#define CONFIG_%s 1\n", sym->name); fprintf(out_h, "#define CONFIG_%s 1\n", sym->name);
break; break;
} }
@ -772,13 +786,19 @@ int conf_write_autoconf(void)
} }
} }
fclose(out); fclose(out);
fclose(tristate);
fclose(out_h); fclose(out_h);
name = getenv("KCONFIG_AUTOHEADER"); name = getenv("KCONFIG_AUTOHEADER");
if (!name) if (!name)
name = "include/linux/autoconf.h"; name = "include/generated/autoconf.h";
if (rename(".tmpconfig.h", name)) if (rename(".tmpconfig.h", name))
return 1; return 1;
name = getenv("KCONFIG_TRISTATE");
if (!name)
name = "include/config/tristate.conf";
if (rename(".tmpconfig_tristate", name))
return 1;
name = conf_get_autoconfig_name(); name = conf_get_autoconfig_name();
/* /*
* This must be the last step, kbuild has a dependency on auto.conf * This must be the last step, kbuild has a dependency on auto.conf

View file

@ -14,7 +14,7 @@ vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
# So "sudo make install" won't change the "compiled by <user>" # So "sudo make install" won't change the "compiled by <user>"
# do "compiled by root" # do "compiled by root"
if [ -r $TARGET -a ! -O include/linux/autoconf.h ]; then if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then
vecho " SKIPPED $TARGET" vecho " SKIPPED $TARGET"
exit 0 exit 0
fi fi

View file

@ -15,7 +15,7 @@
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
#include "modpost.h" #include "modpost.h"
#include "../../include/linux/autoconf.h" #include "../../include/generated/autoconf.h"
#include "../../include/linux/license.h" #include "../../include/linux/license.h"
/* Some toolchains use a `_' prefix for all user symbols. */ /* Some toolchains use a `_' prefix for all user symbols. */

View file

@ -77,9 +77,27 @@ clean-files += $(objtree)/binkernel.spec
# Deb target # Deb target
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
quiet_cmd_builddeb = BUILDDEB
cmd_builddeb = set -e; \
test `id -u` = 0 || \
test -n "$(KBUILD_PKG_ROOTCMD)" || { \
which fakeroot >/dev/null 2>&1 && \
KBUILD_PKG_ROOTCMD="fakeroot -u"; \
} || { \
echo; \
echo "builddeb must be run as root (or using fakeroot)."; \
echo "KBUILD_PKG_ROOTCMD is unset and fakeroot not found."; \
echo "Try setting KBUILD_PKG_ROOTCMD to a command to acquire"; \
echo "root privileges (e.g., 'fakeroot -u' or 'sudo')."; \
false; \
} && \
\
$$KBUILD_PKG_ROOTCMD $(CONFIG_SHELL) \
$(srctree)/scripts/package/builddeb
deb-pkg: FORCE deb-pkg: FORCE
$(MAKE) KBUILD_SRC= $(MAKE) KBUILD_SRC=
$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb $(call cmd,builddeb)
clean-dirs += $(objtree)/debian/ clean-dirs += $(objtree)/debian/

View file

@ -101,7 +101,11 @@ esac
# #
( (
cd "${tmpdir}" cd "${tmpdir}"
tar cf - . | ${compress} > "${tarball}${file_ext}" opts=
if tar --owner=root --group=root --help >/dev/null 2>&1; then
opts="--owner=root --group=root"
fi
tar cf - . $opts | ${compress} > "${tarball}${file_ext}"
) )
echo "Tarball successfully created in ${tarball}${file_ext}" echo "Tarball successfully created in ${tarball}${file_ext}"

View file

@ -89,7 +89,13 @@ all_defconfigs()
docscope() docscope()
{ {
(echo \-k; echo \-q; all_sources) > cscope.files # always use absolute paths for cscope, as recommended by cscope
# upstream
case "$tree" in
/*) ;;
*) tree=$PWD/$tree ;;
esac
(cd /; echo \-k; echo \-q; all_sources) > cscope.files
cscope -b -f cscope.out cscope -b -f cscope.out
} }

View file

@ -1,13 +1,5 @@
/* /*
* Copyright (c) 2002 - 2005 Tony Finch <dot@dotat.at>. All rights reserved. * Copyright (c) 2002 - 2009 Tony Finch <dot@dotat.at>
*
* This code is derived from software contributed to Berkeley by Dave Yost.
* It was rewritten to support ANSI C by Tony Finch. The original version of
* unifdef carried the following copyright notice. None of its code remains
* in this version (though some of the names remain).
*
* Copyright (c) 1985, 1993
* The Regents of the University of California. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@ -31,23 +23,20 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <sys/cdefs.h> /*
* This code was derived from software contributed to Berkeley by Dave Yost.
* It was rewritten to support ANSI C by Tony Finch. The original version
* of unifdef carried the 4-clause BSD copyright licence. None of its code
* remains in this version (though some of the names remain) so it now
* carries a more liberal licence.
*
* The latest version is available from http://dotat.at/prog/unifdef
*/
#ifndef lint static const char * const copyright[] = {
#if 0 "@(#) Copyright (c) 2002 - 2009 Tony Finch <dot@dotat.at>\n",
static const char copyright[] = "$dotat: unifdef/unifdef.c,v 1.190 2009/11/27 17:21:26 fanf2 Exp $",
"@(#) Copyright (c) 1985, 1993\n\ };
The Regents of the University of California. All rights reserved.\n";
#endif
#ifdef __IDSTRING
__IDSTRING(Berkeley, "@(#)unifdef.c 8.1 (Berkeley) 6/6/93");
__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $");
__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.171 2005/03/08 12:38:48 fanf2 Exp $");
#endif
#endif /* not lint */
#ifdef __FBSDID
__FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05/21 09:55:09 ru Exp $");
#endif
/* /*
* unifdef - remove ifdef'ed lines * unifdef - remove ifdef'ed lines
@ -72,8 +61,6 @@ __FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
size_t strlcpy(char *dst, const char *src, size_t siz);
/* types of input lines: */ /* types of input lines: */
typedef enum { typedef enum {
LT_TRUEI, /* a true #if with ignore flag */ LT_TRUEI, /* a true #if with ignore flag */
@ -90,6 +77,7 @@ typedef enum {
LT_DODGY_LAST = LT_DODGY + LT_ENDIF, LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
LT_PLAIN, /* ordinary line */ LT_PLAIN, /* ordinary line */
LT_EOF, /* end of file */ LT_EOF, /* end of file */
LT_ERROR, /* unevaluable #if */
LT_COUNT LT_COUNT
} Linetype; } Linetype;
@ -100,7 +88,7 @@ static char const * const linetype_name[] = {
"DODGY IF", "DODGY TRUE", "DODGY FALSE", "DODGY IF", "DODGY TRUE", "DODGY FALSE",
"DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE", "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
"DODGY ELSE", "DODGY ENDIF", "DODGY ELSE", "DODGY ENDIF",
"PLAIN", "EOF" "PLAIN", "EOF", "ERROR"
}; };
/* state of #if processing */ /* state of #if processing */
@ -168,11 +156,13 @@ static char const * const linestate_name[] = {
* Globals. * Globals.
*/ */
static bool compblank; /* -B: compress blank lines */
static bool lnblank; /* -b: blank deleted lines */
static bool complement; /* -c: do the complement */ static bool complement; /* -c: do the complement */
static bool debugging; /* -d: debugging reports */ static bool debugging; /* -d: debugging reports */
static bool iocccok; /* -e: fewer IOCCC errors */ static bool iocccok; /* -e: fewer IOCCC errors */
static bool strictlogic; /* -K: keep ambiguous #ifs */
static bool killconsts; /* -k: eval constant #ifs */ static bool killconsts; /* -k: eval constant #ifs */
static bool lnblank; /* -l: blank deleted lines */
static bool lnnum; /* -n: add #line directives */ static bool lnnum; /* -n: add #line directives */
static bool symlist; /* -s: output symbol list */ static bool symlist; /* -s: output symbol list */
static bool text; /* -t: this is a text file */ static bool text; /* -t: this is a text file */
@ -196,7 +186,9 @@ static bool ignoring[MAXDEPTH]; /* ignore comments state */
static int stifline[MAXDEPTH]; /* start of current #if */ static int stifline[MAXDEPTH]; /* start of current #if */
static int depth; /* current #if nesting */ static int depth; /* current #if nesting */
static int delcount; /* count of deleted lines */ static int delcount; /* count of deleted lines */
static bool keepthis; /* don't delete constant #if */ static unsigned blankcount; /* count of blank lines */
static unsigned blankmax; /* maximum recent blankcount */
static bool constexpr; /* constant #if expression */
static int exitstat; /* program exit status */ static int exitstat; /* program exit status */
@ -206,13 +198,14 @@ static void done(void);
static void error(const char *); static void error(const char *);
static int findsym(const char *); static int findsym(const char *);
static void flushline(bool); static void flushline(bool);
static Linetype get_line(void); static Linetype parseline(void);
static Linetype ifeval(const char **); static Linetype ifeval(const char **);
static void ignoreoff(void); static void ignoreoff(void);
static void ignoreon(void); static void ignoreon(void);
static void keywordedit(const char *); static void keywordedit(const char *);
static void nest(void); static void nest(void);
static void process(void); static void process(void);
static const char *skipargs(const char *);
static const char *skipcomment(const char *); static const char *skipcomment(const char *);
static const char *skipsym(const char *); static const char *skipsym(const char *);
static void state(Ifstate); static void state(Ifstate);
@ -220,7 +213,7 @@ static int strlcmp(const char *, const char *, size_t);
static void unnest(void); static void unnest(void);
static void usage(void); static void usage(void);
#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_') #define endsym(c) (!isalnum((unsigned char)c) && c != '_')
/* /*
* The main program. * The main program.
@ -230,7 +223,7 @@ main(int argc, char *argv[])
{ {
int opt; int opt;
while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1) while ((opt = getopt(argc, argv, "i:D:U:I:BbcdeKklnst")) != -1)
switch (opt) { switch (opt) {
case 'i': /* treat stuff controlled by these symbols as text */ case 'i': /* treat stuff controlled by these symbols as text */
/* /*
@ -255,6 +248,13 @@ main(int argc, char *argv[])
case 'I': case 'I':
/* no-op for compatibility with cpp */ /* no-op for compatibility with cpp */
break; break;
case 'B': /* compress blank lines around removed section */
compblank = true;
break;
case 'b': /* blank deleted lines instead of omitting them */
case 'l': /* backwards compatibility */
lnblank = true;
break;
case 'c': /* treat -D as -U and vice versa */ case 'c': /* treat -D as -U and vice versa */
complement = true; complement = true;
break; break;
@ -264,12 +264,12 @@ main(int argc, char *argv[])
case 'e': /* fewer errors from dodgy lines */ case 'e': /* fewer errors from dodgy lines */
iocccok = true; iocccok = true;
break; break;
case 'K': /* keep ambiguous #ifs */
strictlogic = true;
break;
case 'k': /* process constant #ifs */ case 'k': /* process constant #ifs */
killconsts = true; killconsts = true;
break; break;
case 'l': /* blank deleted lines instead of omitting them */
lnblank = true;
break;
case 'n': /* add #line directive after deleted lines */ case 'n': /* add #line directive after deleted lines */
lnnum = true; lnnum = true;
break; break;
@ -284,6 +284,8 @@ main(int argc, char *argv[])
} }
argc -= optind; argc -= optind;
argv += optind; argv += optind;
if (compblank && lnblank)
errx(2, "-B and -b are mutually exclusive");
if (argc > 1) { if (argc > 1) {
errx(2, "can only do one file"); errx(2, "can only do one file");
} else if (argc == 1 && strcmp(*argv, "-") != 0) { } else if (argc == 1 && strcmp(*argv, "-") != 0) {
@ -302,7 +304,7 @@ main(int argc, char *argv[])
static void static void
usage(void) usage(void)
{ {
fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]" fprintf(stderr, "usage: unifdef [-BbcdeKknst] [-Ipath]"
" [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n"); " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
exit(2); exit(2);
} }
@ -383,46 +385,46 @@ static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
/* IS_OUTSIDE */ /* IS_OUTSIDE */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif, Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif,
print, done }, print, done, abort },
/* IS_FALSE_PREFIX */ /* IS_FALSE_PREFIX */
{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif, { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc, Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
drop, Eeof }, drop, Eeof, abort },
/* IS_TRUE_PREFIX */ /* IS_TRUE_PREFIX */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
print, Eeof }, print, Eeof, abort },
/* IS_PASS_MIDDLE */ /* IS_PASS_MIDDLE */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif, Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif,
print, Eeof }, print, Eeof, abort },
/* IS_FALSE_MIDDLE */ /* IS_FALSE_MIDDLE */
{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif, { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
drop, Eeof }, drop, Eeof, abort },
/* IS_TRUE_MIDDLE */ /* IS_TRUE_MIDDLE */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif, Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
print, Eeof }, print, Eeof, abort },
/* IS_PASS_ELSE */ /* IS_PASS_ELSE */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif, Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif,
print, Eeof }, print, Eeof, abort },
/* IS_FALSE_ELSE */ /* IS_FALSE_ELSE */
{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif, { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc, Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
drop, Eeof }, drop, Eeof, abort },
/* IS_TRUE_ELSE */ /* IS_TRUE_ELSE */
{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif, { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc, Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc,
print, Eeof }, print, Eeof, abort },
/* IS_FALSE_TRAILER */ /* IS_FALSE_TRAILER */
{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif, { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc, Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
drop, Eeof } drop, Eeof, abort }
/*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF /*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF
TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY) TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY)
PLAIN EOF */ PLAIN EOF ERROR */
}; };
/* /*
@ -463,9 +465,11 @@ keywordedit(const char *replacement)
static void static void
nest(void) nest(void)
{ {
depth += 1; if (depth > MAXDEPTH-1)
if (depth >= MAXDEPTH) abort(); /* bug */
if (depth == MAXDEPTH-1)
error("Too many levels of nesting"); error("Too many levels of nesting");
depth += 1;
stifline[depth] = linenum; stifline[depth] = linenum;
} }
static void static void
@ -490,15 +494,23 @@ flushline(bool keep)
if (symlist) if (symlist)
return; return;
if (keep ^ complement) { if (keep ^ complement) {
bool blankline = tline[strspn(tline, " \t\n")] == '\0';
if (blankline && compblank && blankcount != blankmax) {
delcount += 1;
blankcount += 1;
} else {
if (lnnum && delcount > 0) if (lnnum && delcount > 0)
printf("#line %d\n", linenum); printf("#line %d\n", linenum);
fputs(tline, stdout); fputs(tline, stdout);
delcount = 0; delcount = 0;
blankmax = blankcount = blankline ? blankcount + 1 : 0;
}
} else { } else {
if (lnblank) if (lnblank)
putc('\n', stdout); putc('\n', stdout);
exitstat = 1; exitstat = 1;
delcount += 1; delcount += 1;
blankcount = 0;
} }
} }
@ -510,9 +522,12 @@ process(void)
{ {
Linetype lineval; Linetype lineval;
/* When compressing blank lines, act as if the file
is preceded by a large number of blank lines. */
blankmax = blankcount = 1000;
for (;;) { for (;;) {
linenum++; linenum++;
lineval = get_line(); lineval = parseline();
trans_table[ifstate[depth]][lineval](); trans_table[ifstate[depth]][lineval]();
debug("process %s -> %s depth %d", debug("process %s -> %s depth %d",
linetype_name[lineval], linetype_name[lineval],
@ -526,7 +541,7 @@ process(void)
* help from skipcomment(). * help from skipcomment().
*/ */
static Linetype static Linetype
get_line(void) parseline(void)
{ {
const char *cp; const char *cp;
int cursym; int cursym;
@ -595,9 +610,21 @@ get_line(void)
if (incomment) if (incomment)
linestate = LS_DIRTY; linestate = LS_DIRTY;
} }
/* skipcomment should have changed the state */ /* skipcomment normally changes the state, except
if (linestate == LS_HASH) if the last line of the file lacks a newline, or
abort(); /* bug */ if there is too much whitespace in a directive */
if (linestate == LS_HASH) {
size_t len = cp - tline;
if (fgets(tline + len, MAXLINE - len, input) == NULL) {
/* append the missing newline */
tline[len+0] = '\n';
tline[len+1] = '\0';
cp++;
linestate = LS_START;
} else {
linestate = LS_DIRTY;
}
}
} }
if (linestate == LS_DIRTY) { if (linestate == LS_DIRTY) {
while (*cp != '\0') while (*cp != '\0')
@ -610,17 +637,40 @@ get_line(void)
/* /*
* These are the binary operators that are supported by the expression * These are the binary operators that are supported by the expression
* evaluator. Note that if support for division is added then we also * evaluator.
* need short-circuiting booleans because of divide-by-zero.
*/ */
static int op_lt(int a, int b) { return (a < b); } static Linetype op_strict(int *p, int v, Linetype at, Linetype bt) {
static int op_gt(int a, int b) { return (a > b); } if(at == LT_IF || bt == LT_IF) return (LT_IF);
static int op_le(int a, int b) { return (a <= b); } return (*p = v, v ? LT_TRUE : LT_FALSE);
static int op_ge(int a, int b) { return (a >= b); } }
static int op_eq(int a, int b) { return (a == b); } static Linetype op_lt(int *p, Linetype at, int a, Linetype bt, int b) {
static int op_ne(int a, int b) { return (a != b); } return op_strict(p, a < b, at, bt);
static int op_or(int a, int b) { return (a || b); } }
static int op_and(int a, int b) { return (a && b); } static Linetype op_gt(int *p, Linetype at, int a, Linetype bt, int b) {
return op_strict(p, a > b, at, bt);
}
static Linetype op_le(int *p, Linetype at, int a, Linetype bt, int b) {
return op_strict(p, a <= b, at, bt);
}
static Linetype op_ge(int *p, Linetype at, int a, Linetype bt, int b) {
return op_strict(p, a >= b, at, bt);
}
static Linetype op_eq(int *p, Linetype at, int a, Linetype bt, int b) {
return op_strict(p, a == b, at, bt);
}
static Linetype op_ne(int *p, Linetype at, int a, Linetype bt, int b) {
return op_strict(p, a != b, at, bt);
}
static Linetype op_or(int *p, Linetype at, int a, Linetype bt, int b) {
if (!strictlogic && (at == LT_TRUE || bt == LT_TRUE))
return (*p = 1, LT_TRUE);
return op_strict(p, a || b, at, bt);
}
static Linetype op_and(int *p, Linetype at, int a, Linetype bt, int b) {
if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE))
return (*p = 0, LT_FALSE);
return op_strict(p, a && b, at, bt);
}
/* /*
* An evaluation function takes three arguments, as follows: (1) a pointer to * An evaluation function takes three arguments, as follows: (1) a pointer to
@ -629,8 +679,8 @@ static int op_and(int a, int b) { return (a && b); }
* value of the expression; and (3) a pointer to a char* that points to the * value of the expression; and (3) a pointer to a char* that points to the
* expression to be evaluated and that is updated to the end of the expression * expression to be evaluated and that is updated to the end of the expression
* when evaluation is complete. The function returns LT_FALSE if the value of * when evaluation is complete. The function returns LT_FALSE if the value of
* the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the * the expression is zero, LT_TRUE if it is non-zero, LT_IF if the expression
* expression could not be evaluated. * depends on an unknown symbol, or LT_ERROR if there is a parse failure.
*/ */
struct ops; struct ops;
@ -649,7 +699,7 @@ static const struct ops {
eval_fn *inner; eval_fn *inner;
struct op { struct op {
const char *str; const char *str;
int (*fn)(int, int); Linetype (*fn)(int *, Linetype, int, Linetype, int);
} op[5]; } op[5];
} eval_ops[] = { } eval_ops[] = {
{ eval_table, { { "||", op_or } } }, { eval_table, { { "||", op_or } } },
@ -664,8 +714,8 @@ static const struct ops {
/* /*
* Function for evaluating the innermost parts of expressions, * Function for evaluating the innermost parts of expressions,
* viz. !expr (expr) defined(symbol) symbol number * viz. !expr (expr) number defined(symbol) symbol
* We reset the keepthis flag when we find a non-constant subexpression. * We reset the constexpr flag in the last two cases.
*/ */
static Linetype static Linetype
eval_unary(const struct ops *ops, int *valp, const char **cpp) eval_unary(const struct ops *ops, int *valp, const char **cpp)
@ -673,68 +723,83 @@ eval_unary(const struct ops *ops, int *valp, const char **cpp)
const char *cp; const char *cp;
char *ep; char *ep;
int sym; int sym;
bool defparen;
Linetype lt;
cp = skipcomment(*cpp); cp = skipcomment(*cpp);
if (*cp == '!') { if (*cp == '!') {
debug("eval%d !", ops - eval_ops); debug("eval%d !", ops - eval_ops);
cp++; cp++;
if (eval_unary(ops, valp, &cp) == LT_IF) { lt = eval_unary(ops, valp, &cp);
*cpp = cp; if (lt == LT_ERROR)
return (LT_IF); return (LT_ERROR);
} if (lt != LT_IF) {
*valp = !*valp; *valp = !*valp;
lt = *valp ? LT_TRUE : LT_FALSE;
}
} else if (*cp == '(') { } else if (*cp == '(') {
cp++; cp++;
debug("eval%d (", ops - eval_ops); debug("eval%d (", ops - eval_ops);
if (eval_table(eval_ops, valp, &cp) == LT_IF) lt = eval_table(eval_ops, valp, &cp);
return (LT_IF); if (lt == LT_ERROR)
return (LT_ERROR);
cp = skipcomment(cp); cp = skipcomment(cp);
if (*cp++ != ')') if (*cp++ != ')')
return (LT_IF); return (LT_ERROR);
} else if (isdigit((unsigned char)*cp)) { } else if (isdigit((unsigned char)*cp)) {
debug("eval%d number", ops - eval_ops); debug("eval%d number", ops - eval_ops);
*valp = strtol(cp, &ep, 0); *valp = strtol(cp, &ep, 0);
if (ep == cp)
return (LT_ERROR);
lt = *valp ? LT_TRUE : LT_FALSE;
cp = skipsym(cp); cp = skipsym(cp);
} else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) { } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
cp = skipcomment(cp+7); cp = skipcomment(cp+7);
debug("eval%d defined", ops - eval_ops); debug("eval%d defined", ops - eval_ops);
if (*cp++ != '(') if (*cp == '(') {
return (LT_IF); cp = skipcomment(cp+1);
cp = skipcomment(cp); defparen = true;
} else {
defparen = false;
}
sym = findsym(cp); sym = findsym(cp);
if (sym < 0) {
lt = LT_IF;
} else {
*valp = (value[sym] != NULL);
lt = *valp ? LT_TRUE : LT_FALSE;
}
cp = skipsym(cp); cp = skipsym(cp);
cp = skipcomment(cp); cp = skipcomment(cp);
if (*cp++ != ')') if (defparen && *cp++ != ')')
return (LT_IF); return (LT_ERROR);
if (sym >= 0) constexpr = false;
*valp = (value[sym] != NULL);
else {
*cpp = cp;
return (LT_IF);
}
keepthis = false;
} else if (!endsym(*cp)) { } else if (!endsym(*cp)) {
debug("eval%d symbol", ops - eval_ops); debug("eval%d symbol", ops - eval_ops);
sym = findsym(cp); sym = findsym(cp);
if (sym < 0) cp = skipsym(cp);
return (LT_IF); if (sym < 0) {
if (value[sym] == NULL) lt = LT_IF;
cp = skipargs(cp);
} else if (value[sym] == NULL) {
*valp = 0; *valp = 0;
else { lt = LT_FALSE;
} else {
*valp = strtol(value[sym], &ep, 0); *valp = strtol(value[sym], &ep, 0);
if (*ep != '\0' || ep == value[sym]) if (*ep != '\0' || ep == value[sym])
return (LT_IF); return (LT_ERROR);
lt = *valp ? LT_TRUE : LT_FALSE;
cp = skipargs(cp);
} }
cp = skipsym(cp); constexpr = false;
keepthis = false;
} else { } else {
debug("eval%d bad expr", ops - eval_ops); debug("eval%d bad expr", ops - eval_ops);
return (LT_IF); return (LT_ERROR);
} }
*cpp = cp; *cpp = cp;
debug("eval%d = %d", ops - eval_ops, *valp); debug("eval%d = %d", ops - eval_ops, *valp);
return (*valp ? LT_TRUE : LT_FALSE); return (lt);
} }
/* /*
@ -746,11 +811,13 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
const struct op *op; const struct op *op;
const char *cp; const char *cp;
int val; int val;
Linetype lhs, rhs; Linetype lt, rt;
debug("eval%d", ops - eval_ops); debug("eval%d", ops - eval_ops);
cp = *cpp; cp = *cpp;
lhs = ops->inner(ops+1, valp, &cp); lt = ops->inner(ops+1, valp, &cp);
if (lt == LT_ERROR)
return (LT_ERROR);
for (;;) { for (;;) {
cp = skipcomment(cp); cp = skipcomment(cp);
for (op = ops->op; op->str != NULL; op++) for (op = ops->op; op->str != NULL; op++)
@ -760,32 +827,16 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
break; break;
cp += strlen(op->str); cp += strlen(op->str);
debug("eval%d %s", ops - eval_ops, op->str); debug("eval%d %s", ops - eval_ops, op->str);
rhs = ops->inner(ops+1, &val, &cp); rt = ops->inner(ops+1, &val, &cp);
if (op->fn == op_and && (lhs == LT_FALSE || rhs == LT_FALSE)) { if (rt == LT_ERROR)
debug("eval%d: and always false", ops - eval_ops); return (LT_ERROR);
if (lhs == LT_IF) lt = op->fn(valp, lt, *valp, rt, val);
*valp = val;
lhs = LT_FALSE;
continue;
}
if (op->fn == op_or && (lhs == LT_TRUE || rhs == LT_TRUE)) {
debug("eval%d: or always true", ops - eval_ops);
if (lhs == LT_IF)
*valp = val;
lhs = LT_TRUE;
continue;
}
if (rhs == LT_IF)
lhs = LT_IF;
if (lhs != LT_IF)
*valp = op->fn(*valp, val);
} }
*cpp = cp; *cpp = cp;
debug("eval%d = %d", ops - eval_ops, *valp); debug("eval%d = %d", ops - eval_ops, *valp);
if (lhs != LT_IF) debug("eval%d lt = %s", ops - eval_ops, linetype_name[lt]);
lhs = (*valp ? LT_TRUE : LT_FALSE); return (lt);
return lhs;
} }
/* /*
@ -796,17 +847,14 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
static Linetype static Linetype
ifeval(const char **cpp) ifeval(const char **cpp)
{ {
const char *cp = *cpp;
int ret; int ret;
int val; int val = 0;
debug("eval %s", *cpp); debug("eval %s", *cpp);
keepthis = killconsts ? false : true; constexpr = killconsts ? false : true;
ret = eval_table(eval_ops, &val, &cp); ret = eval_table(eval_ops, &val, cpp);
if (ret != LT_IF)
*cpp = cp;
debug("eval = %d", val); debug("eval = %d", val);
return (keepthis ? LT_IF : ret); return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret);
} }
/* /*
@ -917,6 +965,31 @@ skipcomment(const char *cp)
return (cp); return (cp);
} }
/*
* Skip macro arguments.
*/
static const char *
skipargs(const char *cp)
{
const char *ocp = cp;
int level = 0;
cp = skipcomment(cp);
if (*cp != '(')
return (cp);
do {
if (*cp == '(')
level++;
if (*cp == ')')
level--;
cp = skipcomment(cp+1);
} while (level != 0 && *cp != '\0');
if (level == 0)
return (cp);
else
/* Rewind and re-detect the syntax error later. */
return (ocp);
}
/* /*
* Skip over an identifier. * Skip over an identifier.
*/ */
@ -929,7 +1002,7 @@ skipsym(const char *cp)
} }
/* /*
* Look for the symbol in the symbol table. If is is found, we return * Look for the symbol in the symbol table. If it is found, we return
* the symbol table index, else we return -1. * the symbol table index, else we return -1.
*/ */
static int static int

View file

@ -354,7 +354,10 @@ static int cpio_mkfile(const char *name, const char *location,
push_pad(); push_pad();
if (size) { if (size) {
fwrite(filebuf, size, 1, stdout); if (fwrite(filebuf, size, 1, stdout) != 1) {
fprintf(stderr, "writing filebuf failed\n");
goto error;
}
offset += size; offset += size;
push_pad(); push_pad();
} }