make it possible to keep Config/Kbuild snippets in *.c files

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-05-09 04:22:48 +02:00
parent 6774386d95
commit 7fb68f199f
8 changed files with 325 additions and 258 deletions

View File

@ -377,6 +377,11 @@ ifneq ($(KBUILD_SRC),)
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif endif
# This target generates Kbuild's and Config.in's from *.c files
PHONY += gen_build_files
gen_build_files:
$(Q)$(srctree)/scripts/gen_build_files.sh $(srctree) $(objtree)
# To make sure we do not include .config for any of the *config targets # To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile # catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including # It is allowed to specify more targets when calling make, including
@ -428,7 +433,7 @@ ifeq ($(config-targets),1)
-include $(srctree)/arch/$(ARCH)/Makefile -include $(srctree)/arch/$(ARCH)/Makefile
export KBUILD_DEFCONFIG export KBUILD_DEFCONFIG
config %config: scripts_basic outputmakefile FORCE config %config: scripts_basic outputmakefile gen_build_files FORCE
$(Q)mkdir -p include $(Q)mkdir -p include
$(Q)$(MAKE) $(build)=scripts/kconfig $@ $(Q)$(MAKE) $(build)=scripts/kconfig $@
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
@ -443,7 +448,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 parrallel # in parrallel
PHONY += scripts PHONY += scripts
scripts: scripts_basic include/config/MARKER scripts: gen_build_files scripts_basic include/config/MARKER
$(Q)$(MAKE) $(build)=$(@) $(Q)$(MAKE) $(build)=$(@)
scripts_basic: include/autoconf.h scripts_basic: include/autoconf.h

View File

