📄 configure
字号:
#! /bin/sh## This script is used to configure the linux kernel.## It was inspired by the challenge in the original Configure script# to ``do something better'', combined with the actual need to ``do# something better'' because the old configure script wasn't flexible# enough.## Please send comments / questions / bug fixes to raymondc@microsoft.com.## Each line in the config file is a command.## # internal comment## Lines beginning with a `#' are ignored.## : message## `:' causes the line to be echoed to the screen.## * external comment## `*' causes the line to be placed in the output# configuration file as a comment as well as being# echoed to the screen.## if condition# ... commands ...# else# ... commands ...# fi## This does the obvious thing. The `else' clause is# optional. Conditionals can be nested.## The `condition' can be any valid bash expression.# They typically involve tests against environment# variables set by configuration options. For example,## if [ "$CONFIG_SCSI" = "y" ]# ...More stuff...# fi## Note! That there is no `then' keyword.## bool 'prompt' CONFIG_VARIABLE default## This prompts the user for a boolean value.# The prompt may not contain an apostrophe.# `default' should be either `y' or `n'.# The user's response is recorded in four places.## In .config, if `y'# CONFIG_VARIABLE = CONFIG_VARIABLE# In .config, if `n'# # CONFIG_VARIABLE is not set# # In autoconf.h, if `y'# #define CONFIG_VARIABLE 1# In autoconf.h, if `n'# #undef CONFIG_VARIABLE## In config.in, if `y'# bool 'prompt' CONFIG_VARIABLE y# In config.in, if `n'# bool 'prompt' CONFIG_VARIABLE n## In the environment of the Configure script, if `y'# CONFIG_VARIABLE = y# In the environment of the Configure script, if `n'# CONFIG_VARIABLE = n## The value is placed into the environment of the Configure# script so that later parts of config.in can use the `if'# command to inspect the results of previous queries.## int 'prompt' CONFIG_VARIABLE default## This prompts the user for an integer value.# The prompt may not contain an apostrophe.# `default' should be an integer.## The response is recorded as follows.## In .config# CONFIG_VARIABLE = response# In autoconf.h# #define CONFIG_VARIABLE (response)# In config.in# int 'prompt' CONFIG_VARIABLE response# In the environment of the Configure script# CONFIG_VARIABLE = response## 050793 - use IFS='@' to get around a bug in a pre-version of bash-1.13# with an empty IFS.## Make sure we're really running bash.## I would really have preferred to write this script in a language with# better string handling, but alas, bash is the only scripting language# that I can be reasonable sure everybody has on their linux machine.#[ -z "$BASH" ] && { echo "Configure requires bash" 1>&2; exit 1; }# Disable filename globbing once and for all.# Enable function cacheing.set -f -h## readln reads a line into $ans.## readln prompt default#function readln () { echo -n "$1" IFS='@' read ans </dev/tty || exit 1 [ -z "$ans" ] && ans=$2}# bool processes a boolean argument## bool tail#function bool () { # Slimier hack to get bash to rescan a line. eval "set -- $1" ans="" while [ "$ans" != "y" -a "$ans" != "n" ]; do readln "$1 ($2) [$3] " "$3" done if [ "$ans" = "y" ]; then echo "$2 = $2" >>$CONFIG echo "#define $2 1" >>$CONFIG_H else echo "# $2 is not set" >>$CONFIG echo "#undef $2" >>$CONFIG_H fi raw_input_line="bool '$1' $2 $ans" eval "$2=$ans"}# int processes an integer argument## int tail#function int () { # Slimier hack to get bash to rescan a line. eval "set -- $1" ans="x" while [ $[$ans+0] != "$ans" ]; do readln "$1 ($2) [$3] " "$3" done echo "$2 = $ans" >>$CONFIG echo "#define $2 ($ans)" >>$CONFIG_H raw_input_line="int '$1' $2 $ans" eval "$2=$ans"}CONFIG=.tmpconfigCONFIG_H=include/linux/autoconf.htrap "rm -f $CONFIG $CONFIG_H config.new ; exit 1" 1 2## Make sure we start out with a clean slate.#> config.newecho "#" > $CONFIGecho "# Automatically generated make config: don't edit" >> $CONFIGecho "#" >> $CONFIGecho "/*" > $CONFIG_Hecho " * Automatically generated C config: don't edit" >> $CONFIG_Hecho " */" >> $CONFIG_Hstack=''branch='t'while IFS='@' read raw_input_linedo # Slimy hack to get bash to rescan a line. read cmd rest <<-END_OF_COMMAND $raw_input_line END_OF_COMMAND if [ "$cmd" = "*" ]; then if [ "$branch" = "t" ]; then echo "$raw_input_line" echo "# $rest" >>$CONFIG if [ "$prevcmd" != "*" ]; then echo >>$CONFIG_H echo "/* $rest" >>$CONFIG_H else echo " * $rest" >>$CONFIG_H fi prevcmd="*" fi else [ "$prevcmd" = "*" ] && echo " */" >>$CONFIG_H prevcmd="" case "$cmd" in :) [ "$branch" = "t" ] && echo "$raw_input_line" ;; int) [ "$branch" = "t" ] && int "$rest" ;; bool) [ "$branch" = "t" ] && bool "$rest" ;; exec) [ "$branch" = "t" ] && ( sh -c "$rest" ) ;; if) stack="$branch $stack" if [ "$branch" = "t" ] && eval "$rest"; then branch=t else branch=f fi ;; else) if [ "$branch" = "t" ]; then branch=f else read branch rest <<-END_OF_STACK $stack END_OF_STACK fi ;; fi) [ -z "$stack" ] && echo "Error! Extra fi." 1>&2 read branch stack <<-END_OF_STACK $stack END_OF_STACK ;; esac fi echo "$raw_input_line" >>config.newdone[ "$prevcmd" = "*" ] && echo " */" >>$CONFIG_H[ -z "$stack" ] || echo "Error! Untermiated if." 1>&2mv config.in config.oldmv config.new config.inechoecho "The linux kernel is now hopefully configured for your setup."echo "Check the top-level Makefile for additional configuration,"echo "and do a 'make dep ; make clean' if you want to be sure all"echo "the files are correctly re-made"echoexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -