orthogonalize mingw32 and mingw64 in packaging script (#338)

This commit is contained in:
Cyano Hao 2024-03-29 08:22:02 +08:00 committed by GitHub
parent 09b319b3e1
commit b3d4135709
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 92 additions and 61 deletions

View File

@ -6,7 +6,7 @@ set -euxo pipefail
# packages/msys/build-mingw.sh [-m|--msystem <MSYSTEM>] [-c|--clean] [-nd|--no-deps] [-t|--target-dir <dir>] # packages/msys/build-mingw.sh [-m|--msystem <MSYSTEM>] [-c|--clean] [-nd|--no-deps] [-t|--target-dir <dir>]
# Options: # Options:
# -m, --msystem <MSYSTEM> switch to other MSYS2 environment # -m, --msystem <MSYSTEM> switch to other MSYS2 environment
# (MINGW32, MINGW64, UCRT64, CLANG32, CLANG64) # (MINGW32, MINGW64, UCRT64, CLANG32, CLANG64, CLANGARM64)
# MUST be used before other options # MUST be used before other options
# -c, --clean clean build and package directories # -c, --clean clean build and package directories
# -nd, --no-deps skip dependency check # -nd, --no-deps skip dependency check
@ -24,7 +24,7 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
msystem=$2 msystem=$2
shift 2 shift 2
case "${msystem}" in case "${msystem}" in
MINGW32|MINGW64|UCRT64|CLANG32|CLANG64) MINGW32|MINGW64|UCRT64|CLANG32|CLANG64|CLANGARM64)
export MSYSTEM="${msystem}" export MSYSTEM="${msystem}"
exec /bin/bash --login "$0" "$@" exec /bin/bash --login "$0" "$@"
;; ;;
@ -38,28 +38,30 @@ fi
case "${MSYSTEM}" in case "${MSYSTEM}" in
MINGW32|CLANG32) # there is no UCRT32 MINGW32|CLANG32) # there is no UCRT32
NSIS_ARCH=x86 NSIS_ARCH=x86
BITNESS=32 PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win32"
COMPILER_NAME="MinGW-w64 i686 GCC 8.1"
ARCHIVE_MINGW_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win32.${COMPILER_NAME}"
ARCHIVE_NO_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win32.No.Compiler"
;; ;;
MINGW64|UCRT64|CLANG64) MINGW64|UCRT64|CLANG64)
NSIS_ARCH=x64 NSIS_ARCH=x64
BITNESS=64 PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win64"
COMPILER_NAME="MinGW-w64 X86_64 GCC 11.4" ;;
ARCHIVE_MINGW_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win64.${COMPILER_NAME}" CLANGARM64)
ARCHIVE_NO_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win64.No.Compiler" NSIS_ARCH=arm64
PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.arm64"
;; ;;
*) *)
echo "This script must be run in one of the following MSYS2 shells:" echo "This script must be run in one of the following MSYS2 shells:"
echo " - MINGW32 / CLANG32" echo " - MINGW32 / CLANG32"
echo " - MINGW64 / UCRT64 / CLANG64" echo " - MINGW64 / UCRT64 / CLANG64"
echo " - CLANGARM64"
exit 1 exit 1
;; ;;
esac esac
CLEAN=0 CLEAN=0
CHECK_DEPS=1 CHECK_DEPS=1
compilers=()
COMPILER_MINGW32=0
COMPILER_MINGW64=0
TARGET_DIR="$(pwd)/dist" TARGET_DIR="$(pwd)/dist"
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
@ -67,6 +69,16 @@ while [[ $# -gt 0 ]]; do
CLEAN=1 CLEAN=1
shift shift
;; ;;
--mingw32)
compilers+=("mingw32")
COMPILER_MINGW32=1
shift
;;
--mingw64)
compilers+=("mingw64")
COMPILER_MINGW64=1
shift
;;
-nd|--no-deps) -nd|--no-deps)
CHECK_DEPS=0 CHECK_DEPS=0
shift shift
@ -87,7 +99,21 @@ PACKAGE_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-pkg"
QMAKE="${MINGW_PREFIX}/qt5-static/bin/qmake" QMAKE="${MINGW_PREFIX}/qt5-static/bin/qmake"
NSIS="/mingw32/bin/makensis" NSIS="/mingw32/bin/makensis"
SOURCE_DIR="$(pwd)" SOURCE_DIR="$(pwd)"
MINGW_ARCHIVE="mingw${BITNESS}.7z"
MINGW32_ARCHIVE="mingw32.7z"
MINGW32_COMPILER_NAME="MinGW-w64 i686 GCC 8.1"
MINGW32_PACKAGE_SUFFIX="MinGW32_8.1"
MINGW64_ARCHIVE="mingw64.7z"
MINGW64_COMPILER_NAME="MinGW-w64 X86_64 GCC 11.4"
MINGW64_PACKAGE_SUFFIX="MinGW64_11.4"
if [[ ${#compilers[@]} -eq 0 ]]; then
PACKAGE_BASENAME="${PACKAGE_BASENAME}.NoCompiler"
else
[[ ${COMPILER_MINGW32} -eq 1 ]] && PACKAGE_BASENAME="${PACKAGE_BASENAME}.${MINGW32_PACKAGE_SUFFIX}"
[[ ${COMPILER_MINGW64} -eq 1 ]] && PACKAGE_BASENAME="${PACKAGE_BASENAME}.${MINGW64_PACKAGE_SUFFIX}"
fi
function fn_print_progress() { function fn_print_progress() {
echo -e "\e[1;32;44m$1\e[0m" echo -e "\e[1;32;44m$1\e[0m"
@ -100,7 +126,7 @@ if [[ ${CHECK_DEPS} -eq 1 ]]; then
MINGW32|MINGW64|UCRT64) MINGW32|MINGW64|UCRT64)
compiler=gcc compiler=gcc
;; ;;
CLANG32|CLANG64) CLANG32|CLANG64|CLANGARM64)
compiler=clang compiler=clang
;; ;;
esac esac
@ -117,8 +143,12 @@ if [[ ${CHECK_DEPS} -eq 1 ]]; then
done done
fi fi
if [[ ! -f "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" ]]; then if [[ ${COMPILER_MINGW32} -eq 1 && ! -f "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" ]]; then
echo "Missing MinGW archive: assets/${MINGW_ARCHIVE}" echo "Missing MinGW archive: assets/${MINGW32_ARCHIVE}"
exit 1
fi
if [[ ${COMPILER_MINGW64} -eq 1 && ! -f "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" ]]; then
echo "Missing MinGW archive: assets/${MINGW64_ARCHIVE}"
exit 1 exit 1
fi fi
@ -136,7 +166,7 @@ fn_print_progress "Building..."
pushd . pushd .
cd "${BUILD_DIR}" cd "${BUILD_DIR}"
qmake_flags=() qmake_flags=()
[[ NSIS_ARCH == x64 ]] && qmake_flags+=("X86_64=ON") [[ ${NSIS_ARCH} == x64 ]] && qmake_flags+=("X86_64=ON")
"$QMAKE" PREFIX="${PACKAGE_DIR}" ${qmake_flags[@]} -o Makefile "${SOURCE_DIR}/Red_Panda_Cpp.pro" -r "$QMAKE" PREFIX="${PACKAGE_DIR}" ${qmake_flags[@]} -o Makefile "${SOURCE_DIR}/Red_Panda_Cpp.pro" -r
mingw32-make -j$(nproc) mingw32-make -j$(nproc)
mingw32-make install mingw32-make install
@ -153,45 +183,31 @@ cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" .
cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda.nsi" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda.nsi" .
popd popd
## make no-compiler package ## make package
pushd . pushd .
cd "${PACKAGE_DIR}" cd "${PACKAGE_DIR}"
SETUP_NAME="${ARCHIVE_NO_COMPILER_BASENAME}.Setup.exe" SETUP_NAME="${PACKAGE_BASENAME}.Setup.exe"
PORTABLE_NAME="${ARCHIVE_NO_COMPILER_BASENAME}.Portable.7z" PORTABLE_NAME="${PACKAGE_BASENAME}.Portable.7z"
fn_print_progress "Making no-compiler installer ..."
"${NSIS}" \
-DAPP_VERSION="${APP_VERSION}" \
-DARCH="${NSIS_ARCH}" \
-DFINALNAME="${SETUP_NAME}" \
redpanda.nsi
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}"
SETUP_NAME="${ARCHIVE_MINGW_COMPILER_BASENAME}.Setup.exe"
PORTABLE_NAME="${ARCHIVE_MINGW_COMPILER_BASENAME}.Portable.7z"
fn_print_progress "Making installer..." fn_print_progress "Making installer..."
[[ ! -d "mingw${BITNESS}" ]] && 7z x "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" -o"${PACKAGE_DIR}"
"${NSIS}" \ nsis_flags=(
-DAPP_VERSION="${APP_VERSION}" \ -DAPP_VERSION="${APP_VERSION}"
-DARCH="${NSIS_ARCH}" \ -DARCH="${NSIS_ARCH}"
-DFINALNAME="${SETUP_NAME}" \ -DFINALNAME="${SETUP_NAME}"
-DHAVE_MINGW -DCOMPILERNAME="${COMPILER_NAME}" -DCOMPILERFOLDER="mingw${BITNESS}" \ -DMINGW32_COMPILER_NAME="${MINGW32_COMPILER_NAME}"
redpanda.nsi -DMINGW64_COMPILER_NAME="${MINGW64_COMPILER_NAME}"
)
if [[ ${COMPILER_MINGW32} -eq 1 ]]; then
nsis_flags+=(-DHAVE_MINGW32)
[[ -d "mingw32" ]] || 7z x "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" -o"${PACKAGE_DIR}"
fi
if [[ ${COMPILER_MINGW64} -eq 1 ]]; then
nsis_flags+=(-DHAVE_MINGW64)
[[ -d "mingw64" ]] || 7z x "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" -o"${PACKAGE_DIR}"
fi
"${NSIS}" "${nsis_flags[@]}" redpanda.nsi
fn_print_progress "Making Portable Package..." fn_print_progress "Making Portable Package..."
7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" 7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe"

