diff options
author | Franklin Wei <franklin@rockbox.org> | 2025-01-01 19:12:49 -0500 |
---|---|---|
committer | Franklin Wei <franklin@rockbox.org> | 2025-01-01 19:12:49 -0500 |
commit | 334c725a45140d4f2d3788b32d5c91c2e9b86e35 (patch) | |
tree | c58a837664c2798c39b15555bcf11c6b73b56c01 | |
parent | 488306e1ebd9e39ffbc299364f2d3a32fe9857df (diff) | |
download | rockbox-334c725a45.tar.gz rockbox-334c725a45.zip |
puzzles: clean up resync.sh script.
This script has grown into a bit of a maintenance nightmare over the years.
I've cleaned up and better documented some of the nastier bits.
Change-Id: I2bb95a89b1edc9a294d9e1112f5be1b877567356
-rwxr-xr-x | apps/plugins/puzzles/resync.sh | 116 |
1 files changed, 87 insertions, 29 deletions
diff --git a/apps/plugins/puzzles/resync.sh b/apps/plugins/puzzles/resync.sh index 33496745d5..ea5e7bf64a 100755 --- a/apps/plugins/puzzles/resync.sh +++ b/apps/plugins/puzzles/resync.sh @@ -5,8 +5,8 @@ # and copies just the source files we need from the puzzles source # tree. Handles help generation as well. Stages changes in git. # -# Expects a modified Halibut (https://www.fwei.tk/git/halibut) to be -# installed in $PATH. Also requires host CC and lz4 library to be +# Expects a modified Halibut (https://github.com/built1n/halibut) to +# be installed in $PATH. Also requires host CC and lz4 library to be # available @@ -18,6 +18,9 @@ then exit fi +echo "Resyncing to upstream sources $1" +echo "This script assumes you have gcc, lz4, and a custom halibut (https://github.com/built1n/halibut) installed!" + echo "=== POTENTIALLY DANGEROUS OPERATION ===" echo "Are you sure you want to remove all files in src/ and help/?" echo -n "If so, type \"yes\" in all caps: " @@ -27,57 +30,112 @@ then pushd "$(dirname "$0")" > /dev/null ROOT="$PWD" - echo "[1/5] Removing current src/ directory" + echo "[1/6] Removing current src/ directory" rm -rf src - echo "[2/5] Copying new sources" + + echo "[2/6] Copying new sources" mkdir -p src/unfinished cp -r "$1"/{*.h,puzzles.but,LICENCE,README,CMakeLists.txt,unfinished} src - # Parse out definitions of core, core_obj, and common from - # CMakeLists. Extract the .c filenames, except malloc.c, and store - # in SOURCES.core. - cat src/CMakeLists.txt | awk '/add_library\(/{p=1} p{printf $0" "} /\)/{if(p) print; p=0}' | grep -E "core|common" | grep -Po "[a-z0-9\-]*?\.c" | sort -n | grep -vE 'malloc\.c|ps\.c' | awk '{print "src/"$0}' | uniq > SOURCES.core + echo "[3/6] Generating SOURCES, SOURCES.games" + + cat <<EOF | tee SOURCES SOURCES.games >/dev/null +/* !!! DO NOT MODIFY THIS FILE !!! */ + +/* + * + * This file is automatically generated by resync.sh. Any manual + * changes here will be overwritten by future resyncs. + * + * If you wish to change anything in this file, instead edit resync.sh + * to accomplish what you want. You have been warned. + */ + +/* !!! DO NOT MODIFY THIS FILE !!! */ + +EOF + + # Parse out definitions of core, core_obj, and common from the + # upstream CMakeLists.txt. Extract the .c filenames, except + # malloc.c and ps.c, and store in SOURCES.core. + EXCLUDE_CORE_REGEX="malloc|ps" + + cat src/CMakeLists.txt | + awk '/add_library\(/{p=1} p{printf $0" "} /\)/{if(p) print; p=0}' | # parse out add_library(...) + grep -E "core|common" | + grep -Po "[a-z0-9\-]*?\.c" | + sort -n | + grep -vE "$EXCLUDE_CORE_REGEX" | + awk '{print "src/"$0}' | + uniq > SOURCES.core + + # printing.c is pulled in via platforms/*.cmake. We don't have + # that, so must add it ourselves. echo "src/printing.c" >> SOURCES.core - # Parse out puzzle definitions to build SOURCES.games, but - # preserve the ability to disable puzzles based on memory size. - cat src/CMakeLists.txt | awk '/puzzle\(/{p=1} p{print} /\)/{p=0}' | grep -Eo "\(.*$" | tr -dc "a-z\n" | grep -v nullgame | awk '$0!~/loopy|pearl|solo/' | awk '{print "src/"$0".c"}' > SOURCES.games + # Parse out puzzle definitions to build SOURCES.games, but exclude + # nullgame, and also #ifdef also memory-intensive games on + # low-memory targets. + EXCLUDE_GAMES_ALWAYS="nullgame|group|separate" + + cat src/CMakeLists.txt | + awk '/puzzle\(/{p=1} p{print} /\)/{p=0}' | # parse out puzzle(...) + grep -Eo "\(.*$" | # parse out only the first argument - this is brittle. + tr -dc "a-z\n" | + grep -vE "$EXCLUDE_GAMES_ALWAYS" | # exclude nullgame + awk '{print "src/"$0".c"}' > SOURCES.games - SRC="$(cat SOURCES.games SOURCES.core | sed 's/src\///' | tr '\n' ' ' | head -c-1) loopy.c pearl.c solo.c" + SRC="$(cat SOURCES.games SOURCES.core | sed 's/src\///' | tr '\n' ' ' | head -c-1)" echo "Detected sources:" $SRC pushd "$1" > /dev/null cp -r $SRC "$ROOT"/src popd > /dev/null -echo "#ifndef WIN32" >> SOURCES.games - cat src/unfinished/CMakeLists.txt | awk '/puzzle\(/{p=1} p{print} /\)/{p=0}' | grep -Eo "\(.*$" | tr -dc "a-z\n" | awk '{print "src/unfinished/"$0".c"}' | grep -v "group" | grep -v "separate" >> SOURCES.games -echo "#endif" >> SOURCES.games + EXCLUDE_GAMES_LOW_MEMORY="loopy|pearl|solo" + EXCLUDE_GAMES_WIN32="unfinished" - cat <<EOF >> SOURCES.games + cat src/unfinished/CMakeLists.txt | + awk '/puzzle\(/{p=1} p{print} /\)/{p=0}' | + grep -Eo "\(.*$" | + tr -dc "a-z\n" | + awk '{print "src/unfinished/"$0".c"}' | + grep -Ev "$EXCLUDE_GAMES_ALWAYS" >> SOURCES.games -/* no c200v2 */ -#if PLUGIN_BUFFER_SIZE > 0x14000 -src/loopy.c -src/pearl.c -src/solo.c -#endif + # Edit SOURCES.games in-place to conditionally compile games due + # to either low-memory (EXCLUDE_GAMES_LOW_MEMORY), or win32 + # incompatibility (EXCLUDE_GAMES_WIN32). + awk -i inplace '{ + if ($0 ~ /'"$EXCLUDE_GAMES_WIN32"'/) { + print "#ifndef WIN32"; print $0; print "#endif"; + } + else if ($0 ~ /'"$EXCLUDE_GAMES_LOW_MEMORY"'/) { + print "#if PLUGIN_BUFFER_SIZE > 0x14000"; print $0; print "#endif"; + } + else { + print + } +}' SOURCES.games + + cat <<EOF >> SOURCES +/* rockbox frontend sources, from SOURCES.rockbox */ EOF + cat SOURCES.rockbox | cpp | grep -vE "^#" | sed '/^$/d' >> SOURCES + + cat <<EOF >> SOURCES - cat <<EOF > SOURCES -/* Auto-generated by resync.sh */ +/* puzzles core sources, from src/CMakeLists.txt */ EOF - cat SOURCES.rockbox | cpp | grep -vE "^#" >> SOURCES - echo -e "\n/* puzzles core sources */" >> SOURCES + cat SOURCES.core >> SOURCES rm SOURCES.core - echo "[3/5] Regenerating help" + echo "[4/6] Generating help" rm -rf help ./genhelp.sh - echo "[4/5] Staging for commit" + echo "[5/6] Staging for commit" git add src help - echo "[5/5] Successfully resynced with upstream" + echo "[6/6] Successfully resynced with upstream" popd > /dev/null else |