From 74e43a8ea172593360a3396335870daf1ec912c2 Mon Sep 17 00:00:00 2001 From: acpiccolo <60399193+acpiccolo@users.noreply.github.com> Date: Mon, 8 Dec 2025 10:11:17 +0100 Subject: [PATCH 1/4] chore: refactor build scripts --- README.md | 6 +- build-appimage-from-linuxdeployimg.sh | 26 +- build-linuxdeployimg.sh | 34 +-- build-makeself-from-linuxdeployimg.sh | 340 ++++++++++++++++++++++++++ 4 files changed, 364 insertions(+), 42 deletions(-) create mode 100755 build-makeself-from-linuxdeployimg.sh diff --git a/README.md b/README.md index 1423ca1..0bf4580 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,12 @@ $ git submodule add https://github.com/x-software-com/mxl-scripts.git scripts Create a `.build-env` file with the following content in the root directory of your repository and change the values according to your product: ```env -export LICENSES_DIR="${PKG_DIR}/usr/share/licenses" export APP_ID_BASE="com.x_software.mxl" -export PACKAGE="mxl_product" +export APP_ID="${APP_ID_BASE}.product" export APP_NAME="MXL_Product" +export PACKAGE="mxl_product" export PRODUCT_PRETTY_NAME="MXL Product" -export APP_ID="${APP_ID_BASE}.product" +export LICENSES_DIR="${PKG_DIR}/usr/share/licenses" export ADDITIONAL_SANCUS_ARGS="--additional-third-party-licenses ${LICENSES_DIR}/${APP_ID_BASE}.product_tool_third_party_licenses.json" export ADDITIONAL_LINUXDEPLOY_ARGS="" ``` diff --git a/build-appimage-from-linuxdeployimg.sh b/build-appimage-from-linuxdeployimg.sh index 93bac7b..69615cb 100755 --- a/build-appimage-from-linuxdeployimg.sh +++ b/build-appimage-from-linuxdeployimg.sh @@ -6,10 +6,9 @@ set -eo pipefail set -x check_arguments() { - local APP_NAME="$1" - local BUILD_TYPE="$2" - local RESULT_DIR="$3" - local USAGE="Usage: $0 " + local BUILD_TYPE="$1" + local RESULT_DIR="$2" + local USAGE="Usage: $0 " if [ -z ${RESULT_DIR} ]; then printf "\n${USAGE}\n\n" @@ -19,19 +18,15 @@ check_arguments() { printf "\n${USAGE}\n\n" exit 1 fi - if [ -z ${APP_NAME} ]; then - printf "\n${USAGE}\n\n" - exit 1 - fi } find_and_extract_linuxdeployimg() { local RESULT_DIR="$1" - local APP_NAME="$2" + local PACKAGE="$2" local VERSION="$3" local EXTRACT_DIR="" EXTRACT_DIR="$(set -e;pwd)/$4" - local LINUXDEPLOYIMG_PATTERN="${APP_NAME}-${VERSION}-$(set -e;uname)-$(set -e;arch).tar.xz" + local LINUXDEPLOYIMG_PATTERN="${PACKAGE}-${VERSION}-$(set -e;uname)-$(set -e;arch).tar.xz" local TEMPFILE TEMPFILE="$(set -e;mktemp)" @@ -55,15 +50,14 @@ find_and_extract_linuxdeployimg() { } main() { - local PACKAGE="$1" - local BUILD_TYPE="$2" + local BUILD_TYPE="$1" local RESULT_DIR="" - RESULT_DIR="$(set -e;pwd)/$3" + RESULT_DIR="$(set -e;pwd)/$2" local SCRIPT_DIR="" SCRIPT_DIR="$(set -e;dirname $0)" SCRIPT_DIR="$(set -e;realpath ${SCRIPT_DIR})" - check_arguments "${PACKAGE}" "${BUILD_TYPE}" "${RESULT_DIR}" + check_arguments "${BUILD_TYPE}" "${RESULT_DIR}" local BUILD_DIR="build/appimage" local SRC_DIR="" @@ -77,7 +71,6 @@ main() { fi . ${SRC_DIR}/.build-env - ${SCRIPT_DIR}/check-build-env.sh mkdir -p "${BUILD_DIR}" @@ -91,9 +84,6 @@ main() { local MAJOR_VERSION="" MAJOR_VERSION="$(set -e;echo ${VERSION} | cut -d '.' -f 1)" local DEST_DIR="${PACKAGE}-${MAJOR_VERSION}" - local STARTUP_SCRIPT="bin/setup.sh" - local REMOVE_DESKTOP_FILE_SCRIPT="remove_desktop_file.sh" - local TOOLS_DIR="libexec" rm -rf tmp find_and_extract_linuxdeployimg "${RESULT_DIR}" "${PACKAGE}" "${PACKAGE_VERSION}" "tmp" diff --git a/build-linuxdeployimg.sh b/build-linuxdeployimg.sh index 519d0c6..523b633 100755 --- a/build-linuxdeployimg.sh +++ b/build-linuxdeployimg.sh @@ -6,18 +6,13 @@ set -eo pipefail set -x check_arguments() { - local PACKAGE="$1" - local BUILD_TYPE="$2" - local BINARY="$3" - local BUILD_DIR="$4" - local PKG_DIR="$5" - local RESULT_DIR="$6" - local USAGE="Usage: $0 \n\ne.g. $0 mxl_player release|debug mxl_player builddir pkgdir result" - - if [ -z ${PACKAGE} ]; then - printf "\n${USAGE}\n\n" - exit 1 - fi + local BUILD_TYPE="$1" + local BINARY="$2" + local BUILD_DIR="$3" + local PKG_DIR="$4" + local RESULT_DIR="$5" + local USAGE="Usage: $0 " + if [ -z ${BUILD_TYPE} ]; then printf "\n${USAGE}\n\n" exit 1 @@ -52,24 +47,21 @@ extract_debug_and_strip() { } main() { - local PACKAGE="$1" - local BUILD_TYPE="$2" - local BINARY="$3" - local BUILD_DIR="$4" - local PKG_DIR="$5" + local BUILD_TYPE="$1" + local BINARY="$2" + local BUILD_DIR="$3" + local PKG_DIR="$4" local RESULT_DIR="" - RESULT_DIR="$(set -e;pwd)/$6" - local LICENSES_DIR="${PKG_DIR}/usr/share/licenses" + RESULT_DIR="$(set -e;pwd)/$5" local SRC_DIR="" SRC_DIR="$(set -e;pwd)" local SCRIPT_DIR="" SCRIPT_DIR="$(set -e;dirname $0)" SCRIPT_DIR="$(set -e;realpath ${SCRIPT_DIR})" - check_arguments "$1" "$2" "$3" "$4" "$5" "$6" + check_arguments "${BUILD_TYPE}" "${BINARY}" "${BUILD_DIR}" "${PKG_DIR}" "${RESULT_DIR}" . ${SRC_DIR}/.build-env - ${SCRIPT_DIR}/check-build-env.sh local VERSION_PREFIX="" diff --git a/build-makeself-from-linuxdeployimg.sh b/build-makeself-from-linuxdeployimg.sh new file mode 100755 index 0000000..9e8b25a --- /dev/null +++ b/build-makeself-from-linuxdeployimg.sh @@ -0,0 +1,340 @@ +#!/usr/bin/env bash +# +# Generate a makeself self-extracting archive from an AppImage matching +# the application name and the version. +# +set -eo pipefail +set -x + +check_arguments() { + local BUILD_TYPE="$1" + local RESULT_DIR="$2" + local USAGE="Usage: $0 " + + if [ -z ${RESULT_DIR} ]; then + printf "\n${USAGE}\n\n" + exit 1 + fi + if [ -z ${BUILD_TYPE} ]; then + printf "\n${USAGE}\n\n" + exit 1 + fi +} + +find_and_extract_linuxdeployimg() { + local RESULT_DIR="$1" + local PACKAGE="$2" + local VERSION="$3" + local EXTRACT_DIR="" + EXTRACT_DIR="$(set -e;pwd)/$4" + local LINUXDEPLOYIMG_PATTERN="${PACKAGE}-${VERSION}-$(set -e;uname)-$(set -e;arch).tar.xz" + + local TEMPFILE + TEMPFILE="$(set -e;mktemp)" + trap "{ rm -f ${TEMPFILE}; }" EXIT + + mkdir -p ${EXTRACT_DIR} + pushd ${EXTRACT_DIR} + + find ${RESULT_DIR} -name "${LINUXDEPLOYIMG_PATTERN}" -print > "${TEMPFILE}" + local COUNT=0 + COUNT="$(set -e; cat "${TEMPFILE}" | wc -l)" + if [ ${COUNT} != 1 ]; then + echo "None or more than one linuxdeployimg '${LINUXDEPLOYIMG_PATTERN}' in '${RESULT_DIR}' found!" + exit 1 + fi + local FILENAME + while read FILENAME; do + tar -xvf ${FILENAME} + done < ${TEMPFILE} + popd +} + +create_setup_script() { + local PACKAGE="$1" + local APP_ID="$2" + local PRODUCT_NAME="$3" + local APP_NAME="$4" + local DEST_DIR="$5" + local TOOLS_DIR="$6" + local REMOVE_DESKTOP_FILE_SCRIPT="$7" + local FILENAME="$8" + local DESKTOP_FILE="${APP_ID}.desktop" + + cat << EOFF > "${FILENAME}" +#!/bin/sh +set -eo pipefail + +check_command() { + local TOOL="\$1" + + if ! command -v \${TOOL} 2>&1 > /dev/null; then + echo "Fatal: Command '\${TOOL}' could not be found, please install it and start \$0 again." + exit 1 + fi +} + +create_remove_desktop_file_script() { + local XDG_DESKTOP_FILE_PATH="\$1" + local FILENAME="\$2" + + cat << EOF > "\${FILENAME}" +#!/bin/sh +set -eo pipefail + +main() { + if [ -f "\${XDG_DESKTOP_FILE_PATH}" ]; then + echo "Removing '\${XDG_DESKTOP_FILE_PATH}'" + rm -f \${XDG_DESKTOP_FILE_PATH} + else + echo "File '\${XDG_DESKTOP_FILE_PATH}' was already removed" + fi +} + +main \\\$@ +EOF + chmod +x "\${FILENAME}" +} + +modify_desktop_file() { + local BINARY="\$1" + local ICON="\$2" + local FILENAME="\$3" + + sed -i -re "s|Exec=${PACKAGE}|Exec=\${BINARY}|" "\${FILENAME}" + sed -i -re "s|TryExec=${PACKAGE}|TryExec=\${BINARY}|" "\${FILENAME}" + sed -i -re "s|Icon=.*|Icon=\${ICON}|" "\${FILENAME}" +} + +main() { + check_command 'dirname' + check_command 'realpath' + check_command 'id' + check_command 'rm' + check_command 'cp' + check_command 'sed' + + local SCRIPT_PATH + local APP_DIR + SCRIPT_PATH=\$(set -e;realpath "\$0") + BIN_DIR=\$(set -e;dirname "\${SCRIPT_PATH}") + APP_DIR=\$(set -e;dirname "\${BIN_DIR}") + + local XDG_PATHS="/usr/local/share /usr/share" + local XDG_DESKTOP_FILE_PATH + local DESKTOP_FILE="${DESKTOP_FILE}" + local DESKTOP_FILE_PATH="\${APP_DIR}/share/applications/\${DESKTOP_FILE}" + local REMOVE_DESKTOP_FILE_SCRIPT="\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" + + if [ \$(id -u) -eq 0 ]; then + if [ -f "\${REMOVE_DESKTOP_FILE_SCRIPT}" ]; then + "\${REMOVE_DESKTOP_FILE_SCRIPT}" 2>&1 > /dev/null + rm -f "\${REMOVE_DESKTOP_FILE_SCRIPT}" + fi + if [ -f "\${DESKTOP_FILE_PATH}" ]; then + for XDG_PATH in \${XDG_PATHS} ; do + if [ -d \${XDG_PATH}/applications ]; then + XDG_DESKTOP_FILE_PATH=\${XDG_PATH}/applications + break + fi + done + + modify_desktop_file "\${BIN_DIR}/${PACKAGE}" "\${APP_DIR}/share/icons/hicolor/scalable/apps/${APP_ID}.svg" "\${DESKTOP_FILE_PATH}" + if [ ! -z \${XDG_DESKTOP_FILE_PATH} ] && [ -d \${XDG_DESKTOP_FILE_PATH} ]; then + cp "\${DESKTOP_FILE_PATH}" "\${XDG_DESKTOP_FILE_PATH}" + create_remove_desktop_file_script "\${XDG_DESKTOP_FILE_PATH}/\${DESKTOP_FILE}" "\${REMOVE_DESKTOP_FILE_SCRIPT}" + fi + fi + else + echo "Warning: Setup is not executed with administrative privileges, skipping desktop integration." + fi + + echo "${PRODUCT_NAME} was successfully set up in '\${APP_DIR}'." +} + +main \$@ +EOFF + chmod +x "${FILENAME}" +} + +create_uninstall_script() { + local PRODUCT_NAME="$1" + local DEST_DIR="$2" + local REMOVE_DESKTOP_FILE_SCRIPT="$3" + local FILENAME="$4" + + cat << EOFF > "${FILENAME}" +#!/bin/sh +set -eo pipefail + +check_command() { + local TOOL="\$1" + + if ! command -v \${TOOL} 2>&1 > /dev/null; then + echo "Fatal: Command '\${TOOL}' could not be found" + exit 1 + fi +} + +remove_file() { + FILE="\$1" + echo "Removing file '\${FILE}'" + rm "\${FILE}" || true +} + +remove_dir() { + DIR="\$1" + echo "Removing directory '\${DIR}'" + rmdir "\${DIR}" || true +} + +main() { + check_command 'dirname' + check_command 'realpath' + check_command 'id' + check_command 'rm' + check_command 'rmdir' + + local SCRIPT_PATH + local APP_DIR + SCRIPT_PATH=\$(set -e;realpath "\$0") + BIN_DIR=\$(set -e;dirname "\${SCRIPT_PATH}") + APP_DIR=\$(set -e;dirname "\${BIN_DIR}") + local INSTALL_FILE_LIST="$(set -e;find . -mindepth 1 -type f | tac | sed 's#\./##g') +" + local INSTALL_DIR_LIST="$(set -e;find . -mindepth 1 -type d | tac | sed 's#\./##g') +" + + if [ \$(id -u) -ne 0 ]; then + echo "Fatal: Administrative privileges required for execution (use su or sudo)" + exit 1 + fi + + if [ -f "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" ]; then + "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" + rm "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" + fi + cd "\${APP_DIR}" + for FILE in \${INSTALL_FILE_LIST}; do + remove_file "\${APP_DIR}/\${FILE}" + done + remove_file "\${SCRIPT_PATH}" + for DIR in \${INSTALL_DIR_LIST}; do + remove_dir "\${APP_DIR}/\${DIR}" + done + remove_dir "\${APP_DIR}" + echo "${PRODUCT_NAME} was successfully uninstalled." +} + +main \$@ +EOFF + chmod +x "${FILENAME}" +} + +create_wrapper_script() { + local BINARY="$1" + local FILENAME="$2" + + cat << EOFF > "${FILENAME}" +#! /usr/bin/env bash +set -eo pipefail + +bin_dir="\$(readlink -f "\$(dirname "\$0")")" +root_dir="\$(dirname "\$bin_dir")" + +APPDIR=\$root_dir +source "\$root_dir"/hooks/"linuxdeploy-plugin-gstreamer.sh" +source "\$root_dir"/hooks/"linuxdeploy-plugin-gtk.sh" + +exec "\$bin_dir/${BINARY}" "\$@" + +EOFF + chmod +x "${FILENAME}" +} + +main() { + local BUILD_TYPE="$1" + local RESULT_DIR="" + RESULT_DIR="$(set -e;pwd)/$2" + local SCRIPT_DIR="" + SCRIPT_DIR="$(set -e;dirname $0)" + SCRIPT_DIR="$(set -e;realpath ${SCRIPT_DIR})" + + check_arguments "${BUILD_TYPE}" "${RESULT_DIR}" + + local BUILD_DIR="build/makeself" + local SRC_DIR="" + SRC_DIR="$(set -e;pwd)" + local VERSION="" + VERSION="$(set -e;cargo version-util get-version)" + + local PACKAGE_VERSION="${VERSION}" + if [ "${BUILD_TYPE}" != "release" ]; then + PACKAGE_VERSION="debug-${VERSION}" + fi + + . ${SRC_DIR}/.build-env + ${SCRIPT_DIR}/check-build-env.sh + + mkdir -p "${BUILD_DIR}" + pushd "${BUILD_DIR}" + + rm -rf build + mkdir build + pushd build + + + local MAJOR_VERSION="" + MAJOR_VERSION="$(set -e;echo ${VERSION} | cut -d '.' -f 1)" + local DEST_DIR="${PACKAGE}-${MAJOR_VERSION}" + + rm -rf tmp + find_and_extract_linuxdeployimg "${RESULT_DIR}" "${PACKAGE}" "${PACKAGE_VERSION}" "tmp" + + rm -rf "${DEST_DIR}" + mv tmp/squashfs-root "${DEST_DIR}" + + pushd "${DEST_DIR}" + + rm -f "usr/share/applications/${APP_ID}.desktop" + # Remove AppImage added key: + grep -v "X-AppImage-Version" "${APP_ID}.desktop" > "usr/share/applications/${APP_ID}.desktop" + rm "${APP_ID}.desktop" + + rm -rf AppRun* .DirIcon *.svg + mv usr/* . + rmdir usr + mv apprun-hooks hooks + + for HOOK in $(ls hooks/*); do + sed -i 's#$APPDIR/usr#${APPDIR}#g' ${HOOK} + sed -i 's#$APPDIR//usr#${APPDIR}#g' ${HOOK} + sed -i 's#${APPDIR}/usr#${APPDIR}#g' ${HOOK} + sed -i 's#pkgconfig/..##g' ${HOOK} + done + + pushd bin + for BINARY in $(ls); do + mv ${BINARY} _${BINARY} + create_wrapper_script "_${BINARY}" "${BINARY}" + done + popd + + local STARTUP_SCRIPT="bin/setup.sh" + local REMOVE_DESKTOP_FILE_SCRIPT="remove_desktop_file.sh" + local TOOLS_DIR="libexec" + create_setup_script "${PACKAGE}" "${APP_ID}" "${PRODUCT_PRETTY_NAME}" "${APP_NAME}" "${DEST_DIR}" "${TOOLS_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "${STARTUP_SCRIPT}" + create_uninstall_script "${PRODUCT_PRETTY_NAME}" "${DEST_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "bin/uninstall.sh" + popd + + local ARCH="" + ARCH="$(set -e;arch)" + local SYSTEM="" + SYSTEM="$(set -e;uname)" + mkdir -p "${RESULT_DIR}" + /opt/makeself/makeself.sh --threads 0 --notemp --nooverwrite --keep-umask "${DEST_DIR}" "${RESULT_DIR}/${APP_NAME}-${VERSION}-${SYSTEM}-${ARCH}.run" "${APP_NAME}" "./${STARTUP_SCRIPT}" + + popd +} + +main $@ From 772c69fd3874159056fcabb8d16cf2140a8a53f6 Mon Sep 17 00:00:00 2001 From: acpiccolo <60399193+acpiccolo@users.noreply.github.com> Date: Mon, 8 Dec 2025 11:22:54 +0100 Subject: [PATCH 2/4] chore: improved makeself build --- build-makeself-from-linuxdeployimg.sh | 33 +++++++++++++-------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/build-makeself-from-linuxdeployimg.sh b/build-makeself-from-linuxdeployimg.sh index 9e8b25a..6a13f17 100755 --- a/build-makeself-from-linuxdeployimg.sh +++ b/build-makeself-from-linuxdeployimg.sh @@ -54,11 +54,9 @@ create_setup_script() { local PACKAGE="$1" local APP_ID="$2" local PRODUCT_NAME="$3" - local APP_NAME="$4" - local DEST_DIR="$5" - local TOOLS_DIR="$6" - local REMOVE_DESKTOP_FILE_SCRIPT="$7" - local FILENAME="$8" + local DEST_DIR="$4" + local REMOVE_DESKTOP_FILE_SCRIPT="$5" + local FILENAME="$6" local DESKTOP_FILE="${APP_ID}.desktop" cat << EOFF > "${FILENAME}" @@ -234,6 +232,7 @@ EOFF create_wrapper_script() { local BINARY="$1" local FILENAME="$2" + local SOURCE_HOOKS="$3" cat << EOFF > "${FILENAME}" #! /usr/bin/env bash @@ -243,8 +242,7 @@ bin_dir="\$(readlink -f "\$(dirname "\$0")")" root_dir="\$(dirname "\$bin_dir")" APPDIR=\$root_dir -source "\$root_dir"/hooks/"linuxdeploy-plugin-gstreamer.sh" -source "\$root_dir"/hooks/"linuxdeploy-plugin-gtk.sh" +${SOURCE_HOOKS} exec "\$bin_dir/${BINARY}" "\$@" @@ -292,38 +290,39 @@ main() { find_and_extract_linuxdeployimg "${RESULT_DIR}" "${PACKAGE}" "${PACKAGE_VERSION}" "tmp" rm -rf "${DEST_DIR}" - mv tmp/squashfs-root "${DEST_DIR}" + mv tmp "${DEST_DIR}" pushd "${DEST_DIR}" - rm -f "usr/share/applications/${APP_ID}.desktop" - # Remove AppImage added key: - grep -v "X-AppImage-Version" "${APP_ID}.desktop" > "usr/share/applications/${APP_ID}.desktop" - rm "${APP_ID}.desktop" - - rm -rf AppRun* .DirIcon *.svg + # Prepare directories from linuxdepoly for makeself + rm -rf AppRun* .DirIcon *.desktop *.svg mv usr/* . rmdir usr mv apprun-hooks hooks + local SOURCE_HOOKS="" for HOOK in $(ls hooks/*); do sed -i 's#$APPDIR/usr#${APPDIR}#g' ${HOOK} sed -i 's#$APPDIR//usr#${APPDIR}#g' ${HOOK} sed -i 's#${APPDIR}/usr#${APPDIR}#g' ${HOOK} sed -i 's#pkgconfig/..##g' ${HOOK} + + if [[ -n ${SOURCE_HOOKS} ]]; then + SOURCE_HOOKS+=$'\n' # Add newline + fi + SOURCE_HOOKS+="source \"\$root_dir\"/hooks/\"${HOOK}\"" done pushd bin for BINARY in $(ls); do mv ${BINARY} _${BINARY} - create_wrapper_script "_${BINARY}" "${BINARY}" + create_wrapper_script "_${BINARY}" "${BINARY}" "${SOURCE_HOOKS}" done popd local STARTUP_SCRIPT="bin/setup.sh" local REMOVE_DESKTOP_FILE_SCRIPT="remove_desktop_file.sh" - local TOOLS_DIR="libexec" - create_setup_script "${PACKAGE}" "${APP_ID}" "${PRODUCT_PRETTY_NAME}" "${APP_NAME}" "${DEST_DIR}" "${TOOLS_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "${STARTUP_SCRIPT}" + create_setup_script "${PACKAGE}" "${APP_ID}" "${PRODUCT_PRETTY_NAME}" "${DEST_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "${STARTUP_SCRIPT}" create_uninstall_script "${PRODUCT_PRETTY_NAME}" "${DEST_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "bin/uninstall.sh" popd From 9ee973042cce5cfada3aa0cb81b119d07bc6872c Mon Sep 17 00:00:00 2001 From: acpiccolo <60399193+acpiccolo@users.noreply.github.com> Date: Mon, 8 Dec 2025 12:00:43 +0100 Subject: [PATCH 3/4] chore: improve build --- build-linuxdeployimg.sh => build-linuxdeployimg-gtk4.sh | 0 build-makeself-from-linuxdeployimg.sh | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename build-linuxdeployimg.sh => build-linuxdeployimg-gtk4.sh (100%) diff --git a/build-linuxdeployimg.sh b/build-linuxdeployimg-gtk4.sh similarity index 100% rename from build-linuxdeployimg.sh rename to build-linuxdeployimg-gtk4.sh diff --git a/build-makeself-from-linuxdeployimg.sh b/build-makeself-from-linuxdeployimg.sh index 6a13f17..c2b09b9 100755 --- a/build-makeself-from-linuxdeployimg.sh +++ b/build-makeself-from-linuxdeployimg.sh @@ -310,7 +310,7 @@ main() { if [[ -n ${SOURCE_HOOKS} ]]; then SOURCE_HOOKS+=$'\n' # Add newline fi - SOURCE_HOOKS+="source \"\$root_dir\"/hooks/\"${HOOK}\"" + SOURCE_HOOKS+="source \"\$root_dir/${HOOK}\"" done pushd bin From 0175afe4e792fef8fb652bb953730586cf771891 Mon Sep 17 00:00:00 2001 From: acpiccolo <60399193+acpiccolo@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:41:11 +0100 Subject: [PATCH 4/4] core: removed old script --- build-makeself-from-appimage.sh | 338 -------------------------------- 1 file changed, 338 deletions(-) delete mode 100755 build-makeself-from-appimage.sh diff --git a/build-makeself-from-appimage.sh b/build-makeself-from-appimage.sh deleted file mode 100755 index 8994162..0000000 --- a/build-makeself-from-appimage.sh +++ /dev/null @@ -1,338 +0,0 @@ -#!/usr/bin/env bash -# -# Generate a makeself self-extracting archive from an AppImage matching -# the application name and the version. -# -set -eo pipefail -set -x - -check_arguments() { - local APP_NAME="$1" - local RESULT_DIR="$2" - local USAGE="Usage: $0 " - - if [ -z ${RESULT_DIR} ]; then - printf "\n${USAGE}\n\n" - exit 1 - fi - if [ -z ${APP_NAME} ]; then - printf "\n${USAGE}\n\n" - exit 1 - fi -} - -find_and_extract_appimage() { - local RESULT_DIR="$1" - local APP_NAME="$2" - local VERSION="$3" - local EXTRACT_DIR="" - EXTRACT_DIR="$(set -e;pwd)/$4" - local APPIMAGE_PATTERN="${APP_NAME}-${VERSION}-x86_64.AppImage" - - local TEMPFILE - TEMPFILE="$(set -e;mktemp)" - trap "{ rm -f ${TEMPFILE}; }" EXIT - - mkdir -p ${EXTRACT_DIR} - pushd ${EXTRACT_DIR} - - find ${RESULT_DIR} -name "${APPIMAGE_PATTERN}" -print > "${TEMPFILE}" - local COUNT=0 - COUNT="$(set -e; cat "${TEMPFILE}" | wc -l)" - if [ ${COUNT} != 1 ]; then - echo "None or more than one appimage '${APPIMAGE_PATTERN}' in '${RESULT_DIR}' found!" - exit 1 - fi - local FILENAME - while read FILENAME; do - chmod +x ${FILENAME} - ${FILENAME} --appimage-extract - done < ${TEMPFILE} - popd -} - -create_setup_script() { - local PACKAGE="$1" - local APP_ID="$2" - local PRODUCT_NAME="$3" - local APP_NAME="$4" - local DEST_DIR="$5" - local TOOLS_DIR="$6" - local REMOVE_DESKTOP_FILE_SCRIPT="$7" - local FILENAME="$8" - local DESKTOP_FILE="${APP_ID}.desktop" - - cat << EOFF > "${FILENAME}" -#!/bin/sh -set -eo pipefail - -check_command() { - local TOOL="\$1" - - if ! command -v \${TOOL} 2>&1 > /dev/null; then - echo "Fatal: Command '\${TOOL}' could not be found, please install it and start \$0 again." - exit 1 - fi -} - -create_remove_desktop_file_script() { - local XDG_DESKTOP_FILE_PATH="\$1" - local FILENAME="\$2" - - cat << EOF > "\${FILENAME}" -#!/bin/sh -set -eo pipefail - -main() { - if [ -f "\${XDG_DESKTOP_FILE_PATH}" ]; then - echo "Removing '\${XDG_DESKTOP_FILE_PATH}'" - rm -f \${XDG_DESKTOP_FILE_PATH} - else - echo "File '\${XDG_DESKTOP_FILE_PATH}' was already removed" - fi -} - -main \\\$@ -EOF - chmod +x "\${FILENAME}" -} - -modify_desktop_file() { - local BINARY="\$1" - local ICON="\$2" - local FILENAME="\$3" - - sed -i -re "s|Exec=${PACKAGE}|Exec=\${BINARY}|" "\${FILENAME}" - sed -i -re "s|TryExec=${PACKAGE}|TryExec=\${BINARY}|" "\${FILENAME}" - sed -i -re "s|Icon=.*|Icon=\${ICON}|" "\${FILENAME}" -} - -main() { - check_command 'dirname' - check_command 'realpath' - check_command 'id' - check_command 'rm' - check_command 'cp' - check_command 'sed' - - local SCRIPT_PATH - local APP_DIR - SCRIPT_PATH=\$(set -e;realpath "\$0") - BIN_DIR=\$(set -e;dirname "\${SCRIPT_PATH}") - APP_DIR=\$(set -e;dirname "\${BIN_DIR}") - - local XDG_PATHS="/usr/local/share /usr/share" - local XDG_DESKTOP_FILE_PATH - local DESKTOP_FILE="${DESKTOP_FILE}" - local DESKTOP_FILE_PATH="\${APP_DIR}/share/applications/\${DESKTOP_FILE}" - local REMOVE_DESKTOP_FILE_SCRIPT="\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" - - if [ \$(id -u) -eq 0 ]; then - if [ -f "\${REMOVE_DESKTOP_FILE_SCRIPT}" ]; then - "\${REMOVE_DESKTOP_FILE_SCRIPT}" 2>&1 > /dev/null - rm -f "\${REMOVE_DESKTOP_FILE_SCRIPT}" - fi - if [ -f "\${DESKTOP_FILE_PATH}" ]; then - for XDG_PATH in \${XDG_PATHS} ; do - if [ -d \${XDG_PATH}/applications ]; then - XDG_DESKTOP_FILE_PATH=\${XDG_PATH}/applications - break - fi - done - - modify_desktop_file "\${BIN_DIR}/${PACKAGE}" "\${APP_DIR}/share/icons/hicolor/scalable/apps/${APP_ID}.svg" "\${DESKTOP_FILE_PATH}" - if [ ! -z \${XDG_DESKTOP_FILE_PATH} ] && [ -d \${XDG_DESKTOP_FILE_PATH} ]; then - cp "\${DESKTOP_FILE_PATH}" "\${XDG_DESKTOP_FILE_PATH}" - create_remove_desktop_file_script "\${XDG_DESKTOP_FILE_PATH}/\${DESKTOP_FILE}" "\${REMOVE_DESKTOP_FILE_SCRIPT}" - fi - fi - else - echo "Warning: Setup is not executed with administrative privileges, skipping desktop integration." - fi - - echo "${PRODUCT_NAME} was successfully set up in '\${APP_DIR}'." -} - -main \$@ -EOFF - chmod +x "${FILENAME}" -} - -create_uninstall_script() { - local PRODUCT_NAME="$1" - local DEST_DIR="$2" - local REMOVE_DESKTOP_FILE_SCRIPT="$3" - local FILENAME="$4" - - cat << EOFF > "${FILENAME}" -#!/bin/sh -set -eo pipefail - -check_command() { - local TOOL="\$1" - - if ! command -v \${TOOL} 2>&1 > /dev/null; then - echo "Fatal: Command '\${TOOL}' could not be found" - exit 1 - fi -} - -remove_file() { - FILE="\$1" - echo "Removing file '\${FILE}'" - rm "\${FILE}" || true -} - -remove_dir() { - DIR="\$1" - echo "Removing directory '\${DIR}'" - rmdir "\${DIR}" || true -} - -main() { - check_command 'dirname' - check_command 'realpath' - check_command 'id' - check_command 'rm' - check_command 'rmdir' - - local SCRIPT_PATH - local APP_DIR - SCRIPT_PATH=\$(set -e;realpath "\$0") - BIN_DIR=\$(set -e;dirname "\${SCRIPT_PATH}") - APP_DIR=\$(set -e;dirname "\${BIN_DIR}") - local INSTALL_FILE_LIST="$(set -e;find . -mindepth 1 -type f | tac | sed 's#\./##g') -" - local INSTALL_DIR_LIST="$(set -e;find . -mindepth 1 -type d | tac | sed 's#\./##g') -" - - if [ \$(id -u) -ne 0 ]; then - echo "Fatal: Administrative privileges required for execution (use su or sudo)" - exit 1 - fi - - if [ -f "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" ]; then - "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" - rm "\${BIN_DIR}/${REMOVE_DESKTOP_FILE_SCRIPT}" - fi - cd "\${APP_DIR}" - for FILE in \${INSTALL_FILE_LIST}; do - remove_file "\${APP_DIR}/\${FILE}" - done - remove_file "\${SCRIPT_PATH}" - for DIR in \${INSTALL_DIR_LIST}; do - remove_dir "\${APP_DIR}/\${DIR}" - done - remove_dir "\${APP_DIR}" - echo "${PRODUCT_NAME} was successfully uninstalled." -} - -main \$@ -EOFF - chmod +x "${FILENAME}" -} - -create_wrapper_script() { - local BINARY="$1" - local FILENAME="$2" - - cat << EOFF > "${FILENAME}" -#! /usr/bin/env bash -set -eo pipefail - -bin_dir="\$(readlink -f "\$(dirname "\$0")")" -root_dir="\$(dirname "\$bin_dir")" - -APPDIR=\$root_dir -source "\$root_dir"/hooks/"linuxdeploy-plugin-gstreamer.sh" -source "\$root_dir"/hooks/"linuxdeploy-plugin-gtk.sh" - -exec "\$bin_dir/${BINARY}" "\$@" - -EOFF - chmod +x "${FILENAME}" -} - -main() { - local PACKAGE="$1" - local RESULT_DIR="" - RESULT_DIR="$(set -e;pwd)/$2" - - check_arguments "${PACKAGE}" "${RESULT_DIR}" - - local BUILD_DIR="build/makeself" - local SRC_DIR="" - SRC_DIR="$(set -e;pwd)" - local SCRIPT_DIR="" - SCRIPT_DIR="$(set -e;dirname $0)" - SCRIPT_DIR="$(set -e;realpath ${SCRIPT_DIR})" - local ARCH="" - ARCH="$(set -e;arch)" - local SYSTEM="" - SYSTEM="$(set -e;uname)" - - . ${SRC_DIR}/.build-env - - ${SCRIPT_DIR}/check-build-env.sh - - local VERSION="" - VERSION="$(set -e;cargo version-util get-version)" - - mkdir -p "${BUILD_DIR}" - pushd "${BUILD_DIR}" - - rm -rf build - mkdir build - pushd build - - - local MAJOR_VERSION="" - MAJOR_VERSION="$(set -e;echo ${VERSION} | cut -d '.' -f 1)" - local DEST_DIR="${PACKAGE}-${MAJOR_VERSION}" - local STARTUP_SCRIPT="bin/setup.sh" - local REMOVE_DESKTOP_FILE_SCRIPT="remove_desktop_file.sh" - local TOOLS_DIR="libexec" - - rm -rf tmp - find_and_extract_appimage "${RESULT_DIR}" "${APP_NAME}" "${VERSION}" "tmp" - - rm -rf "${DEST_DIR}" - mv tmp/squashfs-root "${DEST_DIR}" - - pushd "${DEST_DIR}" - - rm -f "usr/share/applications/${APP_ID}.desktop" - # Remove AppImage added key: - grep -v "X-AppImage-Version" "${APP_ID}.desktop" > "usr/share/applications/${APP_ID}.desktop" - rm "${APP_ID}.desktop" - - rm -rf AppRun* .DirIcon *.svg - mv usr/* . - rmdir usr - mv apprun-hooks hooks - - for HOOK in $(ls hooks/*); do - sed -i 's#$APPDIR/usr#${APPDIR}#g' ${HOOK} - sed -i 's#$APPDIR//usr#${APPDIR}#g' ${HOOK} - sed -i 's#${APPDIR}/usr#${APPDIR}#g' ${HOOK} - sed -i 's#pkgconfig/..##g' ${HOOK} - done - - pushd bin - for BINARY in $(ls); do - mv ${BINARY} _${BINARY} - create_wrapper_script "_${BINARY}" "${BINARY}" - done - popd - - create_setup_script "${PACKAGE}" "${APP_ID}" "${PRODUCT_PRETTY_NAME}" "${APP_NAME}" "${DEST_DIR}" "${TOOLS_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "${STARTUP_SCRIPT}" - create_uninstall_script "${PRODUCT_PRETTY_NAME}" "${DEST_DIR}" "${REMOVE_DESKTOP_FILE_SCRIPT}" "bin/uninstall.sh" - popd - - mkdir -p "${RESULT_DIR}" - /opt/makeself/makeself.sh --threads 0 --notemp --nooverwrite --keep-umask "${DEST_DIR}" "${RESULT_DIR}/${APP_NAME}-${VERSION}-${SYSTEM}-${ARCH}.run" "${APP_NAME}" "./${STARTUP_SCRIPT}" - - popd -} - -main $@