View File

@ -2,7 +2,8 @@
LangString MessageAppName 1033 "Red Panda C++" LangString MessageAppName 1033 "Red Panda C++"
LangString MessageSectionMain 1033 "The Red Panda C++ IDE (Integrated Development Environment)" LangString MessageSectionMain 1033 "The Red Panda C++ IDE (Integrated Development Environment)"
LangString MessageSectionIcons 1033 "Various icons that you can use in your programs" LangString MessageSectionIcons 1033 "Various icons that you can use in your programs"
LangString MessageSectionMinGW 1033 "The ${COMPILERNAME} compiler and associated tools, headers and libraries" LangString MessageSectionMinGW32 1033 "The ${MINGW32_COMPILER_NAME} compiler and associated tools, headers and libraries"
LangString MessageSectionMinGW64 1033 "The ${MINGW64_COMPILER_NAME} compiler and associated tools, headers and libraries"
LangString MessageSectionLangs 1033 "The Red Panda C++ interface translated to different languages (other than English which is built-in)" LangString MessageSectionLangs 1033 "The Red Panda C++ interface translated to different languages (other than English which is built-in)"
LangString MessageSectionAssocs 1033 "Use Red Panda C++ as the default application for opening these types of files" LangString MessageSectionAssocs 1033 "Use Red Panda C++ as the default application for opening these types of files"
LangString MessageSectionShortcuts 1033 "Create shortcuts to Red Panda C++ in various folders" LangString MessageSectionShortcuts 1033 "Create shortcuts to Red Panda C++ in various folders"
@ -13,7 +14,8 @@ LangString MessageRemoveConfig 1033 "Do you want to remove all the remainin
LangString SectionMainName 1033 "Program files (required)" LangString SectionMainName 1033 "Program files (required)"
LangString SectionIconsName 1033 "Icon files" LangString SectionIconsName 1033 "Icon files"
LangString SectionLangsName 1033 "Language files" LangString SectionLangsName 1033 "Language files"
LangString SectionMinGWName 1033 "${COMPILERNAME} compiler" LangString SectionMinGW32Name 1033 "${MINGW32_COMPILER_NAME} compiler"
LangString SectionMinGW64Name 1033 "${MINGW64_COMPILER_NAME} compiler"
LangString SectionAssocsName 1033 "Associate files to Red Panda C++" LangString SectionAssocsName 1033 "Associate files to Red Panda C++"
LangString SectionAssocExtNameBegin 1033 "Associate" LangString SectionAssocExtNameBegin 1033 "Associate"
LangString SectionAssocExtNameEnd 1033 "files to Red Panda C++" LangString SectionAssocExtNameEnd 1033 "files to Red Panda C++"
@ -26,7 +28,8 @@ LangString SectionConfigName 1033 "Remove old configuration files"
LangString MessageAppName 2052 "小熊猫C++" LangString MessageAppName 2052 "小熊猫C++"
LangString MessageSectionMain 2052 "小熊猫C++ IDE (集成开发环境)" LangString MessageSectionMain 2052 "小熊猫C++ IDE (集成开发环境)"
LangString MessageSectionIcons 2052 "项目模板使用的图标文件" LangString MessageSectionIcons 2052 "项目模板使用的图标文件"
LangString MessageSectionMinGW 2052 "${COMPILERNAME} 编译器和相关的工具、头文件和库" LangString MessageSectionMinGW32 2052 "${MINGW32_COMPILER_NAME} 编译器和相关的工具、头文件和库"
LangString MessageSectionMinGW64 2052 "${MINGW64_COMPILER_NAME} 编译器和相关的工具、头文件和库"
LangString MessageSectionLangs 2052 "小熊猫C++翻译文件" LangString MessageSectionLangs 2052 "小熊猫C++翻译文件"
LangString MessageSectionAssocs 2052 "使用小熊猫C++打开这些文件" LangString MessageSectionAssocs 2052 "使用小熊猫C++打开这些文件"
LangString MessageSectionShortcuts 2052 "开始菜单和快捷方式" LangString MessageSectionShortcuts 2052 "开始菜单和快捷方式"
@ -37,7 +40,8 @@ LangString MessageRemoveConfig 2052 "你想要删除所有的配置文件
LangString SectionMainName 2052 "程序文件 (必须)" LangString SectionMainName 2052 "程序文件 (必须)"
LangString SectionIconsName 2052 "图标文件" LangString SectionIconsName 2052 "图标文件"
LangString SectionLangsName 2052 "语言文件" LangString SectionLangsName 2052 "语言文件"
LangString SectionMinGWName 2052 "${COMPILERNAME}编译器" LangString SectionMinGW32Name 2052 "${MINGW32_COMPILER_NAME} 编译器"
LangString SectionMinGW64Name 2052 "${MINGW64_COMPILER_NAME} 编译器"
LangString SectionAssocsName 2052 "关联文件到小熊猫C++" LangString SectionAssocsName 2052 "关联文件到小熊猫C++"
LangString SectionAssocExtNameBegin 2052 "将" LangString SectionAssocExtNameBegin 2052 "将"
LangString SectionAssocExtNameEnd 2052 "文件关联到小熊猫C++" LangString SectionAssocExtNameEnd 2052 "文件关联到小熊猫C++"

