From c69740d886c2922bacfa8ddd5dd694fd613952f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Fri, 12 Dec 2025 01:25:24 -0300 Subject: [PATCH] Added a copy_ecode_assets.sh script to simplify ecode build scripts across platforms. Modified find_most_recent_sdl2.sh script to search for an specific CPU architecture version of the SDL2 library. --- projects/freebsd/ecode/build.app.sh | 29 +----- projects/haiku/ecode/build.app.sh | 28 +----- projects/linux/ecode/build.app.sh | 31 +----- .../linux/scripts/find_most_recent_sdl2.sh | 97 +++++++++++++----- projects/mingw32/ecode/build.app.sh | 30 +----- projects/scripts/copy_ecode_assets.sh | 98 +++++++++++++++++++ 6 files changed, 177 insertions(+), 136 deletions(-) create mode 100644 projects/scripts/copy_ecode_assets.sh diff --git a/projects/freebsd/ecode/build.app.sh b/projects/freebsd/ecode/build.app.sh index ef7034492..2bc258992 100755 --- a/projects/freebsd/ecode/build.app.sh +++ b/projects/freebsd/ecode/build.app.sh @@ -57,8 +57,7 @@ fi gmake -j"${parallel_tasks}" config="${CONFIG_NAME}" ecode || exit cd "$DIRPATH" || exit -rm -rf ./ecode.app -mkdir -p ecode.app/assets +bash ../../scripts/copy_ecode_assets.sh ../../bin ecode.app || exit mkdir -p ecode.app/libs chmod +x AppRun cp AppRun ecode.app/ @@ -68,32 +67,6 @@ cp ../../../libs/bsd/x86_64/libeepp.so ecode.app/libs/ cp ../../../bin/ecode ecode.app/ecode.bin cp -L /usr/local/lib/libSDL2-2.0.so.0 ecode.app/libs/ strip ecode.app/libs/libSDL2-2.0.so.0 -mkdir -p ecode.app/assets/colorschemes -mkdir -p ecode.app/assets/fonts -mkdir -p ecode.app/assets/i18n -cp -r ../../../bin/assets/i18n ecode.app/assets/ -cp -r ../../../bin/assets/colorschemes ecode.app/assets/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Oblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-BoldOblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMonoNerdFontComplete.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/nonicons.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/codicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Italic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-BoldItalic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/remixicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoEmoji-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoColorEmoji.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DroidSansFallbackFull.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/plugins ecode.app/assets/ -mkdir -p ecode.app/assets/icon/ -cp -r ../../../bin/assets/icon/ecode.png ecode.app/assets/icon/ -mkdir ecode.app/assets/ui -cp ../../../bin/assets/ui/breeze.css ecode.app/assets/ui/ -cp ../../../bin/assets/ca-bundle.pem ecode.app/assets/ca-bundle.pem if [ -n "$VERSION" ]; then diff --git a/projects/haiku/ecode/build.app.sh b/projects/haiku/ecode/build.app.sh index f02f59d8d..13fa5445b 100755 --- a/projects/haiku/ecode/build.app.sh +++ b/projects/haiku/ecode/build.app.sh @@ -7,39 +7,13 @@ premake5 --with-text-shaper gmake cd make/haiku || exit make -j"$(nproc)" config=release_x86_64 ecode cd "$DIRPATH" || exit -rm -rf ./ecode.app -mkdir -p ecode.app/assets +bash ../../scripts/copy_ecode_assets.sh ../../bin ecode.app || exit mkdir -p ecode.app/lib cp ../../../bin/assets/icon/ecode.png ecode.app/ecode.png cp ../../../libs/haiku/x86_64/libeepp.so ecode.app/lib/ cp ../../../bin/ecode ecode.app/ cp -L /boot/system/lib/libSDL2-2.0.so.0 ecode.app/lib/ strip ecode.app/lib/libSDL2-2.0.so.0 -mkdir -p ecode.app/assets/colorschemes -mkdir -p ecode.app/assets/fonts -mkdir -p ecode.app/assets/i18n -cp -r ../../../bin/assets/i18n ecode.app/assets/ -cp -r ../../../bin/assets/colorschemes ecode.app/assets/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Oblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-BoldOblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMonoNerdFontComplete.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/nonicons.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/codicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Italic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-BoldItalic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/remixicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoEmoji-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoColorEmoji.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DroidSansFallbackFull.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/plugins ecode.app/assets/ -mkdir -p ecode.app/assets/icon/ -cp -r ../../../bin/assets/icon/ecode.png ecode.app/assets/icon/ -mkdir ecode.app/assets/ui -cp ../../../bin/assets/ui/breeze.css ecode.app/assets/ui/ VERSIONPATH=../../../src/tools/ecode/version.hpp ECODE_MAJOR_VERSION=$(grep "define ECODE_MAJOR_VERSION" $VERSIONPATH | awk '{print $3}') diff --git a/projects/linux/ecode/build.app.sh b/projects/linux/ecode/build.app.sh index 69b447f77..e2dfee5fa 100755 --- a/projects/linux/ecode/build.app.sh +++ b/projects/linux/ecode/build.app.sh @@ -57,8 +57,7 @@ fi cd make/linux || exit make -j"$(nproc)" config="$CONFIG_NAME" ecode || exit cd "$DIRPATH" || exit -rm -rf ./ecode.app -mkdir -p ecode.app/assets +bash ../../scripts/copy_ecode_assets.sh ../../bin ecode.app || exit mkdir -p ecode.app/libs chmod +x AppRun cp AppRun ecode.app/ @@ -66,34 +65,8 @@ cp ecode.desktop ecode.app/ cp ../../../bin/assets/icon/ecode.png ecode.app/ecode.png cp ../../../libs/linux/libeepp.so ecode.app/libs/ cp ../../../bin/ecode ecode.app/ecode.bin -cp -L "$(bash ../scripts/find_most_recent_sdl2.sh)" ecode.app/libs/ || exit +cp -L "$(bash ../scripts/find_most_recent_sdl2.sh --arch="$ARCH")" ecode.app/libs/ || exit ${STRIP:-strip} ecode.app/libs/libSDL2-2.0.so.0 -mkdir -p ecode.app/assets/colorschemes -mkdir -p ecode.app/assets/fonts -mkdir -p ecode.app/assets/i18n -cp -r ../../../bin/assets/i18n ecode.app/assets/ -cp -r ../../../bin/assets/colorschemes ecode.app/assets/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Oblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-BoldOblique.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMonoNerdFontComplete.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/nonicons.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/codicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Bold.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Italic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-BoldItalic.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/remixicon.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoEmoji-Regular.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoColorEmoji.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/fonts/DroidSansFallbackFull.ttf ecode.app/assets/fonts/ -cp -r ../../../bin/assets/plugins ecode.app/assets/ -mkdir -p ecode.app/assets/icon/ -cp -r ../../../bin/assets/icon/ecode.png ecode.app/assets/icon/ -mkdir ecode.app/assets/ui -cp ../../../bin/assets/ui/breeze.css ecode.app/assets/ui/ -cp ../../../bin/assets/ca-bundle.pem ecode.app/assets/ca-bundle.pem if [ -n "$VERSION" ]; then diff --git a/projects/linux/scripts/find_most_recent_sdl2.sh b/projects/linux/scripts/find_most_recent_sdl2.sh index a9beb421f..85407381e 100644 --- a/projects/linux/scripts/find_most_recent_sdl2.sh +++ b/projects/linux/scripts/find_most_recent_sdl2.sh @@ -1,21 +1,53 @@ #!/bin/bash VERBOSE= +DESIRED_ARCH= + for i in "$@"; do - case $i in - --verbose) - VERBOSE=true - shift - ;; - -*) - echo "Unknown option $i" - exit 1 - ;; - *) - ;; - esac + case $i in + --verbose) + VERBOSE=true + shift + ;; + --arch=*) + DESIRED_ARCH="${i#*=}" + shift + ;; + -*) + echo "Unknown option $i" + exit 1 + ;; + *) + ;; + esac done +# Determine current architecture if no --arch specified +if [[ -z "$DESIRED_ARCH" ]]; then + CURRENT_MACHINE=$(uname -m) + case "$CURRENT_MACHINE" in + x86_64|amd64) + DESIRED_ARCH="x86-64" + ;; + i386|i686) + DESIRED_ARCH="80386" + ;; + aarch64|arm64) + DESIRED_ARCH="aarch64" + ;; + arm*) + DESIRED_ARCH="ARM" + ;; + *) + echo "Unsupported current architecture: $CURRENT_MACHINE" + exit 1 + ;; + esac + if [[ -n "$VERBOSE" ]]; then + echo "No architecture specified; using current: $DESIRED_ARCH" + fi +fi + lib_paths=$(whereis libSDL2-2.0.so.0 | cut -d ':' -f 2) get_sdl_version() { @@ -34,6 +66,10 @@ version_to_int() { local version="$1" local major minor patch IFS='.' read -r major minor patch <<< "$version" + # Default missing parts to 0 + major=${major:-0} + minor=${minor:-0} + patch=${patch:-0} echo $((major * 10000 + minor * 100 + patch)) } @@ -43,27 +79,42 @@ latest_lib="" for lib in $lib_paths; do if [[ -f "$lib" ]]; then - version=$(get_sdl_version "$lib") - if [ -n "$VERBOSE" ]; then - echo "Found version $version in $lib" - fi - version_int=$(version_to_int "$version") - if (( version_int > latest_version_int )); then - latest_version_int=$version_int - latest_version="$version" - latest_lib="$lib" + # Check architecture using 'file' command + file_output=$(file -L "$lib" 2>/dev/null) + if echo "$file_output" | grep -q "ELF .* shared object, .* $DESIRED_ARCH"; then + version=$(get_sdl_version "$lib") + if [[ -n "$version" ]]; then + if [ -n "$VERBOSE" ]; then + echo "Found matching version $version in $lib" + fi + version_int=$(version_to_int "$version") + if (( version_int > latest_version_int )); then + latest_version_int=$version_int + latest_version="$version" + latest_lib="$lib" + fi + else + if [ -n "$VERBOSE" ]; then + echo "Could not determine version for $lib (matching arch)" + fi + fi + else + if [ -n "$VERBOSE" ]; then + echo "Skipping $lib (architecture mismatch)" + fi fi fi done if [[ -n "$latest_lib" ]]; then if [ -n "$VERBOSE" ]; then - echo "The newest version is $latest_version in $latest_lib" + echo "The newest matching version is $latest_version in $latest_lib" fi echo "$latest_lib" else if [ -n "$VERBOSE" ]; then - echo "No valid SDL2 library found." + echo "No valid SDL2 library found for architecture $DESIRED_ARCH." fi + # Fallback: original behavior, print the last path from whereis (or nothing if none) whereis libSDL2-2.0.so.0 | awk '{print $NF}' fi diff --git a/projects/mingw32/ecode/build.app.sh b/projects/mingw32/ecode/build.app.sh index 5b1897f26..92aec1d29 100755 --- a/projects/mingw32/ecode/build.app.sh +++ b/projects/mingw32/ecode/build.app.sh @@ -42,8 +42,7 @@ fi ../make.sh -e config="$BUILDTYPE"_"$ARCH" -j"$(nproc)" ecode || exit SDLVER=$(grep "remote_sdl2_version_number =" ../../../premake5.lua | awk '{print $3}' | tr -d '"') -rm -rf ./ecode -mkdir -p ecode/assets +bash ../../scripts/copy_ecode_assets.sh ../../bin ecode || exit cp ../../../bin/ecode.exe ecode/ cp ../../../bin/eepp.dll ecode/ @@ -53,33 +52,6 @@ else cp ../../../src/thirdparty/"SDL2-$SDLVER"/$ARCHI-w64-mingw32/bin/SDL2.dll ecode/ fi -mkdir -p ecode/assets/colorschemes -mkdir -p ecode/assets/fonts -mkdir -p ecode/assets/i18n -cp -r ../../../bin/assets/i18n ecode/assets/ -cp -r ../../../bin/assets/colorschemes ecode/assets/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Bold.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-Oblique.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMono-BoldOblique.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/DejaVuSansMonoNerdFontComplete.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/nonicons.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/codicon.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Regular.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Bold.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-Italic.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoSans-BoldItalic.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/remixicon.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoEmoji-Regular.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/NotoColorEmoji.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/fonts/DroidSansFallbackFull.ttf ecode/assets/fonts/ -cp -r ../../../bin/assets/plugins ecode/assets/ -mkdir ecode/assets/ui -cp ../../../bin/assets/ui/breeze.css ecode/assets/ui/ -mkdir -p ecode/assets/icon -cp ../../../bin/assets/icon/ecode.png ecode/assets/icon/ -cp ../../../bin/assets/ca-bundle.pem ecode/assets/ca-bundle.pem - if [ -n "$VERSION" ]; then ECODE_VERSION="$VERSION" diff --git a/projects/scripts/copy_ecode_assets.sh b/projects/scripts/copy_ecode_assets.sh new file mode 100644 index 000000000..f46a14c5c --- /dev/null +++ b/projects/scripts/copy_ecode_assets.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +# Usage: ./copy_ecode_assets.sh +# Example: ./copy_ecode_assets.sh ../../../bin ecode.app + +set -euo pipefail + +if [ $# -ne 2 ]; then + echo "Error: Exactly two arguments required: " + echo "Usage: $0 " + exit 1 +fi + +SOURCE_DIR="$1" +DEST_DIR="$2" + +# Resolve SCRIPT_DIR to the directory where this script lives +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +echo "Running copy_ecode_assets.sh from: $SCRIPT_DIR" + +# Resolve source_dir relative to the script location if it's relative +if [[ "$SOURCE_DIR" != /* ]]; then + SOURCE_DIR="$SCRIPT_DIR/$SOURCE_DIR" +fi + +# Convert SOURCE_DIR to absolute path and check it exists +SOURCE_DIR=$(realpath "$SOURCE_DIR" 2>/dev/null || { + echo "Error: Source directory does not exist or cannot be resolved: $1" + exit 1 +}) + +if [ ! -d "$SOURCE_DIR/assets" ]; then + echo "Error: Source assets directory not found: $SOURCE_DIR/assets" + exit 1 +fi + +echo "Copying assets from $SOURCE_DIR to $DEST_DIR" + +# Remove existing destination (if any) +rm -rf "$DEST_DIR" + +# Create required directories (with error check) +mkdir -p "$DEST_DIR/assets"/{colorschemes,fonts,i18n,icon,ui,plugins} || { + echo "Error: Failed to create destination directories in $DEST_DIR" + exit 1 +} + +# Helper function to copy and report errors +copy_file() { + local src="$1" + local dest="$2" + if [ -f "$src" ] || [ -d "$src" ]; then + cp -r "$src" "$dest" || { + echo "Error: Failed to copy $src -> $dest" + exit 1 + } + else + echo "Error: Source file/directory not found: $src" + exit 1 + fi +} + +# Copy whole directories +# We copy into 'assets/' because mkdir already created the subfolders. +# cp will merge the source folder into the existing destination folder. +copy_file "$SOURCE_DIR/assets/i18n" "$DEST_DIR/assets/" +copy_file "$SOURCE_DIR/assets/colorschemes" "$DEST_DIR/assets/" +copy_file "$SOURCE_DIR/assets/plugins" "$DEST_DIR/assets/" + +# Copy individual fonts using a loop +fonts=( + DejaVuSansMono.ttf + DejaVuSansMono-Bold.ttf + DejaVuSansMono-Oblique.ttf + DejaVuSansMono-BoldOblique.ttf + DejaVuSansMonoNerdFontComplete.ttf + nonicons.ttf + codicon.ttf + NotoSans-Regular.ttf + NotoSans-Bold.ttf + NotoSans-Italic.ttf + NotoSans-BoldItalic.ttf + remixicon.ttf + NotoEmoji-Regular.ttf + NotoColorEmoji.ttf + DroidSansFallbackFull.ttf +) + +for font in "${fonts[@]}"; do + copy_file "$SOURCE_DIR/assets/fonts/$font" "$DEST_DIR/assets/fonts/" +done + +# Copy other individual files +copy_file "$SOURCE_DIR/assets/icon/ecode.png" "$DEST_DIR/assets/icon/ecode.png" +copy_file "$SOURCE_DIR/assets/ui/breeze.css" "$DEST_DIR/assets/ui/breeze.css" +copy_file "$SOURCE_DIR/assets/ca-bundle.pem" "$DEST_DIR/assets/ca-bundle.pem" + +echo "Assets successfully copied to $DEST_DIR"