#!/usr/bin/env sh # # helper script: update project configs (based on defconfig) # # Copyright (C) 2021, 2023 Leah Rowe # Copyright (C) 2022 Ferass El Hafidi # # 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 3 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, see . # [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e cfgsdir="" mode="" project="" main() { while getopts m:u: option do case "${1}" in -u) mode="oldconfig" shift ;; -m) mode="menuconfig" shift ;; *) err "Invalid option" ;; esac project="${OPTARG}" shift done [ -z "${mode}" ] && err "mode not given (-m menuconfig or -u oldconfig)" cfgsdir="resources/${project}" [ -f "${cfgsdir}/build.list" ] || err "Invalid project name given" printf "Updating %s configs using: make %s\n\n" "${project}" "${mode}" if [ $# -gt 0 ]; then for target in "${@}"; do configure_target "${target}" done else for target in ${cfgsdir}/*; do [ ! -d "${target}" ] && continue configure_target "${target##*/}" done fi } configure_target() { target=${1} targetdir="${cfgsdir}/${target}" if [ ! -f "${targetdir}/target.cfg" ]; then printf "\nmodify/defconfig %s: no target.cfg for %s. SKIP!\n" \ "${project}" "${target}" return 0 fi tree="undefined" . "${targetdir}/target.cfg" [ "${tree}" = "undefined" ] && return 0 codedir="${project}/${tree}" [ -d "${codedir}" ] || ./fetch_trees ${project} ${tree} || \ err "cant download $project" for cfg in "${targetdir}/config/"*; do [ ! -f "${cfg}" ] && continue make distclean -BC "${codedir}" [ -f "${cfg}_" ] && err "${cfg}_ exists from old run" cp "${cfg}" "${cfg}_" cp "${cfg}_" "${codedir}/.config" make ${mode} -BC "${codedir}" mv "${codedir}/.config" "${cfg}" make distclean -BC "${codedir}" rm -f "${cfg}_" done } err() { printf "ERROR: modify/defconfig: %s\n" "${1}" 1>&2 exit 1 } main $@