summaryrefslogtreecommitdiff
path: root/scripts/split-cfg.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/split-cfg.sh')
-rw-r--r--scripts/split-cfg.sh89
1 files changed, 89 insertions, 0 deletions
diff --git a/scripts/split-cfg.sh b/scripts/split-cfg.sh
new file mode 100644
index 000000000..9b043424e
--- /dev/null
+++ b/scripts/split-cfg.sh
@@ -0,0 +1,89 @@
+# $Id: split-cfg.sh 280 2008-12-25 20:54:25Z wbx $
+#-
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+#-
+# Note: this is slow, but it's not the "progress stuff" which cau-
+# ses the slow-down.
+
+TOPDIR=$1
+
+[[ -n $BASH_VERSION ]] && shopt -s extglob
+
+grep -v '^BUSYBOX\|^# BUSYBOX' $TOPDIR/.config > $TOPDIR/.config.split
+
+mkdir -p $TOPDIR/.cfg
+cd $TOPDIR/.cfg
+
+oldfiles=$(echo *)
+newfiles=:
+
+echo -n 'autosplitting main config...'
+while read line; do
+ oline=$line
+ [[ -n $line ]] && if [[ $line = @(# [A-Z])* ]]; then
+ line=${line#? }
+ if [[ $line = *@( is not set) ]]; then
+ line=${line% is not set}
+ else
+ # some kind of comment
+ line=
+ fi
+ elif [[ $line = @([A-Z])*@(=)* ]]; then
+ line=${line%%=*}
+ elif [[ $line = @(#)* ]]; then
+ # valid comment
+ line=
+ else
+ # invalid non-comment
+ echo "Warning: line '$oline' invalid!" >&2
+ line=
+ fi
+ # if the line is a valid yes/no/whatever, write it
+ # unless the file already exists and has same content
+ if [[ -n $line ]]; then
+ if [[ $line != ADK_HAVE_DOT_CONFIG && -s $line ]]; then
+ fline=$(<$line)
+ else
+ fline=
+ fi
+ [[ $oline = $fline ]] || echo "$oline" >$line
+ if [[ $newfiles = *:$line:* ]]; then
+ echo "Error: duplicate Config.in option '$line'!" >&2
+ exit 1
+ fi
+ newfiles=$newfiles$line:
+ fi
+done <$TOPDIR/.config.split
+
+# now handle the case of removals
+echo -n ' removals...'
+for oldfile in $oldfiles; do
+ [[ $newfiles = *:$oldfile:* ]] || rm -f $oldfile
+done
+printf '\r%60s\r' ''
+
+# now scan for dependencies of packages; the information
+# should probably be in build_mipsel because it's generated
+# at build time, but OTOH, soon enough, parts of Makefile
+# and the entire Config.in will be auto-generated anyway,
+# so we're better off placing it here
+#XXX this is too slow @868 configure options
+cd $TOPDIR/.cfg
+rm -f $TOPDIR/package/*/info.mk
+for option in *; do
+ echo -n "$option ..."
+ x=$(( ${#option} + 4 ))
+ ao=:
+ fgrep -l $option $TOPDIR/package/*/{Makefile,Config.*} 2>&- | \
+ while read line; do
+ echo ${line%/*}/info.mk
+ done | while read fname; do
+ [[ $ao = *:$fname:* ]] && continue
+ ao=$ao$fname:
+ echo "\${_IPKGS_COOKIE}: \${TOPDIR}/.cfg/$option" >>$fname
+ done
+ printf '\r%'$x's\r' ''
+done
+
+exit 0