1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/scripts/gen_in_frags.sh Thu Dec 27 12:45:22 2012 +0100
1.3 @@ -0,0 +1,158 @@
1.4 +#!/bin/sh
1.5 +set -e
1.6 +
1.7 +# This scripts generates either a choice or a menuconfig
1.8 +# with the specified entries.
1.9 +#
1.10 +# Usage:
1.11 +# generate a choice:
1.12 +# gen_in_frags.sh choice <out-file> <label> <config-prefix> <base-dir> <conditionals> entry [entry...]
1.13 +#
1.14 +# generate a menuconfig:
1.15 +# gen_in_frags.sh menu <out-file> <label> <config-prefix> <base-dir> entry [entry...]
1.16 +#
1.17 +# where:
1.18 +# out-file
1.19 +# put the generated choice/menuconfig into that file
1.20 +# for choices, it acts as the base bname of the file, the secondary
1.21 +# parts (the .in.2) are put in out-file.2
1.22 +#
1.23 +# label
1.24 +# name for the entries family
1.25 +# eg. Architecture, Kernel...
1.26 +#
1.27 +# config-prefix
1.28 +# prefix for the choice entries
1.29 +# eg. ARCH, KERNEL...
1.30 +#
1.31 +# base-dir
1.32 +# base directory containing config files
1.33 +# eg. config/arch, config/kernel...
1.34 +#
1.35 +# conditionals (valid only for choice)
1.36 +# generate backend conditionals if Y/y, don't if anything else
1.37 +# if 'Y' (or 'y'), a dependency on the backen mode will be added
1.38 +# to each entry
1.39 +#
1.40 +# entry [entry...]
1.41 +# a list of entry/ies toadd to the choice/menuconfig
1.42 +# eg.:
1.43 +# arm mips sh x86...
1.44 +# linux cygwin mingw32 solaris...
1.45 +# ...
1.46 +#
1.47 +#------------------------------------------------------------------------------
1.48 +
1.49 +# Generate a choice
1.50 +# See above for usage
1.51 +gen_choice() {
1.52 + local out_file="${1}"
1.53 + local label="${2}"
1.54 + local cfg_prefix="${3}"
1.55 + local base_dir="${4}"
1.56 + local cond="${5}"
1.57 + shift 5
1.58 + local file entry _entry
1.59 +
1.60 + # Generate the part-1
1.61 + exec >"${out_file}"
1.62 + printf '# %s menu\n' "${label}"
1.63 + printf '# Generated file, do not edit!!!\n'
1.64 + printf '\n'
1.65 + printf 'choice GEN_CHOICE_%s\n' "${cfg_prefix}"
1.66 + printf ' bool\n'
1.67 + printf ' prompt "%s"\n' "${label}"
1.68 + printf '\n'
1.69 + for entry in "${@}"; do
1.70 + file="${base_dir}/${entry}.in"
1.71 + _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
1.72 + printf 'config %s_%s\n' "${cfg_prefix}" "${_entry}"
1.73 + printf ' bool\n'
1.74 + printf ' prompt "%s"\n' "${entry}"
1.75 + if [ "${cond}" = "Y" -o "${cond}" = "y" ]; then
1.76 + printf ' depends on %s_%s_AVAILABLE\n' "${cfg_prefix}" "${_entry}"
1.77 + fi
1.78 + "${sed}" -r -e '/^## depends on /!d; s/^## / /;' ${file} 2>/dev/null
1.79 + "${sed}" -r -e '/^## select /!d; s/^## / /;' ${file} 2>/dev/null
1.80 + if "${grep}" -E '^## help' ${file} >/dev/null 2>&1; then
1.81 + printf ' help\n'
1.82 + "${sed}" -r -e '/^## help ?/!d; s/^## help ?/ /;' ${file} 2>/dev/null
1.83 + fi
1.84 + printf '\n'
1.85 + done
1.86 + printf 'endchoice\n'
1.87 +
1.88 + for entry in "${@}"; do
1.89 + file="${base_dir}/${entry}.in"
1.90 + _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
1.91 + printf '\n'
1.92 + if [ "${cond}" = "Y" -o "${cond}" = "y" ]; then
1.93 + printf 'config %s_%s_AVAILABLE\n' "${cfg_prefix}" "${_entry}"
1.94 + printf ' bool\n'
1.95 + printf ' default y if'
1.96 + printf ' BACKEND_%s = "%s"' "${cfg_prefix}" "${entry}"
1.97 + printf ' || BACKEND_%s = ""' "${cfg_prefix}"
1.98 + printf ' || ! BACKEND\n'
1.99 + fi
1.100 + printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
1.101 + printf 'config %s\n' "${cfg_prefix}"
1.102 + printf ' default "%s" if %s_%s\n' "${entry}" "${cfg_prefix}" "${_entry}"
1.103 + printf 'source "%s"\n' "${file}"
1.104 + printf 'endif\n'
1.105 + done
1.106 +
1.107 + # Generate the part-2
1.108 + exec >"${out_file}.2"
1.109 + printf '# %s second part options\n' "${label}"
1.110 + printf '# Generated file, do not edit!!!\n'
1.111 + for entry in "${@}"; do
1.112 + file="${base_dir}/${entry}.in"
1.113 + _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
1.114 + if [ -f "${file}.2" ]; then
1.115 + printf '\n'
1.116 + printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
1.117 + printf 'comment "%s other options"\n' "${entry}"
1.118 + printf 'source "%s.2"\n' "${file}"
1.119 + printf 'endif\n'
1.120 + fi
1.121 + done
1.122 +}
1.123 +
1.124 +# Generate a menuconfig
1.125 +# See above for usage
1.126 +gen_menu() {
1.127 + local out_file="${1}"
1.128 + local label="${2}"
1.129 + local cfg_prefix="${3}"
1.130 + local base_dir="${4}"
1.131 + shift 4
1.132 + local file entry _entry
1.133 +
1.134 + # GEnerate the menuconfig
1.135 + exec >"${out_file}"
1.136 + printf '# %s menu\n' "${label}"
1.137 + printf '# Generated file, do not edit!!!\n'
1.138 + printf '\n'
1.139 + for entry in "${@}"; do
1.140 + file="${base_dir}/${entry}.in"
1.141 + _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
1.142 + printf 'menuconfig %s_%s\n' "${cfg_prefix}" "${_entry}"
1.143 + printf ' bool\n'
1.144 + printf ' prompt "%s"\n' "${entry}"
1.145 + "${sed}" -r -e '/^## depends on /!d; s/^## / /;' ${file} 2>/dev/null
1.146 + "${sed}" -r -e '/^## select /!d; s/^## / /;' ${file} 2>/dev/null
1.147 + if "${grep}" -E '^## help' ${file} >/dev/null 2>&1; then
1.148 + printf ' help\n'
1.149 + "${sed}" -r -e '/^## help ?/!d; s/^## help ?/ /;' ${file} 2>/dev/null
1.150 + fi
1.151 + printf '\n'
1.152 + printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
1.153 + printf 'source "%s"\n' "${file}"
1.154 + printf 'endif\n'
1.155 + printf '\n'
1.156 + done
1.157 +}
1.158 +
1.159 +type="${1}"
1.160 +shift
1.161 +"gen_${type}" "${@}"