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>]
# Options:
# -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
# -c, --clean clean build and package directories
# -nd, --no-deps skip dependency check
@ -24,7 +24,7 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
msystem=$2
shift 2
case "${msystem}" in
MINGW32|MINGW64|UCRT64|CLANG32|CLANG64)
MINGW32|MINGW64|UCRT64|CLANG32|CLANG64|CLANGARM64)
export MSYSTEM="${msystem}"
exec /bin/bash --login "$0" "$@"
;;
@ -38,28 +38,30 @@ fi
case "${MSYSTEM}" in
MINGW32|CLANG32) # there is no UCRT32
NSIS_ARCH=x86
BITNESS=32
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"
PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win32"
;;
MINGW64|UCRT64|CLANG64)
NSIS_ARCH=x64
BITNESS=64
COMPILER_NAME="MinGW-w64 X86_64 GCC 11.4"
ARCHIVE_MINGW_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win64.${COMPILER_NAME}"
ARCHIVE_NO_COMPILER_BASENAME="RedPanda.C++.${APP_VERSION}.win64.No.Compiler"
PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win64"
;;
CLANGARM64)
NSIS_ARCH=arm64
PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.arm64"
;;
*)
echo "This script must be run in one of the following MSYS2 shells:"
echo " - MINGW32 / CLANG32"
echo " - MINGW64 / UCRT64 / CLANG64"
echo " - CLANGARM64"
exit 1
;;
esac
CLEAN=0
CHECK_DEPS=1
compilers=()
COMPILER_MINGW32=0
COMPILER_MINGW64=0
TARGET_DIR="$(pwd)/dist"
while [[ $# -gt 0 ]]; do
case $1 in
@ -67,6 +69,16 @@ while [[ $# -gt 0 ]]; do
CLEAN=1
shift
;;
--mingw32)
compilers+=("mingw32")
COMPILER_MINGW32=1
shift
;;
--mingw64)
compilers+=("mingw64")
COMPILER_MINGW64=1
shift
;;
-nd|--no-deps)
CHECK_DEPS=0
shift
@ -87,7 +99,21 @@ PACKAGE_DIR="${TEMP}/redpanda-mingw-${MSYSTEM}-pkg"
QMAKE="${MINGW_PREFIX}/qt5-static/bin/qmake"
NSIS="/mingw32/bin/makensis"
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() {
echo -e "\e[1;32;44m$1\e[0m"
@ -100,7 +126,7 @@ if [[ ${CHECK_DEPS} -eq 1 ]]; then
MINGW32|MINGW64|UCRT64)
compiler=gcc
;;
CLANG32|CLANG64)
CLANG32|CLANG64|CLANGARM64)
compiler=clang
;;
esac
@ -117,8 +143,12 @@ if [[ ${CHECK_DEPS} -eq 1 ]]; then
done
fi
if [[ ! -f "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" ]]; then
echo "Missing MinGW archive: assets/${MINGW_ARCHIVE}"
if [[ ${COMPILER_MINGW32} -eq 1 && ! -f "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" ]]; then
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
fi
@ -136,7 +166,7 @@ fn_print_progress "Building..."
pushd .
cd "${BUILD_DIR}"
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
mingw32-make -j$(nproc)
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" .
popd
## make no-compiler package
## make package
pushd .
cd "${PACKAGE_DIR}"
SETUP_NAME="${ARCHIVE_NO_COMPILER_BASENAME}.Setup.exe"
PORTABLE_NAME="${ARCHIVE_NO_COMPILER_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"
SETUP_NAME="${PACKAGE_BASENAME}.Setup.exe"
PORTABLE_NAME="${PACKAGE_BASENAME}.Portable.7z"
fn_print_progress "Making installer..."
[[ ! -d "mingw${BITNESS}" ]] && 7z x "${SOURCE_DIR}/assets/${MINGW_ARCHIVE}" -o"${PACKAGE_DIR}"
"${NSIS}" \
-DAPP_VERSION="${APP_VERSION}" \
-DARCH="${NSIS_ARCH}" \
-DFINALNAME="${SETUP_NAME}" \
-DHAVE_MINGW -DCOMPILERNAME="${COMPILER_NAME}" -DCOMPILERFOLDER="mingw${BITNESS}" \
redpanda.nsi
nsis_flags=(
-DAPP_VERSION="${APP_VERSION}"
-DARCH="${NSIS_ARCH}"
-DFINALNAME="${SETUP_NAME}"
-DMINGW32_COMPILER_NAME="${MINGW32_COMPILER_NAME}"
-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..."
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 MessageSectionMain 1033 "The Red Panda C++ IDE (Integrated Development Environment)"
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 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"
@ -13,7 +14,8 @@ LangString MessageRemoveConfig 1033 "Do you want to remove all the remainin
LangString SectionMainName 1033 "Program files (required)"
LangString SectionIconsName 1033 "Icon 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 SectionAssocExtNameBegin 1033 "Associate"
LangString SectionAssocExtNameEnd 1033 "files to Red Panda C++"
@ -26,7 +28,8 @@ LangString SectionConfigName 1033 "Remove old configuration files"
LangString MessageAppName 2052 "小熊猫C++"
LangString MessageSectionMain 2052 "小熊猫C++ IDE (集成开发环境)"
LangString MessageSectionIcons 2052 "项目模板使用的图标文件"
LangString MessageSectionMinGW 2052 "${COMPILERNAME} 编译器和相关的工具、头文件和库"
LangString MessageSectionMinGW32 2052 "${MINGW32_COMPILER_NAME} 编译器和相关的工具、头文件和库"
LangString MessageSectionMinGW64 2052 "${MINGW64_COMPILER_NAME} 编译器和相关的工具、头文件和库"
LangString MessageSectionLangs 2052 "小熊猫C++翻译文件"
LangString MessageSectionAssocs 2052 "使用小熊猫C++打开这些文件"
LangString MessageSectionShortcuts 2052 "开始菜单和快捷方式"
@ -37,7 +40,8 @@ LangString MessageRemoveConfig 2052 "你想要删除所有的配置文件
LangString SectionMainName 2052 "程序文件 (必须)"
LangString SectionIconsName 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 SectionAssocExtNameBegin 2052 "将"
LangString SectionAssocExtNameEnd 2052 "文件关联到小熊猫C++"

View File

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