#!/bin/sh # # Kconfig preprocessor # # Copyright (C) 2014 Patrick "P. J." McDermott # # 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. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. set -u main() { local script= local arg= local var= local val= if [ ${#} -lt 1 ]; then usage >&2 exit 1 fi script='' for arg in "${@}"; do case "${arg}" in *=*) IFS='=' read var val <<-EOF ${arg} EOF val="$(printf '%s' "${val}" | sed 's|/|\\/|g')" script="${script}s/\$${var}/${val}/g;" shift 1 ;; *) break esac done if [ ${#} -ne 1 ]; then usage >&2 exit 1 fi cd "$(dirname "${1}")" parse "${1}" "${script}" } usage() { printf 'Usage: %s [= ...] \n' "${0}" } parse() { local file="${1}" local script="${2}" local line= while IFS='' read line; do if [ "x${line}" != "x${line#source}" ]; then line="$(printf '%s' "${line}" | \ sed 's/^source[ \t][ \t]*"*\([^"]*\).*$/\1/')" parse "${line}" "${script}" else printf '%s\n' "${line}" fi done <<-EOF $(sed "${script}" <"${file}") EOF } main "${@}"