summaryrefslogtreecommitdiff
path: root/resources/scripts/modify/defconfig/options
diff options
context:
space:
mode:
Diffstat (limited to 'resources/scripts/modify/defconfig/options')
-rwxr-xr-xresources/scripts/modify/defconfig/options107
1 files changed, 107 insertions, 0 deletions
diff --git a/resources/scripts/modify/defconfig/options b/resources/scripts/modify/defconfig/options
new file mode 100755
index 00000000..2f5c2f61
--- /dev/null
+++ b/resources/scripts/modify/defconfig/options
@@ -0,0 +1,107 @@
+#!/usr/bin/env sh
+
+#
+# helper script: update project configs (based on defconfig)
+#
+# Copyright (C) 2021, 2023 Leah Rowe <info@minifree.org>
+# Copyright (C) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+
+[ "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 $@