@ -1,253 +0,0 @@
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#
menu "Finding Utilities"
config FIND
bool "find"
default n
help
find is used to search your system to find specified files.
config FEATURE_FIND_PRINT0
bool "Enable -print0: NUL-terminated output"
default y
depends on FIND
help
Causes output names to be separated by a NUL character
rather than a newline. This allows names that contain
newlines and other whitespace to be more easily
interpreted by other programs.
config FEATURE_FIND_MTIME
bool "Enable -mtime: modified time matching"
default y
depends on FIND
help
Allow searching based on the modification time of
files, in days.
config FEATURE_FIND_MMIN
bool "Enable -mmin: modified time matching by minutes"
default y
depends on FIND
help
Allow searching based on the modification time of
files, in minutes.
config FEATURE_FIND_PERM
bool "Enable -perm: permissions matching"
default y
depends on FIND
help
Enable searching based on file permissions.
config FEATURE_FIND_TYPE
bool "Enable -type: file type matching (file/dir/link/...)"
default y
depends on FIND
help
Enable searching based on file type (file,
directory, socket, device, etc.).
config FEATURE_FIND_XDEV
bool "Enable -xdev: 'stay in filesystem'"
default y
depends on FIND
help
This option allows find to restrict searches to a single filesystem.
config FEATURE_FIND_MAXDEPTH
bool "Enable -maxdepth N"
default y
depends on FIND
help
This option enables -maxdepth N option.
config FEATURE_FIND_NEWER
bool "Enable -newer: compare file modification times"
default y
depends on FIND
help
Support the 'find -newer' option for finding any files which have
a modified time that is more recent than the specified FILE.
config FEATURE_FIND_INUM
bool "Enable -inum: inode number matching"
default y
depends on FIND
help
Support the 'find -inum' option for searching by inode number.
config FEATURE_FIND_EXEC
bool "Enable -exec: execute commands"
default y
depends on FIND
help
Support the 'find -exec' option for executing commands based upon
the files matched.
config FEATURE_FIND_USER
bool "Enable -user: username/uid matching"
default y
depends on FIND
help
Support the 'find -user' option for searching by username or uid.
config FEATURE_FIND_GROUP
bool "Enable -group: group/gid matching"
default y
depends on FIND
help
Support the 'find -group' option for searching by group name or gid.
config FEATURE_FIND_NOT
bool "Enable the 'not' (!) operator"
default y
depends on FIND
help
Support the '!' operator to invert the test results.
If 'Enable full-blown desktop' is enabled, then will also support
the non-POSIX notation '-not'.
config FEATURE_FIND_DEPTH
bool "Enable -depth"
default y
depends on FIND
help
Process each directory's contents before the directory itself.
config FEATURE_FIND_PAREN
bool "Enable parens in options"
default y
depends on FIND
help
Enable usage of parens '(' to specify logical order of arguments.
config FEATURE_FIND_SIZE
bool "Enable -size: file size matching"
default y
depends on FIND
help
Support the 'find -size' option for searching by file size.
config FEATURE_FIND_PRUNE
bool "Enable -prune: exclude subdirectories"
default y
depends on FIND
help
If the file is a directory, dont descend into it. Useful for
exclusion .svn and CVS directories.
config FEATURE_FIND_DELETE
bool "Enable -delete: delete files/dirs"
default n
depends on FIND && FEATURE_FIND_DEPTH
help
Support the 'find -delete' option for deleting files and directories.
WARNING: This option can do much harm if used wrong. Busybox will not
try to protect the user from doing stupid things. Use with care.
config FEATURE_FIND_PATH
bool "Enable -path: match pathname with shell pattern"
default y
depends on FIND
help
The -path option matches whole pathname instead of just filename.
config FEATURE_FIND_REGEX
bool "Enable -regex: match pathname with regex"
default y
depends on FIND
help
The -regex option matches whole pathname against regular expression.
config FEATURE_FIND_CONTEXT
bool "Enable -context: security context matching"
default n
depends on FIND && SELINUX
help
Support the 'find -context' option for matching security context.
config FEATURE_FIND_LINKS
bool "Enable -links: link count matching"
default n
depends on FIND
help
Support the 'find -links' option for matching number of links.
config GREP
bool "grep"
default n
help
grep is used to search files for a specified pattern.
config FEATURE_GREP_EGREP_ALIAS
bool "Enable extended regular expressions (egrep & grep -E)"
default y
depends on GREP
help
Enabled support for extended regular expressions. Extended
regular expressions allow for alternation (foo|bar), grouping,
and various repetition operators.
config FEATURE_GREP_FGREP_ALIAS
bool "Alias fgrep to grep -F"
default y
depends on GREP
help
fgrep sees the search pattern as a normal string rather than
regular expressions.
grep -F always works, this just creates the fgrep alias.
config FEATURE_GREP_CONTEXT
bool "Enable before and after context flags (-A, -B and -C)"
default y
depends on GREP
help
Print the specified number of leading (-B) and/or trailing (-A)
context surrounding our matching lines.
Print the specified number of context lines (-C).
config XARGS
bool "xargs"
default n
help
xargs is used to execute a specified command for
every item from standard input.
config FEATURE_XARGS_SUPPORT_CONFIRMATION
bool "Enable -p: prompt and confirmation"
default n
depends on XARGS
help
Support -p: prompt the user whether to run each command
line and read a line from the terminal.
config FEATURE_XARGS_SUPPORT_QUOTES
bool "Enable single and double quotes and backslash"
default n
depends on XARGS
help
Support quoting in the input.
config FEATURE_XARGS_SUPPORT_TERMOPT
bool "Enable -x: exit if -s or -n is exceeded"
default n
depends on XARGS
help
Support -x: exit if the command size (see the -s or -n option)
is exceeded.
config FEATURE_XARGS_SUPPORT_ZERO_TERM
bool "Enable -0: NUL-terminated input"
default n
depends on XARGS
help
Support -0: input items are terminated by a NUL character
instead of whitespace, and the quotes and backslash
are not special.
endmenu

10
findutils/Config.src Normal file
View File

@ -0,0 +1,10 @@
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#
menu "Finding Utilities"
INSERT
endmenu

View File

@ -5,6 +5,5 @@
# Licensed under the GPL v2, see the file LICENSE in this tarball. # Licensed under the GPL v2, see the file LICENSE in this tarball.
lib-y:= lib-y:=
lib-$(CONFIG_FIND) += find.o
lib-$(CONFIG_GREP) += grep.o INSERT
lib-$(CONFIG_XARGS) += xargs.o

View File

