diff --git a/packages/msys/build-i686.sh b/packages/msys/build-i686.sh index 2d8a3384..1a146f9a 100644 --- a/packages/msys/build-i686.sh +++ b/packages/msys/build-i686.sh @@ -1,30 +1,91 @@ #!/bin/bash -TARGET_DIR="/r/" -BUILD_DIR="${TEMP}/redpandacpp-build" -PACKAGE_DIR="${TEMP}/RedPanda-CPP" -GCC_DIR="/mingw32" -PATH="${GCC_DIR}/bin:${PATH}" -QMAKE="${GCC_DIR}/qt5-static/bin/qmake" -NSIS="/d/Program Files (x86)/NSIS/bin/makensis.exe" -SOURCE_DIR=`pwd` -MINGW="/e/Workspaces/contributes/MinGW/MinGW32" -MINGW_NAME="MinGW32" +set -euxo pipefail -rm -rf "${BUILD_DIR}" -test -z "${BUILD_DIR}" | mkdir "${BUILD_DIR}" -rm -rf "${PACKAGE_DIR}" -mkdir "${PACKAGE_DIR}" +# Usage: +# packages/msys/build-i686.sh [-c|--clean] [-nd|--no-deps] [-t|--target-dir ] -echo "Building..." +if [[ ! -v MSYSTEM || ${MSYSTEM} != "MINGW32" ]]; then + echo "This script must be run in a MinGW32 shell" + exit 1 +fi + +CLEAN=0 +CHECK_DEPS=1 +TARGET_DIR="$(pwd)/dist" +while [[ $# -gt 0 ]]; do + case $1 in + -c|--clean) + CLEAN=1 + shift + ;; + -nd|--no-deps) + CHECK_DEPS=0 + shift + ;; + -t|--target-dir) + TARGET_DIR="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; + esac +done + +BUILD_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-build" +PACKAGE_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-pkg" +QMAKE="${MINGW_PREFIX}/qt5-static/bin/qmake" +NSIS="/mingw32/bin/makensis" +SOURCE_DIR="$(pwd)" +MINGW_ARCHIVE="mingw32.7z" + +function fn_print_progress() { + echo -e "\e[1;32;44m$1\e[0m" +} + +## check deps + +if [[ ${CHECK_DEPS} -eq 1 ]]; then + deps=( + ${MINGW_PACKAGE_PREFIX}-{gcc,make,qt5-static,7zip} + mingw-w64-i686-nsis + git + ) + for dep in ${deps[@]}; do + pacman -Q ${dep} &>/dev/null || { + echo "Missing dependency: ${dep}" + exit 1 + } + done +fi + +if [[ ! -f "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" ]]; then + echo "Missing ${MINGW_ARCHIVE}" + exit 1 +fi + +## prepare dirs + +if [[ ${CLEAN} -eq 1 ]]; then + rm -rf "${BUILD_DIR}" + rm -rf "${PACKAGE_DIR}" +fi +mkdir -p "${BUILD_DIR}" "${PACKAGE_DIR}" "${TARGET_DIR}" + +## build + +fn_print_progress "Building..." pushd . cd "${BUILD_DIR}" -make distclean "$QMAKE" PREFIX="${PACKAGE_DIR}" -o Makefile "${SOURCE_DIR}\Red_Panda_Cpp.pro" -r -spec win32-g++ -make -j16 -make install +mingw32-make -j$(nproc) +mingw32-make install popd +## prepare packaging resources + echo "Making no-compiler installer ..." pushd . cd "${PACKAGE_DIR}" @@ -33,59 +94,45 @@ cp "${SOURCE_DIR}/platform/windows/qt.conf" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-i686-nocompiler.nsi" . - -"${NSIS}" redpanda-i686-nocompiler.nsi -rm -f lang.nsh -rm -f config32.nsh -rm -f config.nsh -rm -f config-clang.nsh -rm -f redpanda-i686-nocompiler.nsi - -SETUP_NAME=`ls *.Setup.exe` -PORTABLE_NAME=`echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/'` -mv "$SETUP_NAME" "${TARGET_DIR}" +cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-i686.nsi" . popd -pushd . -cd "${TARGET_DIR}" -echo "Making no-compiler Portable Package..." -7z a -mmt8 -mx9 "${PORTABLE_NAME}" "${PACKAGE_DIR}" -popd - -# we need reinstall config32.nsh -pushd . -cd "${BUILD_DIR}" -make install -popd - -echo "Making installer..." +## make no-compiler package pushd . cd "${PACKAGE_DIR}" -ln -s "${MINGW}" $MinGW_NAME +fn_print_progress "Making no-compiler installer ..." +"${NSIS}" redpanda-i686-nocompiler.nsi -cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" . -cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-i686.nsi" . +SETUP_NAME="$(ls *.Setup.exe)" +PORTABLE_NAME="$(echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/')" -"${NSIS}" redpanda-i686.nsi -rm -f lang.nsh -rm -f config32.nsh -rm -f config.nsh -rm -f config-clang.nsh -rm -f redpanda-i686.nsi - -SETUP_NAME=`ls *.Setup.exe` -PORTABLE_NAME=`echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/'` -mv "$SETUP_NAME" "${TARGET_DIR}" +fn_print_progress "Making no-compiler Portable Package..." +7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" +7z a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP" +rm -rf "RedPanda-CPP" +mv "${SETUP_NAME}" "${TARGET_DIR}" +mv "${PORTABLE_NAME}" "${TARGET_DIR}" popd +## make mingw package + pushd . -cd "${TARGET_DIR}" -echo "Making Portable Package..." -7z a -mmt8 -mx9 "${PORTABLE_NAME}" "${PACKAGE_DIR}" +cd "${PACKAGE_DIR}" +fn_print_progress "Making installer..." +[[ ! -d mingw32 ]] && 7z x "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" -o"${PACKAGE_DIR}" + +"${NSIS}" redpanda-i686.nsi + +SETUP_NAME="$(ls *.Setup.exe)" +PORTABLE_NAME="$(echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/')" + +fn_print_progress "Making Portable Package..." +7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" +7z a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP" +rm -rf "RedPanda-CPP" + +mv "${SETUP_NAME}" "${TARGET_DIR}" +mv "${PORTABLE_NAME}" "${TARGET_DIR}" popd - -echo "Clean up..." -rm -rf "${PACKAGE_DIR}" - diff --git a/packages/msys/build-x64.sh b/packages/msys/build-x64.sh index 4947adeb..e0649098 100644 --- a/packages/msys/build-x64.sh +++ b/packages/msys/build-x64.sh @@ -1,31 +1,91 @@ #!/bin/bash -TARGET_DIR="/r/" -BUILD_DIR="${TEMP}/redpandacpp-build" -PACKAGE_DIR="${TEMP}/RedPanda-CPP" -GCC_DIR="/mingw64" -PATH="${GCC_DIR}/bin:${PATH}" -QMAKE="${GCC_DIR}/qt5-static/bin/qmake" -NSIS="/d/Program Files (x86)/NSIS/bin/makensis.exe" -SOURCE_DIR=`pwd` -MINGW="/e/Workspaces/contributes/MinGW/MinGW64" -MINGW_NAME="MinGW64" +set -euxo pipefail -rm -rf "${BUILD_DIR}" -test -z "${BUILD_DIR}" | mkdir "${BUILD_DIR}" -rm -rf "${PACKAGE_DIR}" -mkdir "${PACKAGE_DIR}" +# Usage: +# packages/msys/build-x64.sh [-c|--clean] [-nd|--no-deps] [-t|--target-dir ] -echo "Building..." +if [[ ! -v MSYSTEM || ( ${MSYSTEM} != "MINGW64" && ${MSYSTEM} != "UCRT64" ) ]]; then + echo "This script must be run in a MinGW64 or UCRT64 shell" + exit 1 +fi + +CLEAN=0 +CHECK_DEPS=1 +TARGET_DIR="$(pwd)/dist" +while [[ $# -gt 0 ]]; do + case $1 in + -c|--clean) + CLEAN=1 + shift + ;; + -nd|--no-deps) + CHECK_DEPS=0 + shift + ;; + -t|--target-dir) + TARGET_DIR="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; + esac +done + +BUILD_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-build" +PACKAGE_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-pkg" +QMAKE="${MINGW_PREFIX}/qt5-static/bin/qmake" +NSIS="/mingw32/bin/makensis" +SOURCE_DIR="$(pwd)" +MINGW_ARCHIVE="mingw64.7z" + +function fn_print_progress() { + echo -e "\e[1;32;44m$1\e[0m" +} + +## check deps + +if [[ ${CHECK_DEPS} -eq 1 ]]; then + deps=( + ${MINGW_PACKAGE_PREFIX}-{gcc,make,qt5-static,7zip} + mingw-w64-i686-nsis + git + ) + for dep in ${deps[@]}; do + pacman -Q ${dep} &>/dev/null || { + echo "Missing dependency: ${dep}" + exit 1 + } + done +fi + +if [[ ! -f "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" ]]; then + echo "Missing MinGW archive: assets/${MINGW_ARCHIVE}" + exit 1 +fi + +## prepare dirs + +if [[ ${CLEAN} -eq 1 ]]; then + rm -rf "${BUILD_DIR}" + rm -rf "${PACKAGE_DIR}" +fi +mkdir -p "${BUILD_DIR}" "${PACKAGE_DIR}" "${TARGET_DIR}" + +## build + +fn_print_progress "Building..." pushd . cd "${BUILD_DIR}" -make distclean -"$QMAKE" PREFIX="${PACKAGE_DIR}" X86_64=ON -o Makefile "${SOURCE_DIR}\Red_Panda_Cpp.pro" -r -spec win32-g++ -make -j16 -make install +"$QMAKE" PREFIX="${PACKAGE_DIR}" X86_64=ON -o Makefile "${SOURCE_DIR}/Red_Panda_Cpp.pro" -r -spec win32-g++ +mingw32-make -j$(nproc) +mingw32-make install popd -echo "Making no-compiler installer ..." +## prepare packaging resources + pushd . cd "${PACKAGE_DIR}" @@ -33,63 +93,45 @@ cp "${SOURCE_DIR}/platform/windows/qt.conf" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-nocompiler.nsi" . - -"${NSIS}" redpanda-nocompiler.nsi -rm -f lang.nsh -rm -f config.nsh -rm -f config32.nsh -rm -f config-clang.nsh -rm -f redpanda-nocompiler.nsi - -SETUP_NAME=`ls *.Setup.exe` -PORTABLE_NAME=`echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/'` -mv "$SETUP_NAME" "${TARGET_DIR}" +cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-x64.nsi" . popd -pushd . -cd "${TARGET_DIR}" -echo "Making no-compiler Portable Package..." -7z a -mmt8 -mx9 "${PORTABLE_NAME}" "${PACKAGE_DIR}" -popd - -# we need reinstall config.nsh -pushd . -cd "${BUILD_DIR}" -make install -popd - -echo "Making installer..." +## make no-compiler package pushd . cd "${PACKAGE_DIR}" -cp -a "${MINGW}" . -#rm -rf "${MINGW_NAME}/share/gcc-11.2.0" -#cp -a "${SOURCE_DIR}/tools/gdb-scripts/gcc-11.2.0" "${MINGW_NAME}/share" +fn_print_progress "Making no-compiler installer ..." +"${NSIS}" redpanda-nocompiler.nsi -cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" . -cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda-x64.nsi" . +SETUP_NAME="$(ls *.Setup.exe)" +PORTABLE_NAME="$(echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/')" -"${NSIS}" redpanda-x64.nsi -rm -f lang.nsh -rm -f config.nsh -rm -f config32.nsh -rm -f config-clang.nsh -rm -f redpanda-x64.nsi - -SETUP_NAME=`ls *.Setup.exe` -PORTABLE_NAME=`echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/'` -mv "$SETUP_NAME" "${TARGET_DIR}" +fn_print_progress "Making no-compiler Portable Package..." +7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" +7z a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP" +rm -rf "RedPanda-CPP" +mv "${SETUP_NAME}" "${TARGET_DIR}" +mv "${PORTABLE_NAME}" "${TARGET_DIR}" popd +## make mingw package + pushd . +cd "${PACKAGE_DIR}" +fn_print_progress "Making installer..." +[[ ! -d mingw64 ]] && 7z x "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" -o"${PACKAGE_DIR}" -cd "${TARGET_DIR}" -echo "Making Portable Package..." -7z a -mmt8 -mx9 "${PORTABLE_NAME}" "${PACKAGE_DIR}" +"${NSIS}" redpanda-x64.nsi -echo "Clean up..." -rm -rf "${PACKAGE_DIR}" +SETUP_NAME="$(ls *.Setup.exe)" +PORTABLE_NAME="$(echo $SETUP_NAME | sed 's/Setup.exe/Portable.7z/')" +fn_print_progress "Making Portable Package..." +7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" +7z a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP" +rm -rf "RedPanda-CPP" + +mv "${SETUP_NAME}" "${TARGET_DIR}" +mv "${PORTABLE_NAME}" "${TARGET_DIR}" popd -