summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFranklin Wei <franklin@rockbox.org>2025-01-01 19:12:49 -0500
committerFranklin Wei <franklin@rockbox.org>2025-01-01 19:12:49 -0500
commit334c725a45140d4f2d3788b32d5c91c2e9b86e35 (patch)
treec58a837664c2798c39b15555bcf11c6b73b56c01
parent488306e1ebd9e39ffbc299364f2d3a32fe9857df (diff)
downloadrockbox-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-xapps/plugins/puzzles/resync.sh116
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