@ -53,6 +53,181 @@
* diff -u /tmp/std_find /tmp/bb_find && echo Identical * diff -u /tmp/std_find /tmp/bb_find && echo Identical
*/ */
//kbuild:lib-$(CONFIG_FIND) += find.o
//config:
//config:config FIND
//config: bool "find"
//config: default n
//config: help
//config: find is used to search your system to find specified files.
//config:
//config:config FEATURE_FIND_PRINT0
//config: bool "Enable -print0: NUL-terminated output"
//config: default y
//config: depends on FIND
//config: help
//config: Causes output names to be separated by a NUL character
//config: rather than a newline. This allows names that contain
//config: newlines and other whitespace to be more easily
//config: interpreted by other programs.
//config:
//config:config FEATURE_FIND_MTIME
//config: bool "Enable -mtime: modified time matching"
//config: default y
//config: depends on FIND
//config: help
//config: Allow searching based on the modification time of
//config: files, in days.
//config:
//config:config FEATURE_FIND_MMIN
//config: bool "Enable -mmin: modified time matching by minutes"
//config: default y
//config: depends on FIND
//config: help
//config: Allow searching based on the modification time of
//config: files, in minutes.
//config:
//config:config FEATURE_FIND_PERM
//config: bool "Enable -perm: permissions matching"
//config: default y
//config: depends on FIND
//config: help
//config: Enable searching based on file permissions.
//config:
//config:config FEATURE_FIND_TYPE
//config: bool "Enable -type: file type matching (file/dir/link/...)"
//config: default y
//config: depends on FIND
//config: help
//config: Enable searching based on file type (file,
//config: directory, socket, device, etc.).
//config:
//config:config FEATURE_FIND_XDEV
//config: bool "Enable -xdev: 'stay in filesystem'"
//config: default y
//config: depends on FIND
//config: help
//config: This option allows find to restrict searches to a single filesystem.
//config:
//config:config FEATURE_FIND_MAXDEPTH
//config: bool "Enable -maxdepth N"
//config: default y
//config: depends on FIND
//config: help
//config: This option enables -maxdepth N option.
//config:
//config:config FEATURE_FIND_NEWER
//config: bool "Enable -newer: compare file modification times"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -newer' option for finding any files which have
//config: a modified time that is more recent than the specified FILE.
//config:
//config:config FEATURE_FIND_INUM
//config: bool "Enable -inum: inode number matching"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -inum' option for searching by inode number.
//config:
//config:config FEATURE_FIND_EXEC
//config: bool "Enable -exec: execute commands"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -exec' option for executing commands based upon
//config: the files matched.
//config:
//config:config FEATURE_FIND_USER
//config: bool "Enable -user: username/uid matching"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -user' option for searching by username or uid.
//config:
//config:config FEATURE_FIND_GROUP
//config: bool "Enable -group: group/gid matching"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -group' option for searching by group name or gid.
//config:
//config:config FEATURE_FIND_NOT
//config: bool "Enable the 'not' (!) operator"
//config: default y
//config: depends on FIND
//config: help
//config: Support the '!' operator to invert the test results.
//config: If 'Enable full-blown desktop' is enabled, then will also support
//config: the non-POSIX notation '-not'.
//config:
//config:config FEATURE_FIND_DEPTH
//config: bool "Enable -depth"
//config: default y
//config: depends on FIND
//config: help
//config: Process each directory's contents before the directory itself.
//config:
//config:config FEATURE_FIND_PAREN
//config: bool "Enable parens in options"
//config: default y
//config: depends on FIND
//config: help
//config: Enable usage of parens '(' to specify logical order of arguments.
//config:
//config:config FEATURE_FIND_SIZE
//config: bool "Enable -size: file size matching"
//config: default y
//config: depends on FIND
//config: help
//config: Support the 'find -size' option for searching by file size.
//config:
//config:config FEATURE_FIND_PRUNE
//config: bool "Enable -prune: exclude subdirectories"
//config: default y
//config: depends on FIND
//config: help
//config: If the file is a directory, dont descend into it. Useful for
//config: exclusion .svn and CVS directories.
//config:
//config:config FEATURE_FIND_DELETE
//config: bool "Enable -delete: delete files/dirs"
//config: default n
//config: depends on FIND && FEATURE_FIND_DEPTH
//config: help
//config: Support the 'find -delete' option for deleting files and directories.
//config: WARNING: This option can do much harm if used wrong. Busybox will not
//config: try to protect the user from doing stupid things. Use with care.
//config:
//config:config FEATURE_FIND_PATH
//config: bool "Enable -path: match pathname with shell pattern"
//config: default y
//config: depends on FIND
//config: help
//config: The -path option matches whole pathname instead of just filename.
//config:
//config:config FEATURE_FIND_REGEX
//config: bool "Enable -regex: match pathname with regex"
//config: default y
//config: depends on FIND
//config: help
//config: The -regex option matches whole pathname against regular expression.
//config:
//config:config FEATURE_FIND_CONTEXT
//config: bool "Enable -context: security context matching"
//config: default n
//config: depends on FIND && SELINUX
//config: help
//config: Support the 'find -context' option for matching security context.
//config:
//config:config FEATURE_FIND_LINKS
//config: bool "Enable -links: link count matching"
//config: default n
//config: depends on FIND
//config: help
//config: Support the 'find -links' option for matching number of links.
#include <fnmatch.h> #include <fnmatch.h>
#include "libbb.h" #include "libbb.h"
#if ENABLE_FEATURE_FIND_REGEX #if ENABLE_FEATURE_FIND_REGEX

