Merge airlied/drm-next into drm-misc-next
Just catching up with upstream. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
@@ -85,8 +85,8 @@ TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
|
||||
|
||||
# try-run
|
||||
# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
|
||||
# Exit code chooses option. "$$TMP" is can be used as temporary file and
|
||||
# is automatically cleaned up.
|
||||
# Exit code chooses option. "$$TMP" serves as a temporary file and is
|
||||
# automatically cleaned up.
|
||||
try-run = $(shell set -e; \
|
||||
TMP="$(TMPOUT).$$$$.tmp"; \
|
||||
TMPO="$(TMPOUT).$$$$.o"; \
|
||||
@@ -261,7 +261,6 @@ make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
|
||||
any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
|
||||
|
||||
# Execute command if command has changed or prerequisite(s) are updated.
|
||||
#
|
||||
if_changed = $(if $(strip $(any-prereq) $(arg-check)), \
|
||||
@set -e; \
|
||||
$(echo-cmd) $(cmd_$(1)); \
|
||||
@@ -315,7 +314,7 @@ if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ), \
|
||||
$(rule_$(1)), @:)
|
||||
|
||||
###
|
||||
# why - tell why a a target got build
|
||||
# why - tell why a target got built
|
||||
# enabled by make V=2
|
||||
# Output (listed in the order they are checked):
|
||||
# (1) - due to target is PHONY
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# include/asm-generic contains a lot of files that are used
|
||||
# verbatim by several architectures.
|
||||
#
|
||||
# This Makefile reads the file arch/$(SRCARCH)/include/asm/Kbuild
|
||||
# This Makefile reads the file arch/$(SRCARCH)/include/$(src)/Kbuild
|
||||
# and for each file listed in this file with generic-y creates
|
||||
# a small wrapper file in $(obj) (arch/$(SRCARCH)/include/generated/asm)
|
||||
# a small wrapper file in $(obj) (arch/$(SRCARCH)/include/generated/$(src))
|
||||
|
||||
kbuild-file := $(srctree)/arch/$(SRCARCH)/include/$(src)/Kbuild
|
||||
-include $(kbuild-file)
|
||||
|
||||
@@ -229,8 +229,8 @@ ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
|
||||
endif
|
||||
# Due to recursion, we must skip empty.o.
|
||||
# The empty.o file is created in the make process in order to determine
|
||||
# the target endianness and word size. It is made before all other C
|
||||
# files, including recordmcount.
|
||||
# the target endianness and word size. It is made before all other C
|
||||
# files, including recordmcount.
|
||||
sub_cmd_record_mcount = \
|
||||
if [ $(@) != "scripts/mod/empty.o" ]; then \
|
||||
$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \
|
||||
@@ -245,23 +245,29 @@ sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH
|
||||
"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
|
||||
"$(if $(part-of-module),1,0)" "$(@)";
|
||||
recordmcount_source := $(srctree)/scripts/recordmcount.pl
|
||||
endif
|
||||
endif # BUILD_C_RECORDMCOUNT
|
||||
cmd_record_mcount = \
|
||||
if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" = \
|
||||
"$(CC_FLAGS_FTRACE)" ]; then \
|
||||
$(sub_cmd_record_mcount) \
|
||||
fi;
|
||||
endif
|
||||
endif # CONFIG_FTRACE_MCOUNT_RECORD
|
||||
|
||||
ifdef CONFIG_STACK_VALIDATION
|
||||
ifneq ($(SKIP_STACK_VALIDATION),1)
|
||||
|
||||
__objtool_obj := $(objtree)/tools/objtool/objtool
|
||||
|
||||
objtool_args = check
|
||||
objtool_args = $(if $(CONFIG_ORC_UNWINDER),orc generate,check)
|
||||
|
||||
ifndef CONFIG_FRAME_POINTER
|
||||
objtool_args += --no-fp
|
||||
endif
|
||||
ifdef CONFIG_GCOV_KERNEL
|
||||
objtool_args += --no-unreachable
|
||||
else
|
||||
objtool_args += $(call cc-ifversion, -lt, 0405, --no-unreachable)
|
||||
endif
|
||||
|
||||
# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
|
||||
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
|
||||
@@ -276,6 +282,11 @@ objtool_obj = $(if $(patsubst y%,, \
|
||||
endif # SKIP_STACK_VALIDATION
|
||||
endif # CONFIG_STACK_VALIDATION
|
||||
|
||||
# Rebuild all objects when objtool changes, or is enabled/disabled.
|
||||
objtool_dep = $(objtool_obj) \
|
||||
$(wildcard include/config/orc/unwinder.h \
|
||||
include/config/stack/validation.h)
|
||||
|
||||
define rule_cc_o_c
|
||||
$(call echo-cmd,checksrc) $(cmd_checksrc) \
|
||||
$(call cmd_and_fixdep,cc_o_c) \
|
||||
@@ -298,13 +309,13 @@ cmd_undef_syms = echo
|
||||
endif
|
||||
|
||||
# Built-in and composite module parts
|
||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
|
||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
|
||||
$(call cmd,force_checksrc)
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
|
||||
# Single-part modules are special since we need to mark them in $(MODVERDIR)
|
||||
|
||||
$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
|
||||
$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
|
||||
$(call cmd,force_checksrc)
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
@{ echo $(@:.o=.ko); echo $@; \
|
||||
@@ -399,7 +410,7 @@ cmd_modversions_S = \
|
||||
endif
|
||||
endif
|
||||
|
||||
$(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE
|
||||
$(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE
|
||||
$(call if_changed_rule,as_o_S)
|
||||
|
||||
targets += $(real-objs-y) $(real-objs-m) $(lib-y)
|
||||
|
||||
@@ -14,7 +14,7 @@ src := $(obj)
|
||||
PHONY := __dtbs_install
|
||||
__dtbs_install:
|
||||
|
||||
export dtbinst-root ?= $(obj)
|
||||
export dtbinst_root ?= $(obj)
|
||||
|
||||
include include/config/auto.conf
|
||||
include scripts/Kbuild.include
|
||||
@@ -27,7 +27,7 @@ dtbinst-dirs := $(dts-dirs)
|
||||
quiet_cmd_dtb_install = INSTALL $<
|
||||
cmd_dtb_install = mkdir -p $(2); cp $< $(2)
|
||||
|
||||
install-dir = $(patsubst $(dtbinst-root)%,$(INSTALL_DTBS_PATH)%,$(obj))
|
||||
install-dir = $(patsubst $(dtbinst_root)%,$(INSTALL_DTBS_PATH)%,$(obj))
|
||||
|
||||
$(dtbinst-files): %.dtb: $(obj)/%.dtb
|
||||
$(call cmd,dtb_install,$(install-dir))
|
||||
|
||||
@@ -37,6 +37,7 @@ warning-2 += $(call cc-option, -Wlogical-op)
|
||||
warning-2 += $(call cc-option, -Wmissing-field-initializers)
|
||||
warning-2 += $(call cc-option, -Wsign-compare)
|
||||
warning-2 += $(call cc-option, -Wmaybe-uninitialized)
|
||||
warning-2 += $(call cc-option, -Wunused-macros)
|
||||
|
||||
warning-3 := -Wbad-function-cast
|
||||
warning-3 += -Wcast-qual
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
# ==========================================================================
|
||||
# Installing firmware
|
||||
#
|
||||
# We don't include the .config, so all firmware files are in $(fw-shipped-)
|
||||
# rather than in $(fw-shipped-y) or $(fw-shipped-m).
|
||||
# ==========================================================================
|
||||
|
||||
INSTALL := install
|
||||
src := $(obj)
|
||||
|
||||
# For modules_install installing firmware, we want to see .config
|
||||
# But for firmware_install, we don't care, but don't want to require it.
|
||||
-include $(objtree)/.config
|
||||
|
||||
include scripts/Kbuild.include
|
||||
include $(src)/Makefile
|
||||
|
||||
include scripts/Makefile.host
|
||||
|
||||
mod-fw := $(fw-shipped-m)
|
||||
# If CONFIG_FIRMWARE_IN_KERNEL isn't set, then install the
|
||||
# firmware for in-kernel drivers too.
|
||||
ifndef CONFIG_FIRMWARE_IN_KERNEL
|
||||
mod-fw += $(fw-shipped-y)
|
||||
endif
|
||||
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
# Create output directory if not already present
|
||||
_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
|
||||
|
||||
firmware-dirs := $(sort $(addprefix $(objtree)/$(obj)/,$(dir $(fw-external-y) $(fw-shipped-all))))
|
||||
# Create directories for firmware in subdirectories
|
||||
_dummy := $(foreach d,$(firmware-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
|
||||
endif
|
||||
|
||||
installed-mod-fw := $(addprefix $(INSTALL_FW_PATH)/,$(mod-fw))
|
||||
|
||||
installed-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-all))
|
||||
|
||||
quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
|
||||
cmd_install = mkdir -p $(@D); $(INSTALL) -m0644 $< $@
|
||||
|
||||
$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/%
|
||||
$(call cmd,install)
|
||||
|
||||
PHONY += __fw_install __fw_modinst FORCE
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
||||
__fw_install: $(installed-fw)
|
||||
|
||||
__fw_modinst: $(installed-mod-fw)
|
||||
@:
|
||||
|
||||
__fw_modbuild: $(addprefix $(obj)/,$(mod-fw))
|
||||
@:
|
||||
|
||||
FORCE:
|
||||
|
||||
# Read all saved command lines and dependencies for the $(targets) we
|
||||
# may be building using $(if_changed{,_dep}). As an optimization, we
|
||||
# don't need to read them if the target does not exist; we will rebuild
|
||||
# anyway in that case.
|
||||
|
||||
targets := $(wildcard $(sort $(targets)))
|
||||
cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
||||
|
||||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
@@ -27,6 +27,7 @@ ifdef CONFIG_GCC_PLUGINS
|
||||
|
||||
gcc-plugin-$(CONFIG_GCC_PLUGIN_STRUCTLEAK) += structleak_plugin.so
|
||||
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE) += -fplugin-arg-structleak_plugin-verbose
|
||||
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL) += -fplugin-arg-structleak_plugin-byref-all
|
||||
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK) += -DSTRUCTLEAK_PLUGIN
|
||||
|
||||
gcc-plugin-$(CONFIG_GCC_PLUGIN_RANDSTRUCT) += randomize_layout_plugin.so
|
||||
|
||||
@@ -173,10 +173,10 @@ cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
||||
|
||||
ld_flags = $(LDFLAGS) $(ldflags-y)
|
||||
|
||||
DTC_INCLUDE := $(srctree)/scripts/dtc/include-prefixes
|
||||
|
||||
dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \
|
||||
-I$(srctree)/arch/$(SRCARCH)/boot/dts \
|
||||
-I$(srctree)/scripts/dtc/include-prefixes \
|
||||
-I$(srctree)/drivers/of/testcase-data \
|
||||
$(addprefix -I,$(DTC_INCLUDE)) \
|
||||
-undef -D__DTS__
|
||||
|
||||
# Finds the multi-part object the current object will be linked into
|
||||
@@ -194,15 +194,6 @@ endef
|
||||
|
||||
ifdef REGENERATE_PARSERS
|
||||
|
||||
# GPERF
|
||||
# ---------------------------------------------------------------------------
|
||||
quiet_cmd_gperf = GPERF $@
|
||||
cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $<
|
||||
|
||||
.PRECIOUS: $(src)/%.hash.c_shipped
|
||||
$(src)/%.hash.c_shipped: $(src)/%.gperf
|
||||
$(call cmd,gperf)
|
||||
|
||||
# LEX
|
||||
# ---------------------------------------------------------------------------
|
||||
LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy)
|
||||
@@ -317,7 +308,7 @@ quiet_cmd_dtc = DTC $@
|
||||
cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
|
||||
$(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
|
||||
$(DTC) -O dtb -o $@ -b 0 \
|
||||
-i $(dir $<) $(DTC_FLAGS) \
|
||||
$(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \
|
||||
-d $(depfile).dtc.tmp $(dtc-tmp) ; \
|
||||
cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
###
|
||||
# Makefile.basic lists the most basic programs used during the build process.
|
||||
# This Makefile lists the most basic programs used during the build process.
|
||||
# The programs listed herein are what are needed to do the basic stuff,
|
||||
# such as fix file dependencies.
|
||||
# This initial step is needed to avoid files to be recompiled
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
*
|
||||
* So we play the same trick that "mkdep" played before. We replace
|
||||
* 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 prerequisites.
|
||||
*
|
||||
* kconfig populates a tree in include/config/ with an empty file
|
||||
* for each config symbol and when the configuration is updated
|
||||
@@ -34,7 +34,7 @@
|
||||
* the config symbols are rebuilt.
|
||||
*
|
||||
* So if the user changes his CONFIG_HIS_DRIVER option, only the objects
|
||||
* which depend on "include/linux/config/his/driver.h" will be rebuilt,
|
||||
* which depend on "include/config/his/driver.h" will be rebuilt,
|
||||
* so most likely only his driver ;-)
|
||||
*
|
||||
* The idea above dates, by the way, back to Michael E Chastain, AFAIK.
|
||||
@@ -75,7 +75,7 @@
|
||||
* and then basically copies the .<target>.d file to stdout, in the
|
||||
* process filtering out the dependency on autoconf.h and adding
|
||||
* 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 prerequisites.
|
||||
*
|
||||
* It will also filter out all the dependencies on *.ver. We need
|
||||
* to make sure that the generated version checksum are globally up
|
||||
|
||||
@@ -145,7 +145,8 @@ sub list_types {
|
||||
close($script);
|
||||
|
||||
my @types = ();
|
||||
for ($text =~ /\b(?:(?:CHK|WARN|ERROR)\s*\(\s*"([^"]+)")/g) {
|
||||
# Also catch when type or level is passed through a variable
|
||||
for ($text =~ /(?:(?:\bCHK|\bWARN|\bERROR|&\{\$msg_level})\s*\(|\$msg_type\s*=)\s*"([^"]+)"/g) {
|
||||
push (@types, $_);
|
||||
}
|
||||
@types = sort(uniq(@types));
|
||||
@@ -2715,10 +2716,10 @@ sub process {
|
||||
my $typo_fix = $spelling_fix{lc($typo)};
|
||||
$typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);
|
||||
$typo_fix = uc($typo_fix) if ($typo =~ /^[A-Z]+$/);
|
||||
my $msg_type = \&WARN;
|
||||
$msg_type = \&CHK if ($file);
|
||||
if (&{$msg_type}("TYPO_SPELLING",
|
||||
"'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) &&
|
||||
my $msg_level = \&WARN;
|
||||
$msg_level = \&CHK if ($file);
|
||||
if (&{$msg_level}("TYPO_SPELLING",
|
||||
"'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($typo)($|[^A-Za-z@])/$1$typo_fix$3/;
|
||||
}
|
||||
@@ -2753,10 +2754,10 @@ sub process {
|
||||
$rawline =~ /\b59\s+Temple\s+Pl/i ||
|
||||
$rawline =~ /\b51\s+Franklin\s+St/i) {
|
||||
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
|
||||
my $msg_type = \&ERROR;
|
||||
$msg_type = \&CHK if ($file);
|
||||
&{$msg_type}("FSF_MAILING_ADDRESS",
|
||||
"Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet)
|
||||
my $msg_level = \&ERROR;
|
||||
$msg_level = \&CHK if ($file);
|
||||
&{$msg_level}("FSF_MAILING_ADDRESS",
|
||||
"Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet)
|
||||
}
|
||||
|
||||
# check for Kconfig help text having a real description
|
||||
@@ -2875,7 +2876,7 @@ sub process {
|
||||
# #defines that are a single string
|
||||
#
|
||||
# There are 3 different line length message types:
|
||||
# LONG_LINE_COMMENT a comment starts before but extends beyond $max_linelength
|
||||
# LONG_LINE_COMMENT a comment starts before but extends beyond $max_line_length
|
||||
# LONG_LINE_STRING a string starts before but extends beyond $max_line_length
|
||||
# LONG_LINE all other lines longer than $max_line_length
|
||||
#
|
||||
@@ -3810,10 +3811,10 @@ sub process {
|
||||
|
||||
# avoid BUG() or BUG_ON()
|
||||
if ($line =~ /\b(?:BUG|BUG_ON)\b/) {
|
||||
my $msg_type = \&WARN;
|
||||
$msg_type = \&CHK if ($file);
|
||||
&{$msg_type}("AVOID_BUG",
|
||||
"Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON()\n" . $herecurr);
|
||||
my $msg_level = \&WARN;
|
||||
$msg_level = \&CHK if ($file);
|
||||
&{$msg_level}("AVOID_BUG",
|
||||
"Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON()\n" . $herecurr);
|
||||
}
|
||||
|
||||
# avoid LINUX_VERSION_CODE
|
||||
@@ -4339,11 +4340,11 @@ sub process {
|
||||
|
||||
# messages are ERROR, but ?: are CHK
|
||||
if ($ok == 0) {
|
||||
my $msg_type = \&ERROR;
|
||||
$msg_type = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/);
|
||||
my $msg_level = \&ERROR;
|
||||
$msg_level = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/);
|
||||
|
||||
if (&{$msg_type}("SPACING",
|
||||
"spaces required around that '$op' $at\n" . $hereptr)) {
|
||||
if (&{$msg_level}("SPACING",
|
||||
"spaces required around that '$op' $at\n" . $hereptr)) {
|
||||
$good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " ";
|
||||
if (defined $fix_elements[$n + 2]) {
|
||||
$fix_elements[$n + 2] =~ s/^\s+//;
|
||||
@@ -4496,6 +4497,30 @@ sub process {
|
||||
}
|
||||
}
|
||||
|
||||
# check for unnecessary parentheses around comparisons in if uses
|
||||
if ($^V && $^V ge 5.10.0 && defined($stat) &&
|
||||
$stat =~ /(^.\s*if\s*($balanced_parens))/) {
|
||||
my $if_stat = $1;
|
||||
my $test = substr($2, 1, -1);
|
||||
my $herectx;
|
||||
while ($test =~ /(?:^|[^\w\&\!\~])+\s*\(\s*([\&\!\~]?\s*$Lval\s*(?:$Compare\s*$FuncArg)?)\s*\)/g) {
|
||||
my $match = $1;
|
||||
# avoid parentheses around potential macro args
|
||||
next if ($match =~ /^\s*\w+\s*$/);
|
||||
if (!defined($herectx)) {
|
||||
$herectx = $here . "\n";
|
||||
my $cnt = statement_rawlines($if_stat);
|
||||
for (my $n = 0; $n < $cnt; $n++) {
|
||||
my $rl = raw_line($linenr, $n);
|
||||
$herectx .= $rl . "\n";
|
||||
last if $rl =~ /^[ \+].*\{/;
|
||||
}
|
||||
}
|
||||
CHK("UNNECESSARY_PARENTHESES",
|
||||
"Unnecessary parentheses around '$match'\n" . $herectx);
|
||||
}
|
||||
}
|
||||
|
||||
#goto labels aren't indented, allow a single space however
|
||||
if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
|
||||
!($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) {
|
||||
|
||||
@@ -873,7 +873,7 @@ static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct no
|
||||
while (size--)
|
||||
reg = (reg << 32) | fdt32_to_cpu(*(cells++));
|
||||
|
||||
snprintf(unit_addr, sizeof(unit_addr), "%zx", reg);
|
||||
snprintf(unit_addr, sizeof(unit_addr), "%llx", (unsigned long long)reg);
|
||||
if (!streq(unitname, unit_addr))
|
||||
FAIL(c, dti, "Node %s simple-bus unit address format error, expected \"%s\"",
|
||||
node->fullpath, unit_addr);
|
||||
|
||||
@@ -86,6 +86,7 @@ eod
|
||||
compile_to_dts() {
|
||||
|
||||
dtx="$1"
|
||||
dtc_include="$2"
|
||||
|
||||
if [ -d "${dtx}" ] ; then
|
||||
|
||||
@@ -113,7 +114,7 @@ compile_to_dts() {
|
||||
# ----- input is DTS (source)
|
||||
|
||||
if ( cpp ${cpp_flags} -x assembler-with-cpp ${dtx} \
|
||||
| ${DTC} -I dts ) ; then
|
||||
| ${DTC} ${dtc_include} -I dts ) ; then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -320,18 +321,13 @@ fi
|
||||
|
||||
cpp_flags="\
|
||||
-nostdinc \
|
||||
-I${srctree}/arch/${ARCH}/boot/dts \
|
||||
-I${srctree}/scripts/dtc/include-prefixes \
|
||||
-I${srctree}/drivers/of/testcase-data \
|
||||
-undef -D__DTS__"
|
||||
|
||||
dtc_flags="\
|
||||
-i ${srctree}/arch/${ARCH}/boot/dts/ \
|
||||
-i ${srctree}/kernel/dts \
|
||||
${dtx_path_1_dtc_include} \
|
||||
${dtx_path_2_dtc_include}"
|
||||
|
||||
DTC="${DTC} ${dtc_flags} -O dts -qq -f ${dtc_sort} -o -"
|
||||
DTC="\
|
||||
${DTC} \
|
||||
-i ${srctree}/scripts/dtc/include-prefixes \
|
||||
-O dts -qq -f ${dtc_sort} -o -"
|
||||
|
||||
|
||||
# ----- do the diff or decompile
|
||||
@@ -339,11 +335,11 @@ DTC="${DTC} ${dtc_flags} -O dts -qq -f ${dtc_sort} -o -"
|
||||
if (( ${cmd_diff} )) ; then
|
||||
|
||||
diff ${diff_flags} --label "${dtx_file_1}" --label "${dtx_file_2}" \
|
||||
<(compile_to_dts "${dtx_file_1}") \
|
||||
<(compile_to_dts "${dtx_file_2}")
|
||||
<(compile_to_dts "${dtx_file_1}" "${dtx_path_1_dtc_include}") \
|
||||
<(compile_to_dts "${dtx_file_2}" "${dtx_path_2_dtc_include}")
|
||||
|
||||
else
|
||||
|
||||
compile_to_dts "${dtx_file_1}"
|
||||
compile_to_dts "${dtx_file_1}" "${dtx_path_1_dtc_include}"
|
||||
|
||||
fi
|
||||
|
||||
@@ -436,9 +436,6 @@ static int is_pure_ops_struct(const_tree node)
|
||||
|
||||
gcc_assert(TREE_CODE(node) == RECORD_TYPE || TREE_CODE(node) == UNION_TYPE);
|
||||
|
||||
/* XXX: Do not apply randomization to all-ftpr structs yet. */
|
||||
return 0;
|
||||
|
||||
for (field = TYPE_FIELDS(node); field; field = TREE_CHAIN(field)) {
|
||||
const_tree fieldtype = get_field_type(field);
|
||||
enum tree_code code = TREE_CODE(fieldtype);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
* Options:
|
||||
* -fplugin-arg-structleak_plugin-disable
|
||||
* -fplugin-arg-structleak_plugin-verbose
|
||||
* -fplugin-arg-structleak_plugin-byref-all
|
||||
*
|
||||
* Usage:
|
||||
* $ # for 4.5/4.6/C based 4.7
|
||||
@@ -42,6 +43,7 @@ static struct plugin_info structleak_plugin_info = {
|
||||
};
|
||||
|
||||
static bool verbose;
|
||||
static bool byref_all;
|
||||
|
||||
static tree handle_user_attribute(tree *node, tree name, tree args, int flags, bool *no_add_attrs)
|
||||
{
|
||||
@@ -150,7 +152,9 @@ static void initialize(tree var)
|
||||
/* these aren't the 0days you're looking for */
|
||||
if (verbose)
|
||||
inform(DECL_SOURCE_LOCATION(var),
|
||||
"userspace variable will be forcibly initialized");
|
||||
"%s variable will be forcibly initialized",
|
||||
(byref_all && TREE_ADDRESSABLE(var)) ? "byref"
|
||||
: "userspace");
|
||||
|
||||
/* build the initializer expression */
|
||||
initializer = build_constructor(TREE_TYPE(var), NULL);
|
||||
@@ -190,7 +194,8 @@ static unsigned int structleak_execute(void)
|
||||
continue;
|
||||
|
||||
/* if the type is of interest, examine the variable */
|
||||
if (TYPE_USERSPACE(type))
|
||||
if (TYPE_USERSPACE(type) ||
|
||||
(byref_all && TREE_ADDRESSABLE(var)))
|
||||
initialize(var);
|
||||
}
|
||||
|
||||
@@ -232,6 +237,10 @@ __visible int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gc
|
||||
verbose = true;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(argv[i].key, "byref-all")) {
|
||||
byref_all = true;
|
||||
continue;
|
||||
}
|
||||
error(G_("unknown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
always := gdb-scripts
|
||||
|
||||
SRCTREE := $(shell cd $(srctree) && /bin/pwd)
|
||||
SRCTREE := $(abspath $(srctree))
|
||||
|
||||
$(obj)/gdb-scripts:
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
|
||||
@@ -9,6 +9,6 @@ HOSTCFLAGS_parse.tab.o := -I$(src)
|
||||
HOSTCFLAGS_lex.lex.o := -I$(src)
|
||||
|
||||
# dependencies on generated files need to be listed explicitly
|
||||
$(obj)/lex.lex.o: $(obj)/keywords.hash.c $(obj)/parse.tab.h
|
||||
$(obj)/lex.lex.o: $(obj)/parse.tab.h
|
||||
|
||||
clean-files := keywords.hash.c lex.lex.c parse.tab.c parse.tab.h
|
||||
clean-files := lex.lex.c parse.tab.c parse.tab.h
|
||||
|
||||
74
scripts/genksyms/keywords.c
Normal file
74
scripts/genksyms/keywords.c
Normal file
@@ -0,0 +1,74 @@
|
||||
static struct resword {
|
||||
const char *name;
|
||||
int token;
|
||||
} keywords[] = {
|
||||
{ "EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW },
|
||||
{ "EXPORT_SYMBOL_GPL", 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 },
|
||||
{ "__attribute", ATTRIBUTE_KEYW },
|
||||
{ "__attribute__", ATTRIBUTE_KEYW },
|
||||
{ "__const", CONST_KEYW },
|
||||
{ "__const__", CONST_KEYW },
|
||||
{ "__extension__", EXTENSION_KEYW },
|
||||
{ "__inline", INLINE_KEYW },
|
||||
{ "__inline__", INLINE_KEYW },
|
||||
{ "__signed", SIGNED_KEYW },
|
||||
{ "__signed__", SIGNED_KEYW },
|
||||
{ "__typeof", TYPEOF_KEYW },
|
||||
{ "__typeof__", TYPEOF_KEYW },
|
||||
{ "__volatile", VOLATILE_KEYW },
|
||||
{ "__volatile__", VOLATILE_KEYW },
|
||||
{ "__builtin_va_list", VA_LIST_KEYW },
|
||||
|
||||
// According to rth, c99 defines "_Bool", __restrict", __restrict__", "restrict". KAO
|
||||
{ "_Bool", BOOL_KEYW },
|
||||
{ "_restrict", RESTRICT_KEYW },
|
||||
{ "__restrict__", RESTRICT_KEYW },
|
||||
{ "restrict", RESTRICT_KEYW },
|
||||
{ "asm", ASM_KEYW },
|
||||
|
||||
// attribute commented out in modutils 2.4.2. People are using 'attribute' as a
|
||||
// field name which breaks the genksyms parser. It is not a gcc keyword anyway.
|
||||
// KAO. },
|
||||
// { "attribute", ATTRIBUTE_KEYW },
|
||||
|
||||
{ "auto", AUTO_KEYW },
|
||||
{ "char", CHAR_KEYW },
|
||||
{ "const", CONST_KEYW },
|
||||
{ "double", DOUBLE_KEYW },
|
||||
{ "enum", ENUM_KEYW },
|
||||
{ "extern", EXTERN_KEYW },
|
||||
{ "float", FLOAT_KEYW },
|
||||
{ "inline", INLINE_KEYW },
|
||||
{ "int", INT_KEYW },
|
||||
{ "long", LONG_KEYW },
|
||||
{ "register", REGISTER_KEYW },
|
||||
{ "short", SHORT_KEYW },
|
||||
{ "signed", SIGNED_KEYW },
|
||||
{ "static", STATIC_KEYW },
|
||||
{ "struct", STRUCT_KEYW },
|
||||
{ "typedef", TYPEDEF_KEYW },
|
||||
{ "typeof", TYPEOF_KEYW },
|
||||
{ "union", UNION_KEYW },
|
||||
{ "unsigned", UNSIGNED_KEYW },
|
||||
{ "void", VOID_KEYW },
|
||||
{ "volatile", VOLATILE_KEYW },
|
||||
};
|
||||
|
||||
#define NR_KEYWORDS (sizeof(keywords)/sizeof(struct resword))
|
||||
|
||||
static int is_reserved_word(register const char *str, register unsigned int len)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < NR_KEYWORDS; i++) {
|
||||
struct resword *r = keywords + i;
|
||||
int l = strlen(r->name);
|
||||
if (len == l && !memcmp(str, r->name, len))
|
||||
return r->token;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
%language=ANSI-C
|
||||
%define hash-function-name is_reserved_hash
|
||||
%define lookup-function-name is_reserved_word
|
||||
%{
|
||||
struct resword;
|
||||
static const struct resword *is_reserved_word(register const char *str, register unsigned int len);
|
||||
%}
|
||||
struct resword { const char *name; int token; }
|
||||
%%
|
||||
EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
|
||||
EXPORT_SYMBOL_GPL, 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
|
||||
__attribute, ATTRIBUTE_KEYW
|
||||
__attribute__, ATTRIBUTE_KEYW
|
||||
__const, CONST_KEYW
|
||||
__const__, CONST_KEYW
|
||||
__extension__, EXTENSION_KEYW
|
||||
__inline, INLINE_KEYW
|
||||
__inline__, INLINE_KEYW
|
||||
__signed, SIGNED_KEYW
|
||||
__signed__, SIGNED_KEYW
|
||||
__typeof, TYPEOF_KEYW
|
||||
__typeof__, TYPEOF_KEYW
|
||||
__volatile, VOLATILE_KEYW
|
||||
__volatile__, VOLATILE_KEYW
|
||||
__builtin_va_list, VA_LIST_KEYW
|
||||
# According to rth, c99 defines _Bool, __restrict, __restrict__, restrict. KAO
|
||||
_Bool, BOOL_KEYW
|
||||
_restrict, RESTRICT_KEYW
|
||||
__restrict__, RESTRICT_KEYW
|
||||
restrict, RESTRICT_KEYW
|
||||
asm, ASM_KEYW
|
||||
# attribute commented out in modutils 2.4.2. People are using 'attribute' as a
|
||||
# field name which breaks the genksyms parser. It is not a gcc keyword anyway.
|
||||
# KAO.
|
||||
# attribute, ATTRIBUTE_KEYW
|
||||
auto, AUTO_KEYW
|
||||
char, CHAR_KEYW
|
||||
const, CONST_KEYW
|
||||
double, DOUBLE_KEYW
|
||||
enum, ENUM_KEYW
|
||||
extern, EXTERN_KEYW
|
||||
float, FLOAT_KEYW
|
||||
inline, INLINE_KEYW
|
||||
int, INT_KEYW
|
||||
long, LONG_KEYW
|
||||
register, REGISTER_KEYW
|
||||
short, SHORT_KEYW
|
||||
signed, SIGNED_KEYW
|
||||
static, STATIC_KEYW
|
||||
struct, STRUCT_KEYW
|
||||
typedef, TYPEDEF_KEYW
|
||||
typeof, TYPEOF_KEYW
|
||||
union, UNION_KEYW
|
||||
unsigned, UNSIGNED_KEYW
|
||||
void, VOID_KEYW
|
||||
volatile, VOLATILE_KEYW
|
||||
@@ -1,230 +0,0 @@
|
||||
/* ANSI-C code produced by gperf version 3.0.4 */
|
||||
/* Command-line: gperf -t --output-file scripts/genksyms/keywords.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/genksyms/keywords.gperf */
|
||||
|
||||
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
||||
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
||||
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
|
||||
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
|
||||
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
|
||||
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
|
||||
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
|
||||
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
|
||||
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
|
||||
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
|
||||
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
|
||||
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
|
||||
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
|
||||
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
|
||||
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
|
||||
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
|
||||
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
|
||||
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
|
||||
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
|
||||
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
|
||||
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
|
||||
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
|
||||
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
|
||||
/* The character set is not based on ISO-646. */
|
||||
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||
#endif
|
||||
|
||||
#line 4 "scripts/genksyms/keywords.gperf"
|
||||
|
||||
struct resword;
|
||||
static const struct resword *is_reserved_word(register const char *str, register unsigned int len);
|
||||
#line 8 "scripts/genksyms/keywords.gperf"
|
||||
struct resword { const char *name; int token; };
|
||||
/* maximum key range = 98, duplicates = 0 */
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#else
|
||||
#ifdef __cplusplus
|
||||
inline
|
||||
#endif
|
||||
#endif
|
||||
static unsigned int
|
||||
is_reserved_hash (register const char *str, register unsigned int len)
|
||||
{
|
||||
static const unsigned char asso_values[] =
|
||||
{
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 0,
|
||||
101, 101, 101, 101, 101, 101, 15, 101, 101, 101,
|
||||
0, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 0, 101, 0, 0, 5,
|
||||
25, 20, 55, 30, 101, 15, 101, 101, 10, 0,
|
||||
10, 40, 10, 101, 10, 5, 0, 10, 15, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
|
||||
101, 101, 101, 101, 101, 101
|
||||
};
|
||||
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const struct resword *
|
||||
is_reserved_word (register const char *str, register unsigned int len)
|
||||
{
|
||||
enum
|
||||
{
|
||||
TOTAL_KEYWORDS = 47,
|
||||
MIN_WORD_LENGTH = 3,
|
||||
MAX_WORD_LENGTH = 24,
|
||||
MIN_HASH_VALUE = 3,
|
||||
MAX_HASH_VALUE = 100
|
||||
};
|
||||
|
||||
static const struct resword wordlist[] =
|
||||
{
|
||||
{""}, {""}, {""},
|
||||
#line 36 "scripts/genksyms/keywords.gperf"
|
||||
{"asm", ASM_KEYW},
|
||||
{""},
|
||||
#line 15 "scripts/genksyms/keywords.gperf"
|
||||
{"__asm", ASM_KEYW},
|
||||
{""},
|
||||
#line 16 "scripts/genksyms/keywords.gperf"
|
||||
{"__asm__", ASM_KEYW},
|
||||
{""}, {""},
|
||||
#line 27 "scripts/genksyms/keywords.gperf"
|
||||
{"__typeof__", TYPEOF_KEYW},
|
||||
{""},
|
||||
#line 19 "scripts/genksyms/keywords.gperf"
|
||||
{"__const", CONST_KEYW},
|
||||
#line 18 "scripts/genksyms/keywords.gperf"
|
||||
{"__attribute__", ATTRIBUTE_KEYW},
|
||||
#line 20 "scripts/genksyms/keywords.gperf"
|
||||
{"__const__", CONST_KEYW},
|
||||
#line 25 "scripts/genksyms/keywords.gperf"
|
||||
{"__signed__", SIGNED_KEYW},
|
||||
#line 54 "scripts/genksyms/keywords.gperf"
|
||||
{"static", STATIC_KEYW},
|
||||
#line 30 "scripts/genksyms/keywords.gperf"
|
||||
{"__builtin_va_list", VA_LIST_KEYW},
|
||||
#line 49 "scripts/genksyms/keywords.gperf"
|
||||
{"int", INT_KEYW},
|
||||
#line 42 "scripts/genksyms/keywords.gperf"
|
||||
{"char", CHAR_KEYW},
|
||||
#line 43 "scripts/genksyms/keywords.gperf"
|
||||
{"const", CONST_KEYW},
|
||||
#line 55 "scripts/genksyms/keywords.gperf"
|
||||
{"struct", STRUCT_KEYW},
|
||||
#line 34 "scripts/genksyms/keywords.gperf"
|
||||
{"__restrict__", RESTRICT_KEYW},
|
||||
#line 35 "scripts/genksyms/keywords.gperf"
|
||||
{"restrict", RESTRICT_KEYW},
|
||||
#line 12 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
|
||||
#line 23 "scripts/genksyms/keywords.gperf"
|
||||
{"__inline__", INLINE_KEYW},
|
||||
{""},
|
||||
#line 29 "scripts/genksyms/keywords.gperf"
|
||||
{"__volatile__", VOLATILE_KEYW},
|
||||
#line 10 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
|
||||
#line 33 "scripts/genksyms/keywords.gperf"
|
||||
{"_restrict", RESTRICT_KEYW},
|
||||
{""},
|
||||
#line 17 "scripts/genksyms/keywords.gperf"
|
||||
{"__attribute", ATTRIBUTE_KEYW},
|
||||
#line 11 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
|
||||
#line 21 "scripts/genksyms/keywords.gperf"
|
||||
{"__extension__", EXTENSION_KEYW},
|
||||
#line 45 "scripts/genksyms/keywords.gperf"
|
||||
{"enum", ENUM_KEYW},
|
||||
#line 13 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW},
|
||||
#line 46 "scripts/genksyms/keywords.gperf"
|
||||
{"extern", EXTERN_KEYW},
|
||||
{""},
|
||||
#line 24 "scripts/genksyms/keywords.gperf"
|
||||
{"__signed", SIGNED_KEYW},
|
||||
#line 14 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
|
||||
#line 58 "scripts/genksyms/keywords.gperf"
|
||||
{"union", UNION_KEYW},
|
||||
{""}, {""},
|
||||
#line 22 "scripts/genksyms/keywords.gperf"
|
||||
{"__inline", INLINE_KEYW},
|
||||
#line 41 "scripts/genksyms/keywords.gperf"
|
||||
{"auto", AUTO_KEYW},
|
||||
#line 28 "scripts/genksyms/keywords.gperf"
|
||||
{"__volatile", VOLATILE_KEYW},
|
||||
{""}, {""},
|
||||
#line 59 "scripts/genksyms/keywords.gperf"
|
||||
{"unsigned", UNSIGNED_KEYW},
|
||||
{""},
|
||||
#line 52 "scripts/genksyms/keywords.gperf"
|
||||
{"short", SHORT_KEYW},
|
||||
#line 48 "scripts/genksyms/keywords.gperf"
|
||||
{"inline", INLINE_KEYW},
|
||||
{""},
|
||||
#line 61 "scripts/genksyms/keywords.gperf"
|
||||
{"volatile", VOLATILE_KEYW},
|
||||
#line 50 "scripts/genksyms/keywords.gperf"
|
||||
{"long", LONG_KEYW},
|
||||
#line 32 "scripts/genksyms/keywords.gperf"
|
||||
{"_Bool", BOOL_KEYW},
|
||||
{""}, {""},
|
||||
#line 51 "scripts/genksyms/keywords.gperf"
|
||||
{"register", REGISTER_KEYW},
|
||||
#line 60 "scripts/genksyms/keywords.gperf"
|
||||
{"void", VOID_KEYW},
|
||||
{""},
|
||||
#line 44 "scripts/genksyms/keywords.gperf"
|
||||
{"double", DOUBLE_KEYW},
|
||||
{""},
|
||||
#line 26 "scripts/genksyms/keywords.gperf"
|
||||
{"__typeof", TYPEOF_KEYW},
|
||||
{""}, {""},
|
||||
#line 53 "scripts/genksyms/keywords.gperf"
|
||||
{"signed", SIGNED_KEYW},
|
||||
{""}, {""}, {""}, {""},
|
||||
#line 57 "scripts/genksyms/keywords.gperf"
|
||||
{"typeof", TYPEOF_KEYW},
|
||||
#line 56 "scripts/genksyms/keywords.gperf"
|
||||
{"typedef", TYPEDEF_KEYW},
|
||||
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
|
||||
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
|
||||
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
|
||||
#line 47 "scripts/genksyms/keywords.gperf"
|
||||
{"float", FLOAT_KEYW}
|
||||
};
|
||||
|
||||
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||
{
|
||||
register int key = is_reserved_hash (str, len);
|
||||
|
||||
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||
{
|
||||
register const char *s = wordlist[key].name;
|
||||
|
||||
if (*str == *s && !strcmp (str + 1, s + 1))
|
||||
return &wordlist[key];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -94,7 +94,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>)
|
||||
|
||||
/* Bring in the keyword recognizer. */
|
||||
|
||||
#include "keywords.hash.c"
|
||||
#include "keywords.c"
|
||||
|
||||
|
||||
/* Macros to append to our phrase collection list. */
|
||||
@@ -186,10 +186,10 @@ repeat:
|
||||
case IDENT:
|
||||
APP;
|
||||
{
|
||||
const struct resword *r = is_reserved_word(yytext, yyleng);
|
||||
if (r)
|
||||
int r = is_reserved_word(yytext, yyleng);
|
||||
if (r >= 0)
|
||||
{
|
||||
switch (token = r->token)
|
||||
switch (token = r)
|
||||
{
|
||||
case ATTRIBUTE_KEYW:
|
||||
lexstate = ST_ATTRIBUTE;
|
||||
@@ -292,7 +292,7 @@ repeat:
|
||||
case ST_TYPEOF_1:
|
||||
if (token == IDENT)
|
||||
{
|
||||
if (is_reserved_word(yytext, yyleng)
|
||||
if (is_reserved_word(yytext, yyleng) >= 0
|
||||
|| find_symbol(yytext, SYM_TYPEDEF, 1))
|
||||
{
|
||||
yyless(0);
|
||||
|
||||
@@ -1905,7 +1905,7 @@ void yyfree (void * ptr )
|
||||
|
||||
/* Bring in the keyword recognizer. */
|
||||
|
||||
#include "keywords.hash.c"
|
||||
#include "keywords.c"
|
||||
|
||||
/* Macros to append to our phrase collection list. */
|
||||
|
||||
@@ -1995,10 +1995,10 @@ repeat:
|
||||
case IDENT:
|
||||
APP;
|
||||
{
|
||||
const struct resword *r = is_reserved_word(yytext, yyleng);
|
||||
if (r)
|
||||
int r = is_reserved_word(yytext, yyleng);
|
||||
if (r >= 0)
|
||||
{
|
||||
switch (token = r->token)
|
||||
switch (token = r)
|
||||
{
|
||||
case ATTRIBUTE_KEYW:
|
||||
lexstate = ST_ATTRIBUTE;
|
||||
@@ -2101,7 +2101,7 @@ repeat:
|
||||
case ST_TYPEOF_1:
|
||||
if (token == IDENT)
|
||||
{
|
||||
if (is_reserved_word(yytext, yyleng)
|
||||
if (is_reserved_word(yytext, yyleng) >= 0
|
||||
|| find_symbol(yytext, SYM_TYPEDEF, 1))
|
||||
{
|
||||
yyless(0);
|
||||
|
||||
1
scripts/kconfig/.gitignore
vendored
1
scripts/kconfig/.gitignore
vendored
@@ -5,7 +5,6 @@ config*
|
||||
*.lex.c
|
||||
*.tab.c
|
||||
*.tab.h
|
||||
zconf.hash.c
|
||||
*.moc
|
||||
gconf.glade.h
|
||||
*.pot
|
||||
|
||||
@@ -191,7 +191,7 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
hostprogs-y := conf nconf mconf kxgettext qconf gconf
|
||||
|
||||
clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
|
||||
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
|
||||
clean-files += zconf.tab.c zconf.lex.c gconf.glade.h
|
||||
clean-files += config.pot linux.pot
|
||||
|
||||
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
|
||||
@@ -280,7 +280,7 @@ $(obj)/.tmp_gtkcheck:
|
||||
fi
|
||||
endif
|
||||
|
||||
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
|
||||
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c
|
||||
|
||||
$(obj)/qconf.o: $(obj)/qconf.moc
|
||||
|
||||
|
||||
54
scripts/kconfig/kconf_id.c
Normal file
54
scripts/kconfig/kconf_id.c
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
static struct kconf_id kconf_id_array[] = {
|
||||
{ "mainmenu", T_MAINMENU, TF_COMMAND },
|
||||
{ "menu", T_MENU, TF_COMMAND },
|
||||
{ "endmenu", T_ENDMENU, TF_COMMAND },
|
||||
{ "source", T_SOURCE, TF_COMMAND },
|
||||
{ "choice", T_CHOICE, TF_COMMAND },
|
||||
{ "endchoice", T_ENDCHOICE, TF_COMMAND },
|
||||
{ "comment", T_COMMENT, TF_COMMAND },
|
||||
{ "config", T_CONFIG, TF_COMMAND },
|
||||
{ "menuconfig", T_MENUCONFIG, TF_COMMAND },
|
||||
{ "help", T_HELP, TF_COMMAND },
|
||||
{ "---help---", T_HELP, TF_COMMAND },
|
||||
{ "if", T_IF, TF_COMMAND|TF_PARAM },
|
||||
{ "endif", T_ENDIF, TF_COMMAND },
|
||||
{ "depends", T_DEPENDS, TF_COMMAND },
|
||||
{ "optional", T_OPTIONAL, TF_COMMAND },
|
||||
{ "default", T_DEFAULT, TF_COMMAND, S_UNKNOWN },
|
||||
{ "prompt", T_PROMPT, TF_COMMAND },
|
||||
{ "tristate", T_TYPE, TF_COMMAND, S_TRISTATE },
|
||||
{ "def_tristate", T_DEFAULT, TF_COMMAND, S_TRISTATE },
|
||||
{ "bool", T_TYPE, TF_COMMAND, S_BOOLEAN },
|
||||
{ "boolean", T_TYPE, TF_COMMAND, S_BOOLEAN },
|
||||
{ "def_bool", T_DEFAULT, TF_COMMAND, S_BOOLEAN },
|
||||
{ "int", T_TYPE, TF_COMMAND, S_INT },
|
||||
{ "hex", T_TYPE, TF_COMMAND, S_HEX },
|
||||
{ "string", T_TYPE, TF_COMMAND, S_STRING },
|
||||
{ "select", T_SELECT, TF_COMMAND },
|
||||
{ "imply", T_IMPLY, TF_COMMAND },
|
||||
{ "range", T_RANGE, TF_COMMAND },
|
||||
{ "visible", T_VISIBLE, TF_COMMAND },
|
||||
{ "option", T_OPTION, TF_COMMAND },
|
||||
{ "on", T_ON, TF_PARAM },
|
||||
{ "modules", T_OPT_MODULES, TF_OPTION },
|
||||
{ "defconfig_list", T_OPT_DEFCONFIG_LIST, TF_OPTION },
|
||||
{ "env", T_OPT_ENV, TF_OPTION },
|
||||
{ "allnoconfig_y", T_OPT_ALLNOCONFIG_Y, TF_OPTION },
|
||||
};
|
||||
|
||||
#define KCONF_ID_ARRAY_SIZE (sizeof(kconf_id_array)/sizeof(struct kconf_id))
|
||||
|
||||
static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < KCONF_ID_ARRAY_SIZE; i++) {
|
||||
struct kconf_id *id = kconf_id_array+i;
|
||||
int l = strlen(id->name);
|
||||
|
||||
if (len == l && !memcmp(str, id->name, len))
|
||||
return id;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ enum conf_def_mode {
|
||||
#define T_OPT_ALLNOCONFIG_Y 4
|
||||
|
||||
struct kconf_id {
|
||||
int name;
|
||||
const char *name;
|
||||
int token;
|
||||
unsigned int flags;
|
||||
enum symbol_type stype;
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
%language=ANSI-C
|
||||
%define hash-function-name kconf_id_hash
|
||||
%define lookup-function-name kconf_id_lookup
|
||||
%define string-pool-name kconf_id_strings
|
||||
%compare-strncmp
|
||||
%enum
|
||||
%pic
|
||||
%struct-type
|
||||
|
||||
struct kconf_id;
|
||||
|
||||
static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
||||
|
||||
%%
|
||||
mainmenu, T_MAINMENU, TF_COMMAND
|
||||
menu, T_MENU, TF_COMMAND
|
||||
endmenu, T_ENDMENU, TF_COMMAND
|
||||
source, T_SOURCE, TF_COMMAND
|
||||
choice, T_CHOICE, TF_COMMAND
|
||||
endchoice, T_ENDCHOICE, TF_COMMAND
|
||||
comment, T_COMMENT, TF_COMMAND
|
||||
config, T_CONFIG, TF_COMMAND
|
||||
menuconfig, T_MENUCONFIG, TF_COMMAND
|
||||
help, T_HELP, TF_COMMAND
|
||||
---help---, T_HELP, TF_COMMAND
|
||||
if, T_IF, TF_COMMAND|TF_PARAM
|
||||
endif, T_ENDIF, TF_COMMAND
|
||||
depends, T_DEPENDS, TF_COMMAND
|
||||
optional, T_OPTIONAL, TF_COMMAND
|
||||
default, T_DEFAULT, TF_COMMAND, S_UNKNOWN
|
||||
prompt, T_PROMPT, TF_COMMAND
|
||||
tristate, T_TYPE, TF_COMMAND, S_TRISTATE
|
||||
def_tristate, T_DEFAULT, TF_COMMAND, S_TRISTATE
|
||||
bool, T_TYPE, TF_COMMAND, S_BOOLEAN
|
||||
boolean, T_TYPE, TF_COMMAND, S_BOOLEAN
|
||||
def_bool, T_DEFAULT, TF_COMMAND, S_BOOLEAN
|
||||
int, T_TYPE, TF_COMMAND, S_INT
|
||||
hex, T_TYPE, TF_COMMAND, S_HEX
|
||||
string, T_TYPE, TF_COMMAND, S_STRING
|
||||
select, T_SELECT, TF_COMMAND
|
||||
imply, T_IMPLY, TF_COMMAND
|
||||
range, T_RANGE, TF_COMMAND
|
||||
visible, T_VISIBLE, TF_COMMAND
|
||||
option, T_OPTION, TF_COMMAND
|
||||
on, T_ON, TF_PARAM
|
||||
modules, T_OPT_MODULES, TF_OPTION
|
||||
defconfig_list, T_OPT_DEFCONFIG_LIST,TF_OPTION
|
||||
env, T_OPT_ENV, TF_OPTION
|
||||
allnoconfig_y, T_OPT_ALLNOCONFIG_Y,TF_OPTION
|
||||
%%
|
||||
@@ -1,297 +0,0 @@
|
||||
/* ANSI-C code produced by gperf version 3.0.4 */
|
||||
/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf */
|
||||
|
||||
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
||||
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
||||
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
|
||||
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
|
||||
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
|
||||
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
|
||||
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
|
||||
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
|
||||
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
|
||||
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
|
||||
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
|
||||
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
|
||||
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
|
||||
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
|
||||
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
|
||||
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
|
||||
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
|
||||
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
|
||||
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
|
||||
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
|
||||
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
|
||||
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
|
||||
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
|
||||
/* The character set is not based on ISO-646. */
|
||||
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||
#endif
|
||||
|
||||
#line 10 "scripts/kconfig/zconf.gperf"
|
||||
struct kconf_id;
|
||||
|
||||
static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
||||
/* maximum key range = 71, duplicates = 0 */
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#else
|
||||
#ifdef __cplusplus
|
||||
inline
|
||||
#endif
|
||||
#endif
|
||||
static unsigned int
|
||||
kconf_id_hash (register const char *str, register unsigned int len)
|
||||
{
|
||||
static const unsigned char asso_values[] =
|
||||
{
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 0, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 10, 25, 25,
|
||||
0, 0, 0, 5, 0, 0, 73, 73, 5, 0,
|
||||
10, 5, 45, 73, 20, 20, 0, 15, 15, 73,
|
||||
20, 0, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||
73, 73, 73, 73, 73, 73
|
||||
};
|
||||
register int hval = len;
|
||||
|
||||
switch (hval)
|
||||
{
|
||||
default:
|
||||
hval += asso_values[(unsigned char)str[2]];
|
||||
/*FALLTHROUGH*/
|
||||
case 2:
|
||||
case 1:
|
||||
hval += asso_values[(unsigned char)str[0]];
|
||||
break;
|
||||
}
|
||||
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
struct kconf_id_strings_t
|
||||
{
|
||||
char kconf_id_strings_str2[sizeof("if")];
|
||||
char kconf_id_strings_str3[sizeof("int")];
|
||||
char kconf_id_strings_str5[sizeof("endif")];
|
||||
char kconf_id_strings_str7[sizeof("default")];
|
||||
char kconf_id_strings_str8[sizeof("tristate")];
|
||||
char kconf_id_strings_str9[sizeof("endchoice")];
|
||||
char kconf_id_strings_str10[sizeof("---help---")];
|
||||
char kconf_id_strings_str12[sizeof("def_tristate")];
|
||||
char kconf_id_strings_str13[sizeof("def_bool")];
|
||||
char kconf_id_strings_str14[sizeof("defconfig_list")];
|
||||
char kconf_id_strings_str17[sizeof("on")];
|
||||
char kconf_id_strings_str18[sizeof("optional")];
|
||||
char kconf_id_strings_str21[sizeof("option")];
|
||||
char kconf_id_strings_str22[sizeof("endmenu")];
|
||||
char kconf_id_strings_str23[sizeof("mainmenu")];
|
||||
char kconf_id_strings_str25[sizeof("menuconfig")];
|
||||
char kconf_id_strings_str27[sizeof("modules")];
|
||||
char kconf_id_strings_str28[sizeof("allnoconfig_y")];
|
||||
char kconf_id_strings_str29[sizeof("menu")];
|
||||
char kconf_id_strings_str31[sizeof("select")];
|
||||
char kconf_id_strings_str32[sizeof("comment")];
|
||||
char kconf_id_strings_str33[sizeof("env")];
|
||||
char kconf_id_strings_str35[sizeof("range")];
|
||||
char kconf_id_strings_str36[sizeof("choice")];
|
||||
char kconf_id_strings_str39[sizeof("bool")];
|
||||
char kconf_id_strings_str41[sizeof("source")];
|
||||
char kconf_id_strings_str42[sizeof("visible")];
|
||||
char kconf_id_strings_str43[sizeof("hex")];
|
||||
char kconf_id_strings_str46[sizeof("config")];
|
||||
char kconf_id_strings_str47[sizeof("boolean")];
|
||||
char kconf_id_strings_str50[sizeof("imply")];
|
||||
char kconf_id_strings_str51[sizeof("string")];
|
||||
char kconf_id_strings_str54[sizeof("help")];
|
||||
char kconf_id_strings_str56[sizeof("prompt")];
|
||||
char kconf_id_strings_str72[sizeof("depends")];
|
||||
};
|
||||
static const struct kconf_id_strings_t kconf_id_strings_contents =
|
||||
{
|
||||
"if",
|
||||
"int",
|
||||
"endif",
|
||||
"default",
|
||||
"tristate",
|
||||
"endchoice",
|
||||
"---help---",
|
||||
"def_tristate",
|
||||
"def_bool",
|
||||
"defconfig_list",
|
||||
"on",
|
||||
"optional",
|
||||
"option",
|
||||
"endmenu",
|
||||
"mainmenu",
|
||||
"menuconfig",
|
||||
"modules",
|
||||
"allnoconfig_y",
|
||||
"menu",
|
||||
"select",
|
||||
"comment",
|
||||
"env",
|
||||
"range",
|
||||
"choice",
|
||||
"bool",
|
||||
"source",
|
||||
"visible",
|
||||
"hex",
|
||||
"config",
|
||||
"boolean",
|
||||
"imply",
|
||||
"string",
|
||||
"help",
|
||||
"prompt",
|
||||
"depends"
|
||||
};
|
||||
#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||
__attribute__ ((__gnu_inline__))
|
||||
#endif
|
||||
#endif
|
||||
const struct kconf_id *
|
||||
kconf_id_lookup (register const char *str, register unsigned int len)
|
||||
{
|
||||
enum
|
||||
{
|
||||
TOTAL_KEYWORDS = 35,
|
||||
MIN_WORD_LENGTH = 2,
|
||||
MAX_WORD_LENGTH = 14,
|
||||
MIN_HASH_VALUE = 2,
|
||||
MAX_HASH_VALUE = 72
|
||||
};
|
||||
|
||||
static const struct kconf_id wordlist[] =
|
||||
{
|
||||
{-1}, {-1},
|
||||
#line 26 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
|
||||
#line 37 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
|
||||
{-1},
|
||||
#line 27 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
|
||||
{-1},
|
||||
#line 30 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
|
||||
#line 32 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE},
|
||||
#line 20 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
|
||||
#line 25 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_HELP, TF_COMMAND},
|
||||
{-1},
|
||||
#line 33 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE},
|
||||
#line 36 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
|
||||
#line 47 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION},
|
||||
{-1}, {-1},
|
||||
#line 45 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_ON, TF_PARAM},
|
||||
#line 29 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_OPTIONAL, TF_COMMAND},
|
||||
{-1}, {-1},
|
||||
#line 44 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_OPTION, TF_COMMAND},
|
||||
#line 17 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ENDMENU, TF_COMMAND},
|
||||
#line 15 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_MAINMENU, TF_COMMAND},
|
||||
{-1},
|
||||
#line 23 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND},
|
||||
{-1},
|
||||
#line 46 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
|
||||
#line 49 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_OPT_ALLNOCONFIG_Y,TF_OPTION},
|
||||
#line 16 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
|
||||
{-1},
|
||||
#line 40 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND},
|
||||
#line 21 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
|
||||
#line 48 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_OPT_ENV, TF_OPTION},
|
||||
{-1},
|
||||
#line 42 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_RANGE, TF_COMMAND},
|
||||
#line 19 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CHOICE, TF_COMMAND},
|
||||
{-1}, {-1},
|
||||
#line 34 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
||||
{-1},
|
||||
#line 18 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND},
|
||||
#line 43 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_VISIBLE, TF_COMMAND},
|
||||
#line 38 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43, T_TYPE, TF_COMMAND, S_HEX},
|
||||
{-1}, {-1},
|
||||
#line 22 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_CONFIG, TF_COMMAND},
|
||||
#line 35 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
||||
{-1}, {-1},
|
||||
#line 41 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str50, T_IMPLY, TF_COMMAND},
|
||||
#line 39 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_TYPE, TF_COMMAND, S_STRING},
|
||||
{-1}, {-1},
|
||||
#line 24 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54, T_HELP, TF_COMMAND},
|
||||
{-1},
|
||||
#line 31 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56, T_PROMPT, TF_COMMAND},
|
||||
{-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
|
||||
{-1}, {-1}, {-1}, {-1}, {-1}, {-1},
|
||||
#line 28 "scripts/kconfig/zconf.gperf"
|
||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72, T_DEPENDS, TF_COMMAND}
|
||||
};
|
||||
|
||||
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||
{
|
||||
register int key = kconf_id_hash (str, len);
|
||||
|
||||
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||
{
|
||||
register int o = wordlist[key].name;
|
||||
if (o >= 0)
|
||||
{
|
||||
register const char *s = o + kconf_id_strings;
|
||||
|
||||
if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
|
||||
return &wordlist[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#line 50 "scripts/kconfig/zconf.gperf"
|
||||
|
||||
@@ -209,8 +209,8 @@ int zconfparse (void);
|
||||
/* Copy the second part of user declarations. */
|
||||
|
||||
|
||||
/* Include zconf.hash.c here so it can see the token constants. */
|
||||
#include "zconf.hash.c"
|
||||
/* Include kconf_id.c here so it can see the token constants. */
|
||||
#include "kconf_id.c"
|
||||
|
||||
|
||||
|
||||
@@ -1515,7 +1515,7 @@ yyreduce:
|
||||
case 12:
|
||||
|
||||
{
|
||||
zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name);
|
||||
zconf_error("unexpected option \"%s\"", (yyvsp[-2].id)->name);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -2268,13 +2268,13 @@ static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtok
|
||||
{
|
||||
if (id->token != endtoken) {
|
||||
zconf_error("unexpected '%s' within %s block",
|
||||
kconf_id_strings + id->name, zconf_tokenname(starttoken));
|
||||
id->name, zconf_tokenname(starttoken));
|
||||
zconfnerrs++;
|
||||
return false;
|
||||
}
|
||||
if (current_menu->file != current_file) {
|
||||
zconf_error("'%s' in different file than '%s'",
|
||||
kconf_id_strings + id->name, zconf_tokenname(starttoken));
|
||||
id->name, zconf_tokenname(starttoken));
|
||||
fprintf(stderr, "%s:%d: location of the '%s'\n",
|
||||
current_menu->file->name, current_menu->lineno,
|
||||
zconf_tokenname(starttoken));
|
||||
|
||||
@@ -101,8 +101,8 @@ static struct menu *current_menu, *current_entry;
|
||||
} if_entry menu_entry choice_entry
|
||||
|
||||
%{
|
||||
/* Include zconf.hash.c here so it can see the token constants. */
|
||||
#include "zconf.hash.c"
|
||||
/* Include zconf_id.c here so it can see the token constants. */
|
||||
#include "kconf_id.c"
|
||||
%}
|
||||
|
||||
%%
|
||||
@@ -119,7 +119,7 @@ stmt_list:
|
||||
| stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
|
||||
| stmt_list option_name error T_EOL
|
||||
{
|
||||
zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name);
|
||||
zconf_error("unexpected option \"%s\"", $2->name);
|
||||
}
|
||||
| stmt_list error T_EOL { zconf_error("invalid statement"); }
|
||||
;
|
||||
@@ -551,13 +551,13 @@ static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtok
|
||||
{
|
||||
if (id->token != endtoken) {
|
||||
zconf_error("unexpected '%s' within %s block",
|
||||
kconf_id_strings + id->name, zconf_tokenname(starttoken));
|
||||
id->name, zconf_tokenname(starttoken));
|
||||
zconfnerrs++;
|
||||
return false;
|
||||
}
|
||||
if (current_menu->file != current_file) {
|
||||
zconf_error("'%s' in different file than '%s'",
|
||||
kconf_id_strings + id->name, zconf_tokenname(starttoken));
|
||||
id->name, zconf_tokenname(starttoken));
|
||||
fprintf(stderr, "%s:%d: location of the '%s'\n",
|
||||
current_menu->file->name, current_menu->lineno,
|
||||
zconf_tokenname(starttoken));
|
||||
|
||||
@@ -2226,6 +2226,7 @@ sub dump_enum($$) {
|
||||
if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
|
||||
$declaration_name = $1;
|
||||
my $members = $2;
|
||||
$members =~ s/\s+$//;
|
||||
|
||||
foreach my $arg (split ',', $members) {
|
||||
$arg =~ s/^\s*(\w+).*/$1/;
|
||||
@@ -2766,6 +2767,9 @@ sub process_proto_type($$) {
|
||||
|
||||
while (1) {
|
||||
if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
|
||||
if( length $prototype ) {
|
||||
$prototype .= " "
|
||||
}
|
||||
$prototype .= $1 . $2;
|
||||
($2 eq '{') && $brcount++;
|
||||
($2 eq '}') && $brcount--;
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
if [ ! -f .version ]
|
||||
then
|
||||
echo 1
|
||||
else
|
||||
expr 0`cat .version` + 1
|
||||
fi
|
||||
@@ -47,6 +47,12 @@ enum export {
|
||||
export_unused_gpl, export_gpl_future, export_unknown
|
||||
};
|
||||
|
||||
/* In kernel, this size is defined in linux/module.h;
|
||||
* here we use Elf_Addr instead of long for covering cross-compile
|
||||
*/
|
||||
|
||||
#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
|
||||
|
||||
#define PRINTF __attribute__ ((format (printf, 1, 2)))
|
||||
|
||||
PRINTF void fatal(const char *fmt, ...)
|
||||
@@ -261,7 +267,17 @@ static enum export export_no(const char *s)
|
||||
return export_unknown;
|
||||
}
|
||||
|
||||
static const char *sec_name(struct elf_info *elf, int secindex);
|
||||
static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
|
||||
{
|
||||
return (void *)elf->hdr +
|
||||
elf->sechdrs[elf->secindex_strings].sh_offset +
|
||||
sechdr->sh_name;
|
||||
}
|
||||
|
||||
static const char *sec_name(struct elf_info *elf, int secindex)
|
||||
{
|
||||
return sech_name(elf, &elf->sechdrs[secindex]);
|
||||
}
|
||||
|
||||
#define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
|
||||
|
||||
@@ -775,21 +791,6 @@ static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
|
||||
return "(unknown)";
|
||||
}
|
||||
|
||||
static const char *sec_name(struct elf_info *elf, int secindex)
|
||||
{
|
||||
Elf_Shdr *sechdrs = elf->sechdrs;
|
||||
return (void *)elf->hdr +
|
||||
elf->sechdrs[elf->secindex_strings].sh_offset +
|
||||
sechdrs[secindex].sh_name;
|
||||
}
|
||||
|
||||
static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
|
||||
{
|
||||
return (void *)elf->hdr +
|
||||
elf->sechdrs[elf->secindex_strings].sh_offset +
|
||||
sechdr->sh_name;
|
||||
}
|
||||
|
||||
/* The pattern is an array of simple patterns.
|
||||
* "foo" will match an exact string equal to "foo"
|
||||
* "*foo" will match a string that ends with "foo"
|
||||
@@ -2116,6 +2117,23 @@ static void check_exports(struct module *mod)
|
||||
}
|
||||
}
|
||||
|
||||
static int check_modname_len(struct module *mod)
|
||||
{
|
||||
const char *mod_name;
|
||||
|
||||
mod_name = strrchr(mod->name, '/');
|
||||
if (mod_name == NULL)
|
||||
mod_name = mod->name;
|
||||
else
|
||||
mod_name++;
|
||||
if (strlen(mod_name) >= MODULE_NAME_LEN) {
|
||||
merror("module name is too long [%s.ko]\n", mod->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Header for the generated file
|
||||
**/
|
||||
@@ -2155,11 +2173,6 @@ static void add_staging_flag(struct buffer *b, const char *name)
|
||||
buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
|
||||
}
|
||||
|
||||
/* In kernel, this size is defined in linux/module.h;
|
||||
* here we use Elf_Addr instead of long for covering cross-compile
|
||||
*/
|
||||
#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
|
||||
|
||||
/**
|
||||
* Record CRCs for unresolved symbols
|
||||
**/
|
||||
@@ -2490,6 +2503,7 @@ int main(int argc, char **argv)
|
||||
|
||||
buf.pos = 0;
|
||||
|
||||
err |= check_modname_len(mod);
|
||||
add_header(&buf, mod);
|
||||
add_intree_flag(&buf, !external_module);
|
||||
add_staging_flag(&buf, mod->name);
|
||||
|
||||
@@ -50,8 +50,6 @@ rpm-pkg rpm: FORCE
|
||||
$(MAKE) clean
|
||||
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
|
||||
$(call cmd,src_tar,$(KERNELPATH),kernel.spec)
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
|
||||
mv -f $(objtree)/.tmp_version $(objtree)/.version
|
||||
rpmbuild $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz
|
||||
rm $(KERNELPATH).tar.gz kernel.spec
|
||||
|
||||
@@ -60,9 +58,6 @@ rpm-pkg rpm: FORCE
|
||||
binrpm-pkg: FORCE
|
||||
$(MAKE) KBUILD_SRC=
|
||||
$(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
|
||||
mv -f $(objtree)/.tmp_version $(objtree)/.version
|
||||
|
||||
rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
|
||||
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec
|
||||
rm binkernel.spec
|
||||
|
||||
@@ -92,12 +92,10 @@ else
|
||||
fi
|
||||
sourcename=$KDEB_SOURCENAME
|
||||
tmpdir="$objtree/debian/tmp"
|
||||
fwdir="$objtree/debian/fwtmp"
|
||||
kernel_headers_dir="$objtree/debian/hdrtmp"
|
||||
libc_headers_dir="$objtree/debian/headertmp"
|
||||
dbg_dir="$objtree/debian/dbgtmp"
|
||||
packagename=linux-image-$version
|
||||
fwpackagename=linux-firmware-image-$version
|
||||
kernel_headers_packagename=linux-headers-$version
|
||||
libc_headers_packagename=linux-libc-dev
|
||||
dbg_packagename=$packagename-dbg
|
||||
@@ -126,10 +124,9 @@ esac
|
||||
BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
|
||||
|
||||
# Setup the directory structure
|
||||
rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files
|
||||
rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files
|
||||
mkdir -m 755 -p "$tmpdir/DEBIAN"
|
||||
mkdir -p "$tmpdir/lib" "$tmpdir/boot"
|
||||
mkdir -p "$fwdir/lib/firmware/$version/"
|
||||
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
|
||||
|
||||
# Build and install the kernel
|
||||
@@ -306,7 +303,6 @@ else
|
||||
cat <<EOF >> debian/control
|
||||
|
||||
Package: $packagename
|
||||
Suggests: $fwpackagename
|
||||
Architecture: any
|
||||
Description: Linux kernel, version $version
|
||||
This package contains the Linux kernel, modules and corresponding other
|
||||
@@ -345,22 +341,6 @@ Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
|
||||
This is useful for people who need to build external modules
|
||||
EOF
|
||||
|
||||
# Do we have firmware? Move it out of the way and build it into a package.
|
||||
if [ -e "$tmpdir/lib/firmware" ]; then
|
||||
mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
|
||||
rmdir "$tmpdir/lib/firmware"
|
||||
|
||||
cat <<EOF >> debian/control
|
||||
|
||||
Package: $fwpackagename
|
||||
Architecture: all
|
||||
Description: Linux kernel firmware, version $version
|
||||
This package contains firmware from the Linux kernel, version $version.
|
||||
EOF
|
||||
|
||||
create_package "$fwpackagename" "$fwdir"
|
||||
fi
|
||||
|
||||
cat <<EOF >> debian/control
|
||||
|
||||
Package: $libc_headers_packagename
|
||||
|
||||
@@ -24,20 +24,19 @@ tarball="${objtree}/linux-${KERNELRELEASE}-${ARCH}.tar"
|
||||
#
|
||||
case "${1}" in
|
||||
tar-pkg)
|
||||
compress="cat"
|
||||
file_ext=""
|
||||
opts=
|
||||
;;
|
||||
targz-pkg)
|
||||
compress="gzip"
|
||||
file_ext=".gz"
|
||||
opts=--gzip
|
||||
tarball=${tarball}.gz
|
||||
;;
|
||||
tarbz2-pkg)
|
||||
compress="bzip2"
|
||||
file_ext=".bz2"
|
||||
opts=--bzip2
|
||||
tarball=${tarball}.bz2
|
||||
;;
|
||||
tarxz-pkg)
|
||||
compress="xz"
|
||||
file_ext=".xz"
|
||||
opts=--xz
|
||||
tarball=${tarball}.xz
|
||||
;;
|
||||
*)
|
||||
echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2
|
||||
@@ -51,13 +50,14 @@ esac
|
||||
#
|
||||
rm -rf -- "${tmpdir}"
|
||||
mkdir -p -- "${tmpdir}/boot"
|
||||
|
||||
dirs=boot
|
||||
|
||||
#
|
||||
# Try to install modules
|
||||
#
|
||||
if grep -q '^CONFIG_MODULES=y' "${objtree}/.config"; then
|
||||
if grep -q '^CONFIG_MODULES=y' "${KCONFIG_CONFIG}"; then
|
||||
make ARCH="${ARCH}" O="${objtree}" KBUILD_SRC= INSTALL_MOD_PATH="${tmpdir}" modules_install
|
||||
dirs="$dirs lib"
|
||||
fi
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ fi
|
||||
# Install basic kernel files
|
||||
#
|
||||
cp -v -- "${objtree}/System.map" "${tmpdir}/boot/System.map-${KERNELRELEASE}"
|
||||
cp -v -- "${objtree}/.config" "${tmpdir}/boot/config-${KERNELRELEASE}"
|
||||
cp -v -- "${KCONFIG_CONFIG}" "${tmpdir}/boot/config-${KERNELRELEASE}"
|
||||
cp -v -- "${objtree}/vmlinux" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}"
|
||||
|
||||
|
||||
@@ -124,14 +124,12 @@ esac
|
||||
#
|
||||
# Create the tarball
|
||||
#
|
||||
(
|
||||
opts=
|
||||
if tar --owner=root --group=root --help >/dev/null 2>&1; then
|
||||
opts="--owner=root --group=root"
|
||||
fi
|
||||
tar cf - -C "$tmpdir" boot/ lib/ $opts | ${compress} > "${tarball}${file_ext}"
|
||||
)
|
||||
if tar --owner=root --group=root --help >/dev/null 2>&1; then
|
||||
opts="$opts --owner=root --group=root"
|
||||
fi
|
||||
|
||||
echo "Tarball successfully created in ${tarball}${file_ext}"
|
||||
tar cf $tarball -C $tmpdir $opts $dirs
|
||||
|
||||
echo "Tarball successfully created in $tarball"
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -27,9 +27,7 @@ __KERNELRELEASE=`echo $KERNELRELEASE | sed -e "s/-/_/g"`
|
||||
echo "Name: kernel"
|
||||
echo "Summary: The Linux Kernel"
|
||||
echo "Version: $__KERNELRELEASE"
|
||||
# we need to determine the NEXT version number so that uname and
|
||||
# rpm -q will agree
|
||||
echo "Release: `. $srctree/scripts/mkversion`"
|
||||
echo "Release: $(cat .version 2>/dev/null || echo 1)"
|
||||
echo "License: GPL"
|
||||
echo "Group: System Environment/Kernel"
|
||||
echo "Vendor: The Linux Community"
|
||||
@@ -77,7 +75,7 @@ fi
|
||||
echo "%build"
|
||||
|
||||
if ! $PREBUILT; then
|
||||
echo "make clean && make %{?_smp_mflags}"
|
||||
echo "make clean && make %{?_smp_mflags} KBUILD_BUILD_VERSION=%{release}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
@@ -88,11 +86,8 @@ echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
|
||||
echo "%else"
|
||||
echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules'
|
||||
echo "%endif"
|
||||
echo 'mkdir -p $RPM_BUILD_ROOT'"/lib/firmware/$KERNELRELEASE"
|
||||
|
||||
echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{?_smp_mflags} KBUILD_SRC= mod-fw= modules_install'
|
||||
echo 'INSTALL_FW_PATH=$RPM_BUILD_ROOT'"/lib/firmware/$KERNELRELEASE"
|
||||
echo 'make INSTALL_FW_PATH=$INSTALL_FW_PATH' firmware_install
|
||||
echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{?_smp_mflags} KBUILD_SRC= modules_install'
|
||||
echo "%ifarch ia64"
|
||||
echo 'cp $KBUILD_IMAGE $RPM_BUILD_ROOT'"/boot/efi/vmlinuz-$KERNELRELEASE"
|
||||
echo 'ln -s '"efi/vmlinuz-$KERNELRELEASE" '$RPM_BUILD_ROOT'"/boot/"
|
||||
@@ -119,7 +114,7 @@ if ! $PREBUILT; then
|
||||
echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/build"
|
||||
echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/source"
|
||||
echo "mkdir -p "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE"
|
||||
echo "EXCLUDES=\"$RCS_TAR_IGNORE --exclude .tmp_versions --exclude=*vmlinux* --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation --exclude=firmware --exclude .config.old --exclude .missing-syscalls.d\""
|
||||
echo "EXCLUDES=\"$RCS_TAR_IGNORE --exclude .tmp_versions --exclude=*vmlinux* --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation --exclude .config.old --exclude .missing-syscalls.d\""
|
||||
echo "tar "'$EXCLUDES'" -cf- . | (cd "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE;tar xvf -)"
|
||||
echo 'cd $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE"
|
||||
echo "ln -sf /usr/src/kernels/$KERNELRELEASE build"
|
||||
@@ -154,7 +149,6 @@ echo '%defattr (-, root, root)'
|
||||
echo "/lib/modules/$KERNELRELEASE"
|
||||
echo "%exclude /lib/modules/$KERNELRELEASE/build"
|
||||
echo "%exclude /lib/modules/$KERNELRELEASE/source"
|
||||
echo "/lib/firmware/$KERNELRELEASE"
|
||||
echo "/boot/*"
|
||||
echo ""
|
||||
echo "%files headers"
|
||||
|
||||
@@ -129,11 +129,16 @@ int main(int argc, char *argv[])
|
||||
for (i = 0; secclass_map[i].name; i++) {
|
||||
struct security_class_mapping *map = &secclass_map[i];
|
||||
for (j = 0; map->perms[j]; j++) {
|
||||
if (j >= 32) {
|
||||
fprintf(stderr, "Too many permissions to fit into an access vector at (%s, %s).\n",
|
||||
map->name, map->perms[j]);
|
||||
exit(5);
|
||||
}
|
||||
fprintf(fout, "#define %s__%s", map->name,
|
||||
map->perms[j]);
|
||||
for (k = 0; k < max(1, 40 - strlen(map->name) - strlen(map->perms[j])); k++)
|
||||
fprintf(fout, " ");
|
||||
fprintf(fout, "0x%08xUL\n", (1<<j));
|
||||
fprintf(fout, "0x%08xU\n", (1<<j));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
608
scripts/sphinx-pre-install
Executable file
608
scripts/sphinx-pre-install
Executable file
@@ -0,0 +1,608 @@
|
||||
#!/usr/bin/perl
|
||||
use strict;
|
||||
|
||||
# Copyright (c) 2017 Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
my $virtenv_dir = "sphinx_1.4";
|
||||
my $requirement_file = "Documentation/sphinx/requirements.txt";
|
||||
|
||||
#
|
||||
# Static vars
|
||||
#
|
||||
|
||||
my %missing;
|
||||
my $system_release;
|
||||
my $need = 0;
|
||||
my $optional = 0;
|
||||
my $need_symlink = 0;
|
||||
my $need_sphinx = 0;
|
||||
my $install = "";
|
||||
|
||||
#
|
||||
# Command line arguments
|
||||
#
|
||||
|
||||
my $pdf = 1;
|
||||
my $virtualenv = 1;
|
||||
|
||||
#
|
||||
# List of required texlive packages on Fedora and OpenSuse
|
||||
#
|
||||
|
||||
my %texlive = (
|
||||
'amsfonts.sty' => 'texlive-amsfonts',
|
||||
'amsmath.sty' => 'texlive-amsmath',
|
||||
'amssymb.sty' => 'texlive-amsfonts',
|
||||
'amsthm.sty' => 'texlive-amscls',
|
||||
'anyfontsize.sty' => 'texlive-anyfontsize',
|
||||
'atbegshi.sty' => 'texlive-oberdiek',
|
||||
'bm.sty' => 'texlive-tools',
|
||||
'capt-of.sty' => 'texlive-capt-of',
|
||||
'cmap.sty' => 'texlive-cmap',
|
||||
'ecrm1000.tfm' => 'texlive-ec',
|
||||
'eqparbox.sty' => 'texlive-eqparbox',
|
||||
'eu1enc.def' => 'texlive-euenc',
|
||||
'fancybox.sty' => 'texlive-fancybox',
|
||||
'fancyvrb.sty' => 'texlive-fancyvrb',
|
||||
'float.sty' => 'texlive-float',
|
||||
'fncychap.sty' => 'texlive-fncychap',
|
||||
'footnote.sty' => 'texlive-mdwtools',
|
||||
'framed.sty' => 'texlive-framed',
|
||||
'luatex85.sty' => 'texlive-luatex85',
|
||||
'multirow.sty' => 'texlive-multirow',
|
||||
'needspace.sty' => 'texlive-needspace',
|
||||
'palatino.sty' => 'texlive-psnfss',
|
||||
'parskip.sty' => 'texlive-parskip',
|
||||
'polyglossia.sty' => 'texlive-polyglossia',
|
||||
'tabulary.sty' => 'texlive-tabulary',
|
||||
'threeparttable.sty' => 'texlive-threeparttable',
|
||||
'titlesec.sty' => 'texlive-titlesec',
|
||||
'ucs.sty' => 'texlive-ucs',
|
||||
'upquote.sty' => 'texlive-upquote',
|
||||
'wrapfig.sty' => 'texlive-wrapfig',
|
||||
);
|
||||
|
||||
#
|
||||
# Subroutines that checks if a feature exists
|
||||
#
|
||||
|
||||
sub check_missing(%)
|
||||
{
|
||||
my %map = %{$_[0]};
|
||||
|
||||
foreach my $prog (sort keys %missing) {
|
||||
my $is_optional = $missing{$prog};
|
||||
|
||||
if ($is_optional) {
|
||||
print "Warning: better to also install \"$prog\".\n";
|
||||
} else {
|
||||
print "ERROR: please install \"$prog\", otherwise, build won't work.\n";
|
||||
}
|
||||
if (defined($map{$prog})) {
|
||||
$install .= " " . $map{$prog};
|
||||
} else {
|
||||
$install .= " " . $prog;
|
||||
}
|
||||
}
|
||||
|
||||
$install =~ s/^\s//;
|
||||
}
|
||||
|
||||
sub add_package($$)
|
||||
{
|
||||
my $package = shift;
|
||||
my $is_optional = shift;
|
||||
|
||||
$missing{$package} = $is_optional;
|
||||
if ($is_optional) {
|
||||
$optional++;
|
||||
} else {
|
||||
$need++;
|
||||
}
|
||||
}
|
||||
|
||||
sub check_missing_file($$$)
|
||||
{
|
||||
my $file = shift;
|
||||
my $package = shift;
|
||||
my $is_optional = shift;
|
||||
|
||||
return if(-e $file);
|
||||
|
||||
add_package($package, $is_optional);
|
||||
}
|
||||
|
||||
sub findprog($)
|
||||
{
|
||||
foreach(split(/:/, $ENV{PATH})) {
|
||||
return "$_/$_[0]" if(-x "$_/$_[0]");
|
||||
}
|
||||
}
|
||||
|
||||
sub check_program($$)
|
||||
{
|
||||
my $prog = shift;
|
||||
my $is_optional = shift;
|
||||
|
||||
return if findprog($prog);
|
||||
|
||||
add_package($prog, $is_optional);
|
||||
}
|
||||
|
||||
sub check_perl_module($$)
|
||||
{
|
||||
my $prog = shift;
|
||||
my $is_optional = shift;
|
||||
|
||||
my $err = system("perl -M$prog -e 1 2>/dev/null /dev/null");
|
||||
return if ($err == 0);
|
||||
|
||||
add_package($prog, $is_optional);
|
||||
}
|
||||
|
||||
sub check_python_module($$)
|
||||
{
|
||||
my $prog = shift;
|
||||
my $is_optional = shift;
|
||||
|
||||
my $err = system("python3 -c 'import $prog' 2>/dev/null /dev/null");
|
||||
return if ($err == 0);
|
||||
my $err = system("python -c 'import $prog' 2>/dev/null /dev/null");
|
||||
return if ($err == 0);
|
||||
|
||||
add_package($prog, $is_optional);
|
||||
}
|
||||
|
||||
sub check_rpm_missing($$)
|
||||
{
|
||||
my @pkgs = @{$_[0]};
|
||||
my $is_optional = $_[1];
|
||||
|
||||
foreach my $prog(@pkgs) {
|
||||
my $err = system("rpm -q '$prog' 2>/dev/null >/dev/null");
|
||||
add_package($prog, $is_optional) if ($err);
|
||||
}
|
||||
}
|
||||
|
||||
sub check_pacman_missing($$)
|
||||
{
|
||||
my @pkgs = @{$_[0]};
|
||||
my $is_optional = $_[1];
|
||||
|
||||
foreach my $prog(@pkgs) {
|
||||
my $err = system("pacman -Q '$prog' 2>/dev/null >/dev/null");
|
||||
add_package($prog, $is_optional) if ($err);
|
||||
}
|
||||
}
|
||||
|
||||
sub check_missing_tex($)
|
||||
{
|
||||
my $is_optional = shift;
|
||||
my $kpsewhich = findprog("kpsewhich");
|
||||
|
||||
foreach my $prog(keys %texlive) {
|
||||
my $package = $texlive{$prog};
|
||||
if (!$kpsewhich) {
|
||||
add_package($package, $is_optional);
|
||||
next;
|
||||
}
|
||||
my $file = qx($kpsewhich $prog);
|
||||
add_package($package, $is_optional) if ($file =~ /^\s*$/);
|
||||
}
|
||||
}
|
||||
|
||||
sub check_sphinx()
|
||||
{
|
||||
return if findprog("sphinx-build");
|
||||
|
||||
if (findprog("sphinx-build-3")) {
|
||||
$need_symlink = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if ($virtualenv) {
|
||||
my $prog = findprog("virtualenv-3");
|
||||
$prog = findprog("virtualenv-3.5") if (!$prog);
|
||||
|
||||
check_program("virtualenv", 0) if (!$prog);
|
||||
$need_sphinx = 1;
|
||||
} else {
|
||||
add_package("python-sphinx", 0);
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Ancillary subroutines
|
||||
#
|
||||
|
||||
sub catcheck($)
|
||||
{
|
||||
my $res = "";
|
||||
$res = qx(cat $_[0]) if (-r $_[0]);
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub which($)
|
||||
{
|
||||
my $file = shift;
|
||||
my @path = split ":", $ENV{PATH};
|
||||
|
||||
foreach my $dir(@path) {
|
||||
my $name = $dir.'/'.$file;
|
||||
return $name if (-x $name );
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
#
|
||||
# Subroutines that check distro-specific hints
|
||||
#
|
||||
|
||||
sub give_debian_hints()
|
||||
{
|
||||
my %map = (
|
||||
"python-sphinx" => "python3-sphinx",
|
||||
"sphinx_rtd_theme" => "python3-sphinx-rtd-theme",
|
||||
"virtualenv" => "virtualenv",
|
||||
"dot" => "graphviz",
|
||||
"convert" => "imagemagick",
|
||||
"Pod::Usage" => "perl-modules",
|
||||
"xelatex" => "texlive-xetex",
|
||||
"rsvg-convert" => "librsvg2-bin",
|
||||
);
|
||||
|
||||
if ($pdf) {
|
||||
check_missing_file("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
||||
"fonts-dejavu", 1);
|
||||
}
|
||||
|
||||
check_program("dvipng", 1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
printf("You should run:\n\n\tsudo apt-get install $install\n");
|
||||
}
|
||||
|
||||
sub give_redhat_hints()
|
||||
{
|
||||
my %map = (
|
||||
"python-sphinx" => "python3-sphinx",
|
||||
"sphinx_rtd_theme" => "python3-sphinx_rtd_theme",
|
||||
"virtualenv" => "python3-virtualenv",
|
||||
"dot" => "graphviz",
|
||||
"convert" => "ImageMagick",
|
||||
"Pod::Usage" => "perl-Pod-Usage",
|
||||
"xelatex" => "texlive-xetex-bin",
|
||||
"rsvg-convert" => "librsvg2-tools",
|
||||
);
|
||||
|
||||
my @fedora26_opt_pkgs = (
|
||||
"graphviz-gd", # Fedora 26: needed for PDF support
|
||||
);
|
||||
|
||||
my @fedora_tex_pkgs = (
|
||||
"texlive-collection-fontsrecommended",
|
||||
"texlive-collection-latex",
|
||||
"dejavu-sans-fonts",
|
||||
"dejavu-serif-fonts",
|
||||
"dejavu-sans-mono-fonts",
|
||||
);
|
||||
|
||||
#
|
||||
# Checks valid for RHEL/CentOS version 7.x.
|
||||
#
|
||||
if (! $system_release =~ /Fedora/) {
|
||||
$map{"virtualenv"} = "python-virtualenv";
|
||||
}
|
||||
|
||||
my $release;
|
||||
|
||||
$release = $1 if ($system_release =~ /Fedora\s+release\s+(\d+)/);
|
||||
|
||||
check_rpm_missing(\@fedora26_opt_pkgs, 1) if ($pdf && $release >= 26);
|
||||
check_rpm_missing(\@fedora_tex_pkgs, 1) if ($pdf);
|
||||
check_missing_tex(1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
|
||||
if ($release >= 18) {
|
||||
# dnf, for Fedora 18+
|
||||
printf("You should run:\n\n\tsudo dnf install -y $install\n");
|
||||
} else {
|
||||
# yum, for RHEL (and clones) or Fedora version < 18
|
||||
printf("You should run:\n\n\tsudo yum install -y $install\n");
|
||||
}
|
||||
}
|
||||
|
||||
sub give_opensuse_hints()
|
||||
{
|
||||
my %map = (
|
||||
"python-sphinx" => "python3-sphinx",
|
||||
"sphinx_rtd_theme" => "python3-sphinx_rtd_theme",
|
||||
"virtualenv" => "python3-virtualenv",
|
||||
"dot" => "graphviz",
|
||||
"convert" => "ImageMagick",
|
||||
"Pod::Usage" => "perl-Pod-Usage",
|
||||
"xelatex" => "texlive-xetex-bin",
|
||||
"rsvg-convert" => "rsvg-view",
|
||||
);
|
||||
|
||||
my @suse_tex_pkgs = (
|
||||
"texlive-babel-english",
|
||||
"texlive-caption",
|
||||
"texlive-colortbl",
|
||||
"texlive-courier",
|
||||
"texlive-dvips",
|
||||
"texlive-helvetic",
|
||||
"texlive-makeindex",
|
||||
"texlive-metafont",
|
||||
"texlive-metapost",
|
||||
"texlive-palatino",
|
||||
"texlive-preview",
|
||||
"texlive-times",
|
||||
"texlive-zapfchan",
|
||||
"texlive-zapfding",
|
||||
);
|
||||
|
||||
check_rpm_missing(\@suse_tex_pkgs, 1) if ($pdf);
|
||||
check_missing_tex(1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
printf("You should run:\n\n\tsudo zypper install --no-recommends $install\n");
|
||||
}
|
||||
|
||||
sub give_mageia_hints()
|
||||
{
|
||||
my %map = (
|
||||
"python-sphinx" => "python3-sphinx",
|
||||
"sphinx_rtd_theme" => "python3-sphinx_rtd_theme",
|
||||
"virtualenv" => "python3-virtualenv",
|
||||
"dot" => "graphviz",
|
||||
"convert" => "ImageMagick",
|
||||
"Pod::Usage" => "perl-Pod-Usage",
|
||||
"xelatex" => "texlive",
|
||||
"rsvg-convert" => "librsvg2-tools",
|
||||
);
|
||||
|
||||
my @tex_pkgs = (
|
||||
"texlive-fontsextra",
|
||||
);
|
||||
|
||||
check_rpm_missing(\@tex_pkgs, 1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
printf("You should run:\n\n\tsudo urpmi $install\n");
|
||||
}
|
||||
|
||||
sub give_arch_linux_hints()
|
||||
{
|
||||
my %map = (
|
||||
"sphinx_rtd_theme" => "python-sphinx_rtd_theme",
|
||||
"virtualenv" => "python-virtualenv",
|
||||
"dot" => "graphviz",
|
||||
"convert" => "imagemagick",
|
||||
"xelatex" => "texlive-bin",
|
||||
"rsvg-convert" => "extra/librsvg",
|
||||
);
|
||||
|
||||
my @archlinux_tex_pkgs = (
|
||||
"texlive-core",
|
||||
"texlive-latexextra",
|
||||
"ttf-dejavu",
|
||||
);
|
||||
check_pacman_missing(\@archlinux_tex_pkgs, 1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
printf("You should run:\n\n\tsudo pacman -S $install\n");
|
||||
}
|
||||
|
||||
sub give_gentoo_hints()
|
||||
{
|
||||
my %map = (
|
||||
"sphinx_rtd_theme" => "dev-python/sphinx_rtd_theme",
|
||||
"virtualenv" => "dev-python/virtualenv",
|
||||
"dot" => "media-gfx/graphviz",
|
||||
"convert" => "media-gfx/imagemagick",
|
||||
"xelatex" => "dev-texlive/texlive-xetex media-fonts/dejavu",
|
||||
"rsvg-convert" => "gnome-base/librsvg",
|
||||
);
|
||||
|
||||
check_missing_file("/usr/share/fonts/dejavu/DejaVuSans.ttf",
|
||||
"media-fonts/dejavu", 1) if ($pdf);
|
||||
|
||||
check_missing(\%map);
|
||||
|
||||
return if (!$need && !$optional);
|
||||
|
||||
printf("You should run:\n\n");
|
||||
printf("\tsudo su -c 'echo \"media-gfx/imagemagick svg png\" > /etc/portage/package.use/imagemagick'\n");
|
||||
printf("\tsudo su -c 'echo \"media-gfx/graphviz cairo pdf\" > /etc/portage/package.use/graphviz'\n");
|
||||
printf("\tsudo emerge --ask $install\n");
|
||||
|
||||
}
|
||||
|
||||
sub check_distros()
|
||||
{
|
||||
# Distro-specific hints
|
||||
if ($system_release =~ /Red Hat Enterprise Linux/) {
|
||||
give_redhat_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /CentOS/) {
|
||||
give_redhat_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Scientific Linux/) {
|
||||
give_redhat_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Oracle Linux Server/) {
|
||||
give_redhat_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Fedora/) {
|
||||
give_redhat_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Ubuntu/) {
|
||||
give_debian_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Debian/) {
|
||||
give_debian_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /openSUSE/) {
|
||||
give_opensuse_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Mageia/) {
|
||||
give_mageia_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Arch Linux/) {
|
||||
give_arch_linux_hints;
|
||||
return;
|
||||
}
|
||||
if ($system_release =~ /Gentoo/) {
|
||||
give_gentoo_hints;
|
||||
return;
|
||||
}
|
||||
|
||||
#
|
||||
# Fall-back to generic hint code for other distros
|
||||
# That's far from ideal, specially for LaTeX dependencies.
|
||||
#
|
||||
my %map = (
|
||||
"sphinx-build" => "sphinx"
|
||||
);
|
||||
check_missing_tex(1) if ($pdf);
|
||||
check_missing(\%map);
|
||||
print "I don't know distro $system_release.\n";
|
||||
print "So, I can't provide you a hint with the install procedure.\n";
|
||||
print "There are likely missing dependencies.\n";
|
||||
}
|
||||
|
||||
#
|
||||
# Common dependencies
|
||||
#
|
||||
|
||||
sub check_needs()
|
||||
{
|
||||
if ($system_release) {
|
||||
print "Detected OS: $system_release.\n";
|
||||
} else {
|
||||
print "Unknown OS\n";
|
||||
}
|
||||
|
||||
# RHEL 7.x and clones have Sphinx version 1.1.x and incomplete texlive
|
||||
if (($system_release =~ /Red Hat Enterprise Linux/) ||
|
||||
($system_release =~ /CentOS/) ||
|
||||
($system_release =~ /Scientific Linux/) ||
|
||||
($system_release =~ /Oracle Linux Server/)) {
|
||||
$virtualenv = 1;
|
||||
$pdf = 0;
|
||||
|
||||
printf("NOTE: On this distro, Sphinx and TexLive shipped versions are incompatible\n");
|
||||
printf("with doc build. So, use Sphinx via a Python virtual environment.\n\n");
|
||||
printf("This script can't install a TexLive version that would provide PDF.\n");
|
||||
}
|
||||
|
||||
# Check for needed programs/tools
|
||||
check_sphinx();
|
||||
check_perl_module("Pod::Usage", 0);
|
||||
check_program("make", 0);
|
||||
check_program("gcc", 0);
|
||||
check_python_module("sphinx_rtd_theme", 1) if (!$virtualenv);
|
||||
check_program("xelatex", 1) if ($pdf);
|
||||
check_program("dot", 1);
|
||||
check_program("convert", 1);
|
||||
check_program("rsvg-convert", 1) if ($pdf);
|
||||
|
||||
check_distros();
|
||||
|
||||
if ($need_symlink) {
|
||||
printf "\tsudo ln -sf %s /usr/bin/sphinx-build\n\n",
|
||||
which("sphinx-build-3");
|
||||
}
|
||||
if ($need_sphinx) {
|
||||
my $activate = "$virtenv_dir/bin/activate";
|
||||
if (-e "$ENV{'PWD'}/$activate") {
|
||||
printf "\nNeed to activate virtualenv with:\n";
|
||||
printf "\t. $activate\n";
|
||||
} else {
|
||||
my $virtualenv = findprog("virtualenv-3");
|
||||
$virtualenv = findprog("virtualenv-3.5") if (!$virtualenv);
|
||||
$virtualenv = findprog("virtualenv") if (!$virtualenv);
|
||||
$virtualenv = "virtualenv" if (!$virtualenv);
|
||||
|
||||
printf "\t$virtualenv $virtenv_dir\n";
|
||||
printf "\t. $activate\n";
|
||||
printf "\tpip install -r $requirement_file\n";
|
||||
$need++;
|
||||
}
|
||||
}
|
||||
printf "\n";
|
||||
|
||||
print "All optional dependenties are met.\n" if (!$optional);
|
||||
|
||||
if ($need == 1) {
|
||||
die "Can't build as $need mandatory dependency is missing";
|
||||
} elsif ($need) {
|
||||
die "Can't build as $need mandatory dependencies are missing";
|
||||
}
|
||||
|
||||
print "Needed package dependencies are met.\n";
|
||||
}
|
||||
|
||||
#
|
||||
# Main
|
||||
#
|
||||
|
||||
while (@ARGV) {
|
||||
my $arg = shift(@ARGV);
|
||||
|
||||
if ($arg eq "--no-virtualenv") {
|
||||
$virtualenv = 0;
|
||||
} elsif ($arg eq "--no-pdf"){
|
||||
$pdf = 0;
|
||||
} else {
|
||||
print "Usage:\n\t$0 <--no-virtualenv> <--no-pdf>\n\n";
|
||||
exit -1;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Determine the system type. There's no standard unique way that would
|
||||
# work with all distros with a minimal package install. So, several
|
||||
# methods are used here.
|
||||
#
|
||||
# By default, it will use lsb_release function. If not available, it will
|
||||
# fail back to reading the known different places where the distro name
|
||||
# is stored
|
||||
#
|
||||
|
||||
$system_release = qx(lsb_release -d) if which("lsb_release");
|
||||
$system_release =~ s/Description:\s*// if ($system_release);
|
||||
$system_release = catcheck("/etc/system-release") if !$system_release;
|
||||
$system_release = catcheck("/etc/redhat-release") if !$system_release;
|
||||
$system_release = catcheck("/etc/lsb-release") if !$system_release;
|
||||
$system_release = catcheck("/etc/gentoo-release") if !$system_release;
|
||||
$system_release = catcheck("/etc/issue") if !$system_release;
|
||||
$system_release =~ s/\s+$//;
|
||||
|
||||
check_needs;
|
||||
Reference in New Issue
Block a user