View File

@ -104,12 +104,21 @@ Section "$(SectionMainName)" SectionMain
SectionEnd SectionEnd
!ifdef HAVE_MINGW !ifdef HAVE_MINGW32
Section "$(SectionMinGWName)" SectionMinGW Section "$(SectionMinGW32Name)" SectionMinGW32
SectionIn 1 3 SectionIn 1 3
SetOutPath $INSTDIR\${COMPILERFOLDER} SetOutPath $INSTDIR
File /nonfatal /r "${COMPILERFOLDER}\*" File /nonfatal /r "mingw32"
SectionEnd
!endif
!ifdef HAVE_MINGW64
Section "$(SectionMinGW64Name)" SectionMinGW64
SectionIn 1 3
SetOutPath $INSTDIR
File /nonfatal /r "mingw64"
SectionEnd SectionEnd
!endif !endif
@ -263,8 +272,11 @@ SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SectionMain} "$(MessageSectionMain)" !insertmacro MUI_DESCRIPTION_TEXT ${SectionMain} "$(MessageSectionMain)"
!ifdef HAVE_MINGW !ifdef HAVE_MINGW32
!insertmacro MUI_DESCRIPTION_TEXT ${SectionMinGW} "$(MessageSectionMinGW)" !insertmacro MUI_DESCRIPTION_TEXT ${SectionMinGW32} "$(MessageSectionMinGW32)"
!endif
!ifdef HAVE_MINGW64
!insertmacro MUI_DESCRIPTION_TEXT ${SectionMinGW64} "$(MessageSectionMinGW64)"
!endif !endif
!insertmacro MUI_DESCRIPTION_TEXT ${SectionShortcuts} "$(MessageSectionShortcuts)" !insertmacro MUI_DESCRIPTION_TEXT ${SectionShortcuts} "$(MessageSectionShortcuts)"
!insertmacro MUI_DESCRIPTION_TEXT ${SectionAssocs} "$(MessageSectionAssocs)" !insertmacro MUI_DESCRIPTION_TEXT ${SectionAssocs} "$(MessageSectionAssocs)"
@ -488,9 +500,8 @@ Section "Uninstall"
RMDir /r "$INSTDIR\Lang" RMDir /r "$INSTDIR\Lang"
RMDir /r "$INSTDIR\Templates" RMDir /r "$INSTDIR\Templates"
RMDir /r "$INSTDIR\MinGW32" RMDir /r "$INSTDIR\mingw32"
RMDir /r "$INSTDIR\MinGW64" RMDir /r "$INSTDIR\mingw64"
RMDir /r "$INSTDIR\Clang64"
StrCpy $0 "$INSTDIR" StrCpy $0 "$INSTDIR"
Call un.DeleteDirIfEmpty Call un.DeleteDirIfEmpty