View File

@ -19,6 +19,41 @@
* (C) 2006 Jac Goudsmit added -o option * (C) 2006 Jac Goudsmit added -o option
*/ */
//kbuild:lib-$(CONFIG_GREP) += grep.o
//config:
//config:config GREP
//config: bool "grep"
//config: default n
//config: help
//config: grep is used to search files for a specified pattern.
//config:
//config:config FEATURE_GREP_EGREP_ALIAS
//config: bool "Enable extended regular expressions (egrep & grep -E)"
//config: default y
//config: depends on GREP
//config: help
//config: Enabled support for extended regular expressions. Extended
//config: regular expressions allow for alternation (foo|bar), grouping,
//config: and various repetition operators.
//config:
//config:config FEATURE_GREP_FGREP_ALIAS
//config: bool "Alias fgrep to grep -F"
//config: default y
//config: depends on GREP
//config: help
//config: fgrep sees the search pattern as a normal string rather than
//config: regular expressions.
//config: grep -F always works, this just creates the fgrep alias.
//config:
//config:config FEATURE_GREP_CONTEXT
//config: bool "Enable before and after context flags (-A, -B and -C)"
//config: default y
//config: depends on GREP
//config: help
//config: Print the specified number of leading (-B) and/or trailing (-A)
//config: context surrounding our matching lines.
//config: Print the specified number of context lines (-C).
#include "libbb.h" #include "libbb.h"
#include "xregex.h" #include "xregex.h"

View File

@ -17,6 +17,47 @@
* *
*/ */
//kbuild:lib-$(CONFIG_XARGS) += xargs.o
//config:
//config:config XARGS
//config: bool "xargs"
//config: default n
//config: help
//config: xargs is used to execute a specified command for
//config: every item from standard input.
//config:
//config:config FEATURE_XARGS_SUPPORT_CONFIRMATION
//config: bool "Enable -p: prompt and confirmation"
//config: default n
//config: depends on XARGS
//config: help
//config: Support -p: prompt the user whether to run each command
//config: line and read a line from the terminal.
//config:
//config:config FEATURE_XARGS_SUPPORT_QUOTES
//config: bool "Enable single and double quotes and backslash"
//config: default n
//config: depends on XARGS
//config: help
//config: Support quoting in the input.
//config:
//config:config FEATURE_XARGS_SUPPORT_TERMOPT
//config: bool "Enable -x: exit if -s or -n is exceeded"
//config: default n
//config: depends on XARGS
//config: help
//config: Support -x: exit if the command size (see the -s or -n option)
//config: is exceeded.
//config:
//config:config FEATURE_XARGS_SUPPORT_ZERO_TERM
//config: bool "Enable -0: NUL-terminated input"
//config: default n
//config: depends on XARGS
//config: help
//config: Support -0: input items are terminated by a NUL character
//config: instead of whitespace, and the quotes and backslash
//config: are not special.
#include "libbb.h" #include "libbb.h"
/* This is a NOEXEC applet. Be very careful! */ /* This is a NOEXEC applet. Be very careful! */

View File

@ -0,0 +1,55 @@
#!/bin/sh
test $# -ge 2 || exit 1
# cd to objtree
cd "$2" || exit 1
srctree="$1"
find -type d \
| while read; do
d="$REPLY"
src="$srctree/$d/Kbuild.src"
dst="$d/Kbuild"
if test -f "$src"; then
echo " CHK $dst"
s=`grep -h '^//kbuild:' "$srctree/$d"/*.c | sed 's^//kbuild:^^'`
while read; do
test x"$REPLY" = x"INSERT" && REPLY="$s"
printf "%s\n" "$REPLY"
done <"$src" >"$dst.$$.tmp"
if test -f "$dst" && cmp -s "$dst.$$.tmp" "$dst"; then
rm "$dst.$$.tmp"
else
echo " GEN $dst"
mv "$dst.$$.tmp" "$dst"
fi
fi
src="$srctree/$d/Config.src"
dst="$d/Config.in"
if test -f "$src"; then
echo " CHK $dst"
s=`grep -h '^//config:' "$srctree/$d"/*.c | sed 's^//config:^^'`
while read; do
test x"$REPLY" = x"INSERT" && REPLY="$s"
printf "%s\n" "$REPLY"
done <"$src" >"$dst.$$.tmp"
if test -f "$dst" && cmp -s "$dst.$$.tmp" "$dst"; then
rm "$dst.$$.tmp"
else
echo " GEN $dst"
mv "$dst.$$.tmp" "$dst"
fi
fi
done
# Last read failed. This is normal. Don't exit with its error code:
exit 0