initial commit
Some checks failed
sgraves/cpp-build-system_mac/pipeline/head There was a failure building this commit
sgraves/cpp-build-system/pipeline/head There was a failure building this commit

This commit is contained in:
2025-10-17 07:44:16 -05:00
parent 933c973c79
commit 92e3e495ce
1099 changed files with 102722 additions and 0 deletions

11
src/scripts/cleanup.cmd Normal file
View File

@@ -0,0 +1,11 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call mingw64 -no-start ./cleanup.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
popd

43
src/scripts/cleanup.sh Normal file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(dirname "$0")
PROJECT_SCRIPTS_DIR=$(realpath ${PROJECT_SCRIPTS_DIR})
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
PROJECT_LIBRARY_LOWER=$(echo ${PROJECT_LIBRARY} | tr "[:upper:]" "[:lower:]")
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
if [ ${!ENABLE_NAME} == "OFF" ] && [ ${!KEEP_NAME} != "1" ]; then
CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}]//:/ })
for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do
rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM}
done
${SED} -i "/.*\/${PROJECT_LIBRARY_LOWER}\.cmake/d" "${PROJECT_SOURCE_DIR}/cmake/libraries.cmake"
${SED} -i "/D${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/CMakeLists.txt"
${SED} -i "/${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/cmake/options.cmake"
${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh"
${SED} -i "/\ \ ${PROJECT_LIBRARY}/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh"
${SED} -i "/${PROJECT_LIBRARY}_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake"
${SED} -i "/${PROJECT_LIBRARY}2_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake"
${SED} -i "/${PROJECT_LIBRARY}_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"
${SED} -i "/${PROJECT_LIBRARY}2_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"
${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh"
${SED} -i "/\[${PROJECT_LIBRARY}2\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh"
rm -f "${PROJECT_SOURCE_DIR}/cmake/libraries/${PROJECT_LIBRARY_LOWER}.cmake"
fi
if [ ${!ENABLE_NAME} == "ON" ] && [ "${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]}" != "" ]; then
CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]//:/ })
for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do
rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM}
done
fi
done
${SED} -i "s/\ OFF)/\ ON)/" "${PROJECT_SOURCE_DIR}/cmake/options.cmake"

View File

@@ -0,0 +1,207 @@
#!/usr/bin/env bash
PROJECT_MINGW64_COPY_DEPENDENCIES=()
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1>/dev/null 2>&1
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; then
mkdir -p "${PROJECT_DIST_DIR}"
rm -f ${PROJECT_DIST_DIR}/*.dll
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libgcc_s_seh-1.dll
/mingw64/bin/libstdc++-6.dll
/mingw64/bin/libwinpthread-1.dll
/mingw64/bin/libzlib1.dll
/mingw64/bin/libzstd.dll
/mingw64/bin/zlib1.dll
)
if [ "${PROJECT_ENABLE_BACKWARD_CPP}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/msvcr90.dll)
fi
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libboost*.dll)
fi
if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcli11*.dll)
fi
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libcurl*.dll
/mingw64/bin/libnghttp2-*.dll
)
fi
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libFLAC*.dll)
fi
if [ "${PROJECT_ENABLE_FMT}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfmt*.dll)
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libexpat*.dll
/mingw64/bin/libfontconfig*.dll
)
fi
if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfreetype*.dll)
fi
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdsm.dll)
fi
if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libevent*.dll)
fi
if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libiconv.dll)
fi
if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjpeg*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libturbo*.dll)
fi
if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpng*.dll)
fi
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsodium*.dll)
fi
if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnana*.dll)
fi
if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnuspell-*.dll)
fi
if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libogg*.dll)
fi
if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libopenal*.dll)
fi
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libssl*.dll
/mingw64/bin/libcrypt*.dll
)
fi
if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll)
fi
if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/SDL2*.dll)
fi
if [ "${PROJECT_ENABLE_SECP256K1}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsecp256k1*.dll)
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsfml*.dll)
fi
if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libspdlog*.dll)
fi
if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsqlite3-*.dll)
fi
if [ "${PROJECT_ENABLE_TASN}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtasn1.dll)
fi
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libgtest*.dll
/mingw64/bin/libgmock*.dll
)
fi
if [ "${PROJECT_ENABLE_TPL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiny-process*.dll)
fi
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libvorbis*.dll)
fi
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libLerc.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsharpyuv-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdeflate.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libglib-2*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libgraphite2.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libharfbuzz-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjbig-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpcre2-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiff-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwebp-*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxbase*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxbase*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxbase*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxbase*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxm*.dll)
fi
if [ "${PROJECT_ENABLE_SDL}" == "ON" ] || [ "${PROJECT_ENABLE_SFML}" == "ON" ] ||
[ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libOpenCL*.dll
/mingw64/bin/libopencl*.dll
/mingw64/bin/libgallium_wgl.dll
/mingw64/bin/libva*.dll
/mingw64/bin/opengl*.dll
/mingw64/bin/vulkan*.dll
)
fi
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/bin/*.dll "${PROJECT_DIST_DIR}/"
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/*.dll "${PROJECT_DIST_DIR}/"
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/gcc_x64_dll/*.dll "${PROJECT_DIST_DIR}/"
fi
fi
if [ "${PROJECT_ENABLE_WINFSP}" == "ON" ]; then
if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then
WINFSP_DLL_PART=x64
fi
if [ "${WINFSP_DLL_PART}" != "" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/bin/winfsp-${WINFSP_DLL_PART}.dll)
fi
fi
if [ "${PROJECT_ENABLE_VLC}" == "ON" ]; then
rsync -av --progress ${PROJECT_3RD_PARTY_DIR}/vlc/ "${PROJECT_DIST_DIR}/vlc/"
fi
for PROJECT_DEPENDENCY in "${PROJECT_MINGW64_COPY_DEPENDENCIES[@]}"; do
rsync -av --progress ${PROJECT_DEPENDENCY} "${PROJECT_DIST_DIR}/"
done

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" "$4" "$5"
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
function create_containers() {
BUILD_TYPE=$1
for FILE in "${PROJECT_SOURCE_DIR}/docker/${BUILD_TYPE}/*"; do
DOCKER_CREATE_ONLY=1
DOCKER_NAME=$(basename ${FILE})
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh"
done
}
create_containers aarch64
create_containers x86_64

13
src/scripts/deliver.cmd Normal file
View File

@@ -0,0 +1,13 @@
@echo off
setlocal
set DEST=%~1
set DIST=%~2
set ARG1=%~3
set ARG2=%~4
set ARG3=%~5
pushd "%~dp0%"
call mingw64 -no-start ./deliver.sh "%DEST%" "%DIST%" "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
popd

103
src/scripts/deliver.sh Normal file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env bash
DEST_DIR=$1
DIST_DIR=$2
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$3" "$4" "$5" "$6" "$7"
function error_exit() {
echo $1
exit $2
}
if [ ! -d "${PROJECT_DIST_DIR}" ]; then
error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2
fi
if [ "${DIST_DIR}" == "" ]; then
DIST_DIR="${PROJECT_DIST_DIR}"
fi
DIST_DIR=$(realpath "${DIST_DIR}")
if [ ! -d "${DIST_DIR}" ]; then
error_exit "dist directory not found: ${DIST_DIR}" 2
fi
if [ "${DEST_DIR}" == "" ]; then
error_exit "dest directory not set" 2
fi
if [ ! -d "${DEST_DIR}" ]; then
error_exit "dest directory not found: ${DEST_DIR}" 2
fi
pushd "${PROJECT_SOURCE_DIR}"
BRANCH=$(git branch --show-current)
RELEASE=$(grep PROJECT_RELEASE_ITER= ./config.sh | ${SED} s/PROJECT_RELEASE_ITER=//g)
popd
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] ||
[ "${BRANCH}" == "main" ] || [ "${BRANCH}" == "release" ] ||
[ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
DEST_DIR=${DEST_DIR}/${RELEASE}
elif [[ ${BRANCH} = *'-alpha-'* ]] || [[ ${BRANCH} = *'-beta-'* ]] ||
[[ ${BRANCH} = *'-rc-'* ]] || [[ ${BRANCH} = *'-release-'* ]]; then
DEST_DIR=${DEST_DIR}/nightly
else
error_exit "skipping ${PROJECT_FILE_PART}" 0
fi
pushd "${DIST_DIR}"
if [ ! -f "./${PROJECT_OUT_FILE}" ]; then
error_exit "failed to find file: ${PROJECT_OUT_FILE}" 1
fi
if [ ! -f "./${PROJECT_OUT_FILE}.sha256" ]; then
error_exit "failed to find file: ${PROJECT_OUT_FILE}.sha256" 1
fi
if [ "${PROJECT_PRIVATE_KEY}" != "" ] && [ ! -f "./${PROJECT_OUT_FILE}.sig" ]; then
error_exit "failed to find file: ${PROJECT_OUT_FILE}.sig" 1
fi
cp -f ./${PROJECT_OUT_FILE} ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}" 1
cp -f ./${PROJECT_OUT_FILE}.sha256 ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sha256" 1
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
cp -f ./${PROJECT_OUT_FILE}.sig ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sig" 1
fi
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ]; then
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}" 1
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" 1
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" 1
fi
fi
if [ "${PROJECT_IS_DARWIN}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ]; then
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" 1
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" 1
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" ${DEST_DIR} ||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" 1
fi
fi
popd
error_exit "delivered ${PROJECT_FILE_PART}" 0

View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ] &&
[ "${PROJECT_ENABLE_MULTIARCH_DOCKER}" == "1" ]; then
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
fi
if [ "${DOCKER_NAME}" == "mingw64" ]; then
APP_VERSION_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS}
IS_MINGW=1
IS_UNIX=1
else
IS_MINGW=0
IS_UNIX=0
fi
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
docker stop ${DOCKER_CONTAINER}
docker rm ${DOCKER_CONTAINER}
fi
pushd "${PROJECT_SOURCE_DIR}/support"
cp -f ${PROJECT_SOURCE_DIR}/docker/${PROJECT_BUILD_ARCH}/${DOCKER_NAME} Dockerfile
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
docker build ${APP_VERSION_BUILD_ARGS} \
--platform linux/arm64 \
--build-arg NUM_JOBS=${NUM_JOBS} \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
--build-arg USERNAME=$(id -un) \
-t ${DOCKER_TAG} . || exit 1
else
docker build ${APP_VERSION_BUILD_ARGS} \
--build-arg NUM_JOBS=${NUM_JOBS} \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
--build-arg USERNAME=$(id -un) \
-t ${DOCKER_TAG} . || exit 1
fi
rm Dockerfile
popd
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
docker run -td \
--env DEVELOPER_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY} \
--env DEVELOPER_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY} \
--env MY_NUM_JOBS=${NUM_JOBS} \
--name ${DOCKER_CONTAINER} \
-u $(id -u):$(id -g) \
-v /.ci/${PROJECT_NAME}:/.ci/${PROJECT_NAME}:ro \
-v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \
-w ${PROJECT_SOURCE_DIR} \
${DOCKER_TAG} || exit 1
if [ "${DOCKER_SHELL}" == "1" ]; then
docker exec -it ${DOCKER_CONTAINER} /bin/bash
else
docker exec \
${DOCKER_CONTAINER} \
/bin/bash -c \
"${PROJECT_SOURCE_DIR}/scripts/make_common.sh \"${PROJECT_BUILD_ARCH}\" \"${PROJECT_CMAKE_BUILD_TYPE}\" \"${PROJECT_BUILD_CLEAN}\" ${IS_MINGW} ${IS_UNIX}" || exit 1
fi
docker stop ${DOCKER_CONTAINER}
docker rm ${DOCKER_CONTAINER}
fi

441
src/scripts/env.sh Normal file
View File

@@ -0,0 +1,441 @@
#!/usr/bin/env bash
PROJECT_BUILD_ARCH=$1
PROJECT_CMAKE_BUILD_TYPE=$2
PROJECT_BUILD_CLEAN=$3
PROJECT_IS_MINGW=$4
PROJECT_IS_MINGW_UNIX=$5
DISABLE_CREATE_DIRS=$6
PROJECT_FLUTTER_BASE_HREF="/"
if [ "${PROJECT_IS_MINGW}" != "1" ]; then
PROJECT_IS_MINGW_UNIX=0
fi
PROJECT_SOURCE_DIR=${PROJECT_SCRIPTS_DIR}/..
PROJECT_SOURCE_DIR=$(realpath "${PROJECT_SOURCE_DIR}")
NUM_JOBS=${MY_NUM_JOBS}
if [[ -z "${NUM_JOBS}" ]]; then
NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null ||
getconf NPROCESSORS_ONLN 2>/dev/null || echo 1)
if [ "${NUM_JOBS}" -gt "4" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
pushd "${PROJECT_SOURCE_DIR}"
PROJECT_GIT_REV=$(git rev-parse --short HEAD)
. "${PROJECT_SCRIPTS_DIR}/versions.sh"
. "${PROJECT_SCRIPTS_DIR}/libraries.sh"
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then
export ${ENABLE_NAME}=ON
else
export ${ENABLE_NAME}=OFF
fi
export ${KEEP_NAME}=0
done
PROJECT_APP_LIST=()
PROJECT_CMAKE_OPTS=""
PROJECT_ENABLE_V2_ERRORS=OFF
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
PROJECT_IS_ALPINE=0
PROJECT_IS_ARM64=0
PROJECT_IS_DARWIN=0
PROJECT_MINGW64_COPY_DEPENDENCIES=()
PROJECT_MSYS2_PACKAGE_LIST=()
PROJECT_REQUIRE_ALPINE=OFF
PROJECT_STATIC_LINK=OFF
PROJECT_MACOS_BUNDLE_ID=""
PROJECT_MACOS_ICNS_NAME=""
if [ "$(uname -s)" == "Darwin" ]; then
PROJECT_IS_DARWIN=1
export SED=gsed
else
export SED=sed
fi
if [ "${PROJECT_BUILD_ARCH}" == "" ]; then
if [ "$(uname -m)" == "arm64" ]; then
PROJECT_BUILD_ARCH=aarch64
else
PROJECT_BUILD_ARCH=x86_64
fi
fi
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
PROJECT_IS_ARM64=1
fi
if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then
PROJECT_BUILD_ARCH2="x86-64"
else
PROJECT_BUILD_ARCH2="${PROJECT_BUILD_ARCH}"
fi
if [ -f /etc/alpine-release ]; then
PROJECT_IS_ALPINE=1
fi
if [ "${PROJECT_IS_MINGW}" == "" ]; then
PROJECT_IS_MINGW=0
fi
if [ "${PROJECT_IS_MINGW_UNIX}" == "" ]; then
PROJECT_IS_MINGW_UNIX=0
fi
. "${PROJECT_SOURCE_DIR}/config.sh"
if [ "${PROJECT_IS_MINGW}" == "0" ]; then
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
PROJECT_ENABLE_FLAC=ON
PROJECT_ENABLE_FONTCONFIG=ON
PROJECT_ENABLE_FREETYPE2=ON
PROJECT_ENABLE_OGG=ON
PROJECT_ENABLE_OPENAL=ON
PROJECT_ENABLE_VORBIS=ON
PROJECT_STATIC_LINK=OFF
fi
if [ "${PROJECT_ENABLE_CPP_HTTPLIB}" == "ON" ]; then
PROJECT_ENABLE_CURL=ON
PROJECT_ENABLE_OPENSSL=ON
fi
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
PROJECT_ENABLE_OPENSSL=ON
fi
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
PROJECT_ENABLE_BOOST=ON
PROJECT_ENABLE_SECP256K1=ON
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
PROJECT_ENABLE_FREETYPE2=ON
fi
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
PROJECT_ENABLE_CURL=ON
PROJECT_STATIC_LINK=OFF
fi
if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then
PROJECT_ENABLE_FMT=OFF
fi
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
PROJECT_ENABLE_OGG=ON
fi
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
PROJECT_ENABLE_LIBICONV=ON
PROJECT_ENABLE_OGG=ON
PROJECT_ENABLE_VORBIS=ON
fi
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
PROJECT_ENABLE_OPENSSL=ON
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ] ||
[ "${PROJECT_ENABLE_SFML}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] ||
[ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
PROJECT_ENABLE_LIBJPEG_TURBO=ON
PROJECT_ENABLE_LIBPNG=ON
fi
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
PROJECT_ENABLE_BACKWARD_CPP=OFF
fi
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
PROJECT_ENABLE_LIBICONV=ON
PROJECT_ENABLE_LIBTASN=ON
PROJECT_ENABLE_OPENSSL=ON
fi
if [ "${PROJECT_CMAKE_BUILD_TYPE}" == "" ]; then
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
fi
PROJECT_CMAKE_BUILD_TYPE_LOWER=$(echo "${PROJECT_CMAKE_BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
if [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "release" ]; then
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
elif [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "debug" ]; then
PROJECT_CMAKE_BUILD_TYPE=Debug
fi
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then
PROJECT_STATIC_LINK=OFF
fi
if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then
PROJECT_BUILD_SHARED_LIBS=OFF
PROJECT_ENABLE_BACKWARD_CPP=OFF
PROJECT_LINK_TYPE=static
if [ "${PROJECT_IS_DARWIN}" == "0" ]; then
PROJECT_REQUIRE_ALPINE=ON
else
PROJECT_REQUIRE_ALPINE=OFF
fi
else
PROJECT_BUILD_SHARED_LIBS=ON
PROJECT_LINK_TYPE=shared
PROJECT_REQUIRE_ALPINE=OFF
fi
PROJECT_BUILD_DIR=${PROJECT_SOURCE_DIR}/build/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
PROJECT_DIST_DIR=${PROJECT_SOURCE_DIR}/dist/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/win32
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/win32
elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/darwin
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/darwin
else
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/linux
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/linux
fi
if [ "${PROJECT_IS_ARM64}" == "1" ]; then
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/aarch64
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/aarch64
else
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/x86_64
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/x86_64
fi
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/${PROJECT_NAME}
PROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_BUILD_DIR}/deps
PROJECT_SUPPORT_DIR=${PROJECT_SOURCE_DIR}/support
PROJECT_3RD_PARTY_DIR=${PROJECT_SUPPORT_DIR}/3rd_party
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
OPENSSL_ROOT_DIR=/mingw64
else
OPENSSL_ROOT_DIR=${PROJECT_EXTERNAL_BUILD_ROOT}
fi
fi
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
PROJECT_TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake
PROJECT_TOOLCHAIN_FILE_MESON=/meson_cross_file.txt
PROJECT_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
fi
if [ -f "${PROJECT_SOURCE_DIR}/cmake/versions.cmake" ]; then
VERSIONS=($(${SED} -e s/\ /=/g -e s/set\(//g -e s/\)//g "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"))
PROJECT_MINGW64_DOCKER_BUILD_ARGS=()
for VERSION in "${VERSIONS[@]}"; do
LOOKUP_NAME=$(echo ${VERSION} | ${SED} s/_VERSION.*// | sed s/GTEST/TESTING/g)
ENABLE_NAME=PROJECT_ENABLE_${LOOKUP_NAME}
if [ "${!ENABLE_NAME}" != "OFF" ]; then
PROJECT_MINGW64_DOCKER_BUILD_ARGS+=("--build-arg ${VERSION}")
fi
done
PROJECT_MINGW64_DOCKER_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS[*]}
fi
PROJECT_CMAKE_OPTS="-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_GIT_REV=${PROJECT_GIT_REV} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_BUNDLE_ID=${PROJECT_MACOS_BUNDLE_ID} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_NAME=${PROJECT_NAME} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_NUM=${PROJECT_RELEASE_NUM} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON} ${PROJECT_CMAKE_OPTS}"
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
PROJECT_CMAKE_OPTS="${PROJECT_CMAKE_OPTS} -D${ENABLE_NAME}=${!ENABLE_NAME}"
done
PKG_CONFIG_PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/shared/pkgconfig:${PKG_CONFIG_PATH}"
if [ "${DISABLE_CREATE_DIRS}" != "1" ]; then
mkdir -p "${PROJECT_BUILD_DIR}"
mkdir -p "${PROJECT_DIST_DIR}"
fi
PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/bin:${PATH}"
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
PROJECT_OS=windows
elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then
PROJECT_OS=darwin
else
PROJECT_OS=linux
fi
PROJECT_FILE_PART=${PROJECT_NAME}_${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION}-${PROJECT_RELEASE_ITER}_${PROJECT_GIT_REV}_${PROJECT_OS}_${PROJECT_BUILD_ARCH2}
PROJECT_OUT_FILE=${PROJECT_FILE_PART}.tar.gz
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
PROJECT_APP_BINARY_EXT=.exe
fi
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then
MSYS=winsymlinks:nativestrict
fi
PROJECT_ENABLE_INNOSETUP=1
export MSYS
export NUM_JOBS
export OPENSSL_ROOT_DIR
export PATH
export PKG_CONFIG_PATH
export PROJECT_3RD_PARTY_DIR
export PROJECT_APP_BINARY_EXT
export PROJECT_APP_LIST
export PROJECT_BUILD_ARCH
export PROJECT_BUILD_ARCH2
export PROJECT_BUILD_CLEAN
export PROJECT_BUILD_DIR
export PROJECT_BUILD_SHARED_LIBS
export PROJECT_CMAKE_BUILD_TYPE
export PROJECT_CMAKE_BUILD_TYPE_LOWER
export PROJECT_CMAKE_OPTS
export PROJECT_COMPANY_NAME
export PROJECT_COPYRIGHT
export PROJECT_DESC
export PROJECT_DIST_DIR
export PROJECT_ENABLE_V2_ERRORS
export PROJECT_ENABLE_WIN32_LONG_PATH_NAMES
export PROJECT_FILE_PART
export PROJECT_FLUTTER_BASE_HREF
export PROJECT_GIT_REV
export PROJECT_IS_ALPINE
export PROJECT_IS_ARM64
export PROJECT_IS_DARWIN
export PROJECT_IS_MINGW
export PROJECT_IS_MINGW_UNIX
export PROJECT_LINK_TYPE
export PROJECT_MACOS_BUNDLE_ID
export PROJECT_MACOS_ICNS_NAME
export PROJECT_MAJOR_VERSION
export PROJECT_MINGW64_COPY_DEPENDENCIES
export PROJECT_MINGW64_DOCKER_BUILD_ARGS
export PROJECT_MINOR_VERSION
export PROJECT_MSYS2_PACKAGE_LIST
export PROJECT_NAME
export PROJECT_OS
export PROJECT_OUT_FILE
export PROJECT_PRIVATE_KEY
export PROJECT_PUBLIC_KEY
export PROJECT_RELEASE_ITER
export PROJECT_RELEASE_NUM
export PROJECT_REQUIRE_ALPINE
export PROJECT_REVISION_VERSION
export PROJECT_SOURCE_DIR
export PROJECT_STATIC_LINK
export PROJECT_SUPPORT_DIR
export PROJECT_TOOLCHAIN_FILE_CMAKE
export PROJECT_TOOLCHAIN_FILE_MESON
export PROJECT_URL
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
export ${ENABLE_NAME}
export ${KEEP_NAME}
done
echo "-=[Settings]=-"
echo " App binary extension: ${PROJECT_APP_BINARY_EXT}"
echo " App list: ${PROJECT_APP_LIST[*]}"
echo " Build arch: ${PROJECT_BUILD_ARCH}"
echo " Build arch2: ${PROJECT_BUILD_ARCH2}"
echo " Build clean: ${PROJECT_BUILD_CLEAN}"
echo " Build dir: ${PROJECT_BUILD_DIR}"
echo " Build shared libraries: ${PROJECT_BUILD_SHARED_LIBS}"
echo " CMake options: -G\"Unix Makefiles\" -DPROJECT_COMPANY_NAME=\"${PROJECT_COMPANY_NAME}\" -DPROJECT_COPYRIGHT=\"${PROJECT_COPYRIGHT}\" -DPROJECT_DESC=\"${PROJECT_DESC}\" -DPROJECT_URL=\"${PROJECT_URL}\" ${PROJECT_CMAKE_OPTS} "
echo " CMake toolchain file: ${PROJECT_TOOLCHAIN_FILE_CMAKE}"
echo " Cmake Build type: ${PROJECT_CMAKE_BUILD_TYPE}"
echo " Company name: ${PROJECT_COMPANY_NAME}"
echo " Copyright: ${PROJECT_COPYRIGHT}"
echo " Description: ${PROJECT_DESC}"
echo " Dist dir: ${PROJECT_DIST_DIR}"
echo " Enable v2 errors: ${PROJECT_ENABLE_V2_ERRORS}"
echo " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}"
echo " File part: ${PROJECT_FILE_PART}"
echo " Flutter base href: ${PROJECT_FLUTTER_BASE_HREF}"
echo " Is ARM64: ${PROJECT_IS_ARM64}"
echo " Is Alpine: ${PROJECT_IS_ALPINE}"
echo " Is Darwin: ${PROJECT_IS_DARWIN}"
echo " Is MINGW on Unix: ${PROJECT_IS_MINGW_UNIX}"
echo " Is MINGW: ${PROJECT_IS_MINGW}"
echo " Job count: ${NUM_JOBS}"
echo " Link type: ${PROJECT_LINK_TYPE}"
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
echo " Long path names: ${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}"
fi
if [ "${PROJECT_IS_DARWIN}" == "1" ]; then
echo " macOS bundle ID: ${PROJECT_MACOS_BUNDLE_ID}"
echo " macOS icns name: ${PROJECT_MACOS_ICNS_NAME}"
fi
echo " Meson toolchain file: ${PROJECT_TOOLCHAIN_FILE_MESON}"
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
echo " MinGW docker build args: ${PROJECT_MINGW64_DOCKER_BUILD_ARGS}"
fi
echo " OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}"
echo " Out file: ${PROJECT_OUT_FILE}"
echo " PATH: ${PATH}"
echo " PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}"
echo " Require Alpine: ${PROJECT_REQUIRE_ALPINE}"
echo " Static link: ${PROJECT_STATIC_LINK}"
echo " Support dir: ${PROJECT_SUPPORT_DIR}"
echo " Third-party dir: ${PROJECT_3RD_PARTY_DIR}"
echo " Unit testing enabled: ${PROJECT_ENABLE_TESTING}"
echo " URL: ${PROJECT_URL}"
echo "-=[Libraries]=-"
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
if [ "${!ENABLE_NAME}" == "ON" ] || [ "${!KEEP_NAME}" == "1" ]; then
echo " ${ENABLE_NAME}: Enable[${!ENABLE_NAME}] Keep[${!KEEP_NAME}]"
fi
done
popd

12
src/scripts/info.cmd Normal file
View File

@@ -0,0 +1,12 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call mingw64 -no-start ./info.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
popd

5
src/scripts/info.sh Normal file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1

146
src/scripts/libraries.sh Normal file
View File

@@ -0,0 +1,146 @@
#!/usr/bin/env bash
PROJECT_LIBRARIES=(
BACKWARD_CPP
BOOST
CLI11
CPP_HTTPLIB
CURL
CXXOPTS
DTL
FLAC
FMT
FONTCONFIG
FREETYPE2
FUSE
FZF
GTKMM
JSON
LIBBITCOIN_SYSTEM
LIBDSM
LIBEVENT
LIBICONV
LIBJPEG_TURBO
LIBPNG
LIBSODIUM
LIBTASN
NANA
NUSPELL
OGG
OPENAL
OPENSSL
PUGIXML
ROCKSDB
SAGO_PLATFORM_FOLDERS
SDL
SECP256K1
SFML
SPDLOG
SQLITE
STDUUID
TESTING
TPL
VLC
VORBIS
WINFSP
WXWIDGETS
)
declare -A PROJECT_CLEANUP
PROJECT_CLEANUP[BACKWARD_CPP]="include/backward.hpp:src/backward.cpp"
PROJECT_CLEANUP[BINUTILS]="3rd_party/mingw64/binutils-*"
PROJECT_CLEANUP[BOOST]="3rd_party/boost_*"
PROJECT_CLEANUP[CLI11]="3rd_party/CLI11-*"
PROJECT_CLEANUP[CPP_HTTPLIB]="3rd_party/cpp-httplib-*"
PROJECT_CLEANUP[CURL]="3rd_party/curl-*"
PROJECT_CLEANUP[CXXOPTS]="3rd_party/cxxopts-*"
PROJECT_CLEANUP[DTL]="3rd_party/dtl-*"
PROJECT_CLEANUP[EXPAT]="3rd_party/mingw64/expat-*"
PROJECT_CLEANUP[FLAC]="3rd_party/flac-*"
PROJECT_CLEANUP[FMT]="3rd_party/fmt-*"
PROJECT_CLEANUP[FONTCONFIG]="3rd_party/fontconfig-*"
PROJECT_CLEANUP[FREETYPE2]="3rd_party/freetype-*"
PROJECT_CLEANUP[FZF]="include/fzf.h:src/fzf.c"
PROJECT_CLEANUP[GCC]="3rd_party/mingw64/gcc-*"
PROJECT_CLEANUP[ICU]="3rd_party/mingw64/icu-release-*"
PROJECT_CLEANUP[JSON]="3rd_party/json-*"
PROJECT_CLEANUP[INNOSETUP]="3rd_party/mingw64/innosetup-*"
PROJECT_CLEANUP[LIBBITCOIN_SYSTEM]="3rd_party/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_*:3rd_party/libbitcoin-system-*"
PROJECT_CLEANUP[LIBBITCOIN_SYSTEM_ON]="3rd_party/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_*"
PROJECT_CLEANUP[LIBDSM]="3rd_party/libdsm-*:3rd_party/libdsm*"
PROJECT_CLEANUP[LIBEVENT]="3rd_party/libevent*"
PROJECT_CLEANUP[LIBICONV]="3rd_party/libiconv-*"
PROJECT_CLEANUP[LIBJPEG_TURBO]="3rd_party/libjpeg_turbo-*"
PROJECT_CLEANUP[LIBPNG]="3rd_party/libpng-*"
PROJECT_CLEANUP[LIBSODIUM]="3rd_party/libsodium-*:3rd_party/libsodium*"
PROJECT_CLEANUP[LIBTASN]="3rd_party/libtasn1-*"
PROJECT_CLEANUP[MINGW]="3rd_party/mingw64/mingw-w64-*"
PROJECT_CLEANUP[NANA]="3rd_party/nana-*:3rd_party/nana*"
PROJECT_CLEANUP[NUSPELL]="3rd_party/nuspell-*"
PROJECT_CLEANUP[OGG]="3rd_party/ogg-*"
PROJECT_CLEANUP[OPENAL]="3rd_party/openal-*"
PROJECT_CLEANUP[OPENSSL]="3rd_party/openssl-*"
PROJECT_CLEANUP[PKG_CONFIG]="3rd_party/mingw64/pkg-config-*"
PROJECT_CLEANUP[PUGIXML]="3rd_party/pugixml-*"
PROJECT_CLEANUP[ROCKSDB]="3rd_party/rocksdb-*"
PROJECT_CLEANUP[SAGO_PLATFORM_FOLDERS]="include/platform_folders.hpp:src/platform_folders.cpp"
PROJECT_CLEANUP[SDL]="3rd_party/sdl-*"
PROJECT_CLEANUP[SECP256K1]="3rd_party/secp256k1-*"
PROJECT_CLEANUP[SFML]="3rd_party/SFML-*:3rd_party/SFML*:include/RoundedRectangleShape.hpp:include/Text2.hpp:src/RoundedRectangleShape.cpp:src/Text2.cpp"
PROJECT_CLEANUP[SPDLOG]="3rd_party/spdlog-*"
PROJECT_CLEANUP[SQLITE]="3rd_party/sqlite*"
PROJECT_CLEANUP[STDUUID]="3rd_party/stduuid-*"
PROJECT_CLEANUP[TESTING]="3rd_party/googletest-*"
PROJECT_CLEANUP[TPL]="3rd_party/tiny-process-library*"
PROJECT_CLEANUP[VLC]="3rd_party/vlc*"
PROJECT_CLEANUP[VORBIS]="3rd_party/vorbis-*:3rd_party/vorbis*"
PROJECT_CLEANUP[WINFSP]="3rd_party/winfsp-*"
PROJECT_CLEANUP[WXWIDGETS]="3rd_party/wxWidgets-*"
PROJECT_CLEANUP[ZLIB]="3rd_party/mingw64/zlib-*"
export PROJECT_CLEANUP
declare -A PROJECT_DOWNLOADS
PROJECT_DOWNLOADS[BINUTILS]="https://ftp.gnu.org/gnu/binutils/binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;3rd_party/mingw64"
PROJECT_DOWNLOADS[BOOST2]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST2_MAJOR]}.${PROJECT_VERSIONS[BOOST2_MINOR]}.${PROJECT_VERSIONS[BOOST2_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[BOOST]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST_MAJOR]}.${PROJECT_VERSIONS[BOOST_MINOR]}.${PROJECT_VERSIONS[BOOST_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[CLI11]="https://github.com/CLIUtils/CLI11/archive/refs/tags/v${PROJECT_VERSIONS[CLI11]}.tar.gz;CLI11-${PROJECT_VERSIONS[CLI11]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[CPP_HTTPLIB]="https://github.com/yhirose/cpp-httplib/archive/refs/tags/v${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;cpp-httplib-${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[CURL]="https://github.com/curl/curl/archive/refs/tags/curl-${PROJECT_VERSIONS[CURL2]}.tar.gz;curl-${PROJECT_VERSIONS[CURL]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[CXXOPTS]="https://github.com/jarro2783/cxxopts/archive/refs/tags/v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;cxxopts-v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[EXPAT]="https://github.com/libexpat/libexpat/archive/refs/tags/R_${PROJECT_VERSIONS[EXPAT2]}.tar.gz;expat-${PROJECT_VERSIONS[EXPAT]}.tar.gz;3rd_party/mingw64"
PROJECT_DOWNLOADS[FLAC]="https://github.com/xiph/flac/archive/refs/tags/${PROJECT_VERSIONS[FLAC]}.tar.gz;flac-${PROJECT_VERSIONS[FLAC]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[FMT]="https://github.com/fmtlib/fmt/archive/refs/tags/${PROJECT_VERSIONS[FMT]}.tar.gz;fmt-${PROJECT_VERSIONS[FMT]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[FONTCONFIG]="https://www.freedesktop.org/software/fontconfig/release/fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;3rd_party"
PROJECT_DOWNLOADS[FREETYPE2]="https://download.savannah.gnu.org/releases/freetype/freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[GCC]="https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-${PROJECT_VERSIONS[GCC]}/gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;3rd_party/mingw64"
PROJECT_DOWNLOADS[GTEST]="https://github.com/google/googletest/archive/refs/tags/v${PROJECT_VERSIONS[GTEST]}.tar.gz;googletest-${PROJECT_VERSIONS[GTEST]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[ICU]="https://github.com/unicode-org/icu/archive/refs/tags/release-${PROJECT_VERSIONS[ICU]}.tar.gz;icu-release-${PROJECT_VERSIONS[ICU]}.tar.gz;3rd_party/mingw64"
PROJECT_DOWNLOADS[JSON]="https://github.com/nlohmann/json/archive/refs/tags/v${PROJECT_VERSIONS[JSON]}.tar.gz;json-${PROJECT_VERSIONS[JSON]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[INNOSETUP]="https://files.jrsoftware.org/is/6/innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;3rd_party/mingw64"
PROJECT_DOWNLOADS[WINFSP]="https://github.com/winfsp/winfsp/releases/download/v${PROJECT_VERSIONS[WINFSP2]}/winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;3rd_party"
PROJECT_DOWNLOADS[LIBDSM]="https://github.com/videolabs/libdsm/archive/refs/tags/v${PROJECT_VERSIONS[LIBDSM]}.tar.gz;libdsm-${PROJECT_VERSIONS[LIBDSM]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBEVENT]="https://github.com/libevent/libevent/archive/refs/tags/release-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;libevent-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBICONV]="https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBJPEG_TURBO]="https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;libjpeg_turbo-${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBPNG]="https://github.com/pnggroup/libpng/archive/refs/tags/v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;libpng-v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBSODIUM]="https://github.com/jedisct1/libsodium/archive/refs/tags/${PROJECT_VERSIONS[LIBSODIUM]}-RELEASE.tar.gz;libsodium-${PROJECT_VERSIONS[LIBSODIUM]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[LIBTASN]="https://ftp.gnu.org/gnu/libtasn1/libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[MINGW]="https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;;mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;3rd_party/mingw64"
PROJECT_DOWNLOADS[NANA]="https://github.com/cnjinhao/nana/archive/refs/tags/v${PROJECT_VERSIONS[NANA]}.tar.gz;nana-v${PROJECT_VERSIONS[NANA]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[NUSPELL]="https://github.com/nuspell/nuspell/archive/refs/tags/v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;nuspell-v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[OGG]="https://github.com/xiph/ogg/releases/download/v${PROJECT_VERSIONS[OGG]}/libogg-${PROJECT_VERSIONS[OGG]}.tar.gz;ogg-v${PROJECT_VERSIONS[OGG]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[OPENAL]="https://github.com/kcat/openal-soft/archive/refs/tags/${PROJECT_VERSIONS[OPENAL]}.tar.gz;openal-${PROJECT_VERSIONS[OPENAL]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[OPENSSL]="https://github.com/openssl/openssl/releases/download/openssl-${PROJECT_VERSIONS[OPENSSL]}/openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[PKG_CONFIG]="https://pkgconfig.freedesktop.org/releases/pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;3rd_party/mingw64"
PROJECT_DOWNLOADS[PUGIXML]="https://github.com/zeux/pugixml/releases/download/v${PROJECT_VERSIONS[PUGIXML]}/pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[ROCKSDB]="https://github.com/facebook/rocksdb/archive/refs/tags/v${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;rocksdb-${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[SDL]="https://github.com/libsdl-org/SDL/archive/refs/tags/release-${PROJECT_VERSIONS[SDL]}.tar.gz;sdl-${PROJECT_VERSIONS[SDL]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[SECP256K1]="https://github.com/libbitcoin/secp256k1/archive/refs/tags/v${PROJECT_VERSIONS[SECP256K1]}.tar.gz;secp256k1-${PROJECT_VERSIONS[SECP256K1]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[SFML]="https://github.com/SFML/SFML/archive/refs/tags/${PROJECT_VERSIONS[SFML]}.tar.gz;SFML-${PROJECT_VERSIONS[SFML]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[SPDLOG]="https://github.com/gabime/spdlog/archive/refs/tags/v${PROJECT_VERSIONS[SPDLOG]}.tar.gz;spdlog-${PROJECT_VERSIONS[SPDLOG]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[SQLITE]="https://www.sqlite.org/2025/sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;3rd_party"
PROJECT_DOWNLOADS[STDUUID]="https://github.com/mariusbancila/stduuid/archive/refs/tags/v${PROJECT_VERSIONS[STDUUID]}.tar.gz;stduuid-${PROJECT_VERSIONS[STDUUID]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[VORBIS]="https://github.com/xiph/vorbis/archive/refs/tags/v${PROJECT_VERSIONS[VORBIS]}.tar.gz;vorbis-v${PROJECT_VERSIONS[VORBIS]}.tar.gz;3rd_party"
PROJECT_DOWNLOADS[WXWIDGETS]="https://github.com/wxWidgets/wxWidgets/releases/download/v${PROJECT_VERSIONS[WXWIDGETS]}/wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;3rd_party"
PROJECT_DOWNLOADS[ZLIB]="https://github.com/madler/zlib/archive/refs/tags/v${PROJECT_VERSIONS[ZLIB]}.tar.gz;zlib-${PROJECT_VERSIONS[ZLIB]}.tar.gz;3rd_party/mingw64"
export PROJECT_DOWNLOADS

121
src/scripts/make_common.sh Normal file
View File

@@ -0,0 +1,121 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
mkdir -p "${PROJECT_BUILD_DIR}/build"
if [ -d "${PROJECT_DIST_DIR}" ]; then
rm -rf "${PROJECT_DIST_DIR}"
mkdir -p "${PROJECT_DIST_DIR}"
fi
if [ -f "${PROJECT_SOURCE_DIR}/pre_build.sh" ]; then
"${PROJECT_SOURCE_DIR}/pre_build.sh"
fi
ln -sf "${PROJECT_BUILD_DIR}/build/compile_commands.json" "${PROJECT_SOURCE_DIR}/compile_commands.json"
pushd "${PROJECT_BUILD_DIR}"
export CMAKE_BUILD_PARALLEL_LEVEL=${NUM_JOBS}
cmake "${PROJECT_SOURCE_DIR}" \
-G"Unix Makefiles" \
-DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \
-DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \
-DPROJECT_DESC="${PROJECT_DESC}" \
-DPROJECT_INTERFACE=1 \
-DPROJECT_URL="${PROJECT_URL}" \
${PROJECT_CMAKE_OPTS} || exit 1
if [ "${PROJECT_BUILD_CLEAN}" == "clean" ]; then
make clean
pushd build
make clean
popd
fi
make || exit 1
pushd build
make -j${CMAKE_BUILD_PARALLEL_LEVEL} || exit 1
popd
popd
if [ -f "${PROJECT_SOURCE_DIR}/LICENSE.md" ]; then
rsync -av --progress "${PROJECT_SOURCE_DIR}/LICENSE.md" "${PROJECT_DIST_DIR}/"
fi
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/ "${PROJECT_DIST_DIR}/"
pushd "${PROJECT_DIST_DIR}"
rm lib64
ln -sf lib lib64
popd
fi
for APP in ${PROJECT_APP_LIST[@]}; do
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ]; then
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
else
rm "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
mv "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/bin/cacert.pem"
fi
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/bin/"
if [ "${PROJECT_IS_DARWIN}" == "1" ]; then
cat <<EOF >>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
#!/bin/sh
PROJECT_SCRIPTS_DIR=\$(realpath "\$0")
PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}")
DYLD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${DYLD_LIBRARY_PATH}"
export DYLD_LIBRARY_PATH
\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$*
EOF
else
cat <<EOF >>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
#!/bin/sh
PROJECT_SCRIPTS_DIR=\$(realpath "\$0")
PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}")
export LD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${LD_LIBRARY_PATH}"
\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$*
EOF
fi
chmod +x "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
fi
elif [ ! -d "${PROJECT_BUILD_DIR}/build/${APP}.app" ]; then
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
fi
done
if [ -d "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app" ]; then
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app/" \
"${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/"
fi
if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then
if [ -d "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app" ]; then
rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
"${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/Resources/web/"
cp "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/MacOS/cacert.pem"
else
rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
"${PROJECT_DIST_DIR}/web/"
fi
fi
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
. "${PROJECT_SCRIPTS_DIR}/copy_mingw64_deps.sh" "$1" "$2" "$3" "$4" "$5"
fi
if [ -f "${PROJECT_SOURCE_DIR}/post_build.sh" ]; then
"${PROJECT_SOURCE_DIR}/post_build.sh"
fi
. "${PROJECT_SCRIPTS_DIR}/make_package.sh" "$1" "$2" "$3" "$4" "$5"

View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then
if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_IS_MINGW}" == "0" || "${PROJECT_IS_MINGW_UNIX}" == "1") ]]; then
FLUTTER_CONTAINER_NAME="${PROJECT_NAME}_flutter"
FLUTTER_TAG_NAME="${PROJECT_NAME}:flutter"
docker stop ${FLUTTER_CONTAINER_NAME}
docker rm ${FLUTTER_CONTAINER_NAME}
docker build "${PROJECT_SOURCE_DIR}/docker/x86_64/" \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
-t ${FLUTTER_TAG_NAME} \
-f "${PROJECT_SOURCE_DIR}/docker/x86_64/flutter" || exit 1
docker run -td \
--name ${FLUTTER_CONTAINER_NAME} \
-u $(id -u):$(id -g) \
-v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \
-w ${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME} \
${FLUTTER_TAG_NAME} || exit 1
docker exec \
${FLUTTER_CONTAINER_NAME} \
/bin/bash -c \
"flutter clean;flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF}" || exit 1
docker stop ${FLUTTER_CONTAINER_NAME}
docker rm ${FLUTTER_CONTAINER_NAME}
else
pushd "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}"
export MSYS_NO_PATHCONV=1
flutter clean
flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF} || exit 1
export MSYS_NO_PATHCONV=0
popd
fi
fi

View File

@@ -0,0 +1,11 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call mingw64 -no-start ./make_package.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
popd

153
src/scripts/make_package.sh Normal file
View File

@@ -0,0 +1,153 @@
#!/usr/bin/env bash
TEMP_DIR=$(mktemp -d)
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
function error_exit() {
echo $1
rm -rf ${TEMP_DIR}
exit $2
}
function cleanup_packages() {
local SOURCE_FILE=$1
pushd "${PROJECT_DIST_DIR}"
if [ -f "${SOURCE_FILE}" ]; then
rm -f "${SOURCE_FILE}" || error_exit "failed to delete file: ${SOURCE_FILE}" 1
fi
if [ -f "${SOURCE_FILE}.sha256" ]; then
rm -f "${SOURCE_FILE}.sha256" || error_exit "failed to delete file: ${SOURCE_FILE}.sha256" 1
fi
if [ -f "${SOURCE_FILE}.sig" ]; then
rm -f "${SOURCE_FILE}.sig" || error_exit "failed to delete file: ${SOURCE_FILE}.sig" 1
fi
popd
}
function create_file_validations() {
local SOURCE_FILE=$1
sha256sum ${SOURCE_FILE} >${SOURCE_FILE}.sha256 || error_exit "failed to create sha256 for file: ${SOURCE_FILE}" 1
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
openssl dgst -sha256 -sign "${PROJECT_PRIVATE_KEY}" -out "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to create signature for file: ${SOURCE_FILE}" 1
openssl dgst -sha256 -verify "${PROJECT_PUBLIC_KEY}" -signature "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to validate signature for file: ${SOURCE_FILE}" 1
fi
}
if [ ! -d "${PROJECT_DIST_DIR}" ]; then
error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2
fi
cleanup_packages "${PROJECT_OUT_FILE}"
cleanup_packages "${PROJECT_FILE_PART}_setup.exe"
cleanup_packages "${PROJECT_FILE_PART}.dmg"
rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1
for APP in ${PROJECT_APP_LIST[@]}; do
if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app" ]; then
strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app/Contents/MacOS/${APP}${PROJECT_APP_BINARY_EXT}"
elif [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
strip "${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}"
else
strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}"
fi
done
pushd "${TEMP_DIR}/${PROJECT_NAME}/"
IFS=$'\n'
set -f
FILE_LIST=$(find . -type f -not -path "*/.app/*")
for FILE in ${FILE_LIST}; do
create_file_validations "${FILE}"
done
unset IFS
set +f
popd
pushd "${PROJECT_DIST_DIR}"
tar cvzf "${PROJECT_OUT_FILE}" -C ${TEMP_DIR} . || error_exit "failed to create archive: ${PROJECT_OUT_FILE}" 1
create_file_validations "${PROJECT_OUT_FILE}"
popd
if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app" ]; then
APP_SRC="${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app"
DMG_ROOT="${TEMP_DIR}/dmgroot"
mkdir -p "${DMG_ROOT}" || error_exit "failed to create dmgroot" 1
INSTALLER="${DMG_ROOT}/Install ${PROJECT_NAME}.command"
INSTALLER_SRC="${PROJECT_SOURCE_DIR}/${PROJECT_NAME}/Install ${PROJECT_NAME}.command"
if [ -f "${INSTALLER_SRC}" ]; then
HIDDEN_DIR="${DMG_ROOT}/.payload"
mkdir -p "${HIDDEN_DIR}" || error_exit "failed to create payload dir" 1
APP_DEST_DIR="${HIDDEN_DIR}"
else
APP_DEST_DIR="${DMG_ROOT}"
fi
rsync -a "${APP_SRC}" "${APP_DEST_DIR}/" || error_exit "failed to stage app bundle" 1
if [ -f "${INSTALLER_SRC}" ]; then
chflags hidden "${HIDDEN_DIR}" "${HIDDEN_DIR}/${PROJECT_NAME}.app" 2>/dev/null || true
fi
ln -s /Applications "${DMG_ROOT}/Applications" 2>/dev/null || true
if [ -f "${INSTALLER_SRC}" ]; then
cp -f "${INSTALLER_SRC}" "${INSTALLER}" || error_exit "failed to copy install command" 1
chmod +x "${INSTALLER}" || error_exit "failed to chmod install command" 1
SAFE_PREFIX="$(printf '%s' "${PROJECT_MACOS_BUNDLE_ID}" | sed -e 's/[\/&]/\\&/g')"
/usr/bin/sed -i '' -e "s|^LABEL_PREFIX=.*$|LABEL_PREFIX=\"${SAFE_PREFIX}\"|g" "${INSTALLER}"
LABEL_ASSIGNED="$(/usr/bin/awk -F= '/^LABEL_PREFIX=/{sub(/^[^=]*=/,""); gsub(/^"|"$/,""); print; exit}' "${INSTALLER}")"
if ! /usr/bin/awk -v v="${LABEL_ASSIGNED}" '
BEGIN {
if (length(v) == 0) exit 1;
if (v == "__LABEL_PREFIX__") exit 1;
if (v !~ /^[A-Za-z0-9._-]+$/) exit 1;
if (v !~ /\./) exit 1;
exit 0;
}'; then
error_exit "DMG build abort: invalid LABEL_PREFIX written to installer (value: \"${LABEL_ASSIGNED}\"). Check PROJECT_MACOS_BUNDLE_ID and sed substitution." 1
fi
fi
DMG_OUT="${PROJECT_FILE_PART}.dmg"
hdiutil create \
-volname "${PROJECT_NAME}" \
-fs HFS+ \
-srcfolder "${DMG_ROOT}" \
-ov -format UDZO \
"${PROJECT_DIST_DIR}/${DMG_OUT}" || error_exit "hdiutil failed" 1
pushd "${PROJECT_DIST_DIR}"
create_file_validations "${DMG_OUT}"
popd
elif [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" ]; then
cp -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" "${TEMP_DIR}/${PROJECT_NAME}.iss"
rsync -av --progress --delete ${PROJECT_SOURCE_DIR}/support/3rd_party/*.msi ${TEMP_DIR}/3rd_party/
pushd "${TEMP_DIR}"
if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
wine64 "c:/Program Files (x86)/Inno Setup 6/iscc.exe" "${PROJECT_NAME}.iss" || exit 1
else
iscc "${PROJECT_NAME}.iss" || exit 1
fi
pushd "Output"
create_file_validations "${PROJECT_FILE_PART}_setup.exe"
cp -f * "${PROJECT_DIST_DIR}/"
popd
popd
fi
error_exit "created package ${PROJECT_FILE_PART}" 0

22
src/scripts/make_unix.sh Normal file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 0 0
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 0 0
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
"${PROJECT_SOURCE_DIR}/scripts/make_flutter.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1
if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_REQUIRE_ALPINE}" == "ON" || "${PROJECT_IS_ARM64}" == "1") ]]; then
DOCKER_NAME=alpine
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1
else
"${PROJECT_SOURCE_DIR}/scripts/make_common.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1
fi

View File

@@ -0,0 +1,18 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call setup_msys2.cmd "%ARG1%" "%ARG2%" "%ARG3%"
if exist "cleanup.cmd" (
call cleanup.cmd "%ARG1%" "%ARG2%" "%ARG3%" 1 0
del cleanup.*
)
call mingw64 -no-start ./make_flutter.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
call mingw64 -no-start ./make_common.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
popd

16
src/scripts/make_win32.sh Normal file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 1 1
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 1 1
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
DOCKER_NAME=mingw64
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1

View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
DOCKER_NAME=$1
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$2" "$3" "$4" "$5" "$6" 1 1>/dev/null 2>&1
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$2" "$3" "$4" "$5" "$6"
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}_shell
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
DOCKER_SHELL=1
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1

12
src/scripts/run_tests.cmd Normal file
View File

@@ -0,0 +1,12 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call mingw64 -no-start ./run_tests.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
popd

19
src/scripts/run_tests.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 0
pushd "${PROJECT_DIST_DIR}"
if [ -e "./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" ]; then
for APP in ${PROJECT_APP_LIST[@]}; do
if [[ "$APP" == *_test ]]; then
if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
wine64 "${PROJECT_DIST_DIR}/${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1
else
"./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1
fi
fi
done
fi
popd

View File

@@ -0,0 +1,12 @@
@echo off
setlocal
set ARG1=%~1
set ARG2=%~2
set ARG3=%~3
pushd "%~dp0%"
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
popd

187
src/scripts/setup_msys2.sh Normal file
View File

@@ -0,0 +1,187 @@
#!/usr/bin/env bash
PROJECT_MSYS2_PACKAGE_LIST=()
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-autotools
mingw64/mingw-w64-x86_64-clang-tools-extra
mingw64/mingw-w64-x86_64-cmake
mingw64/mingw-w64-x86_64-curl
mingw64/mingw-w64-x86_64-diffutils
mingw64/mingw-w64-x86_64-gcc
mingw64/mingw-w64-x86_64-gdb
mingw64/mingw-w64-x86_64-icu
mingw64/mingw-w64-x86_64-make
mingw64/mingw-w64-x86_64-mesa
mingw64/mingw-w64-x86_64-meson
mingw64/mingw-w64-x86_64-meson-python
mingw64/mingw-w64-x86_64-ninja
mingw64/mingw-w64-x86_64-python
mingw64/mingw-w64-x86_64-python-mako
mingw64/mingw-w64-x86_64-toolchain
mingw64/mingw-w64-x86_64-wget
mingw64/mingw-w64-x86_64-zlib
msys/bison
msys/flex
msys/git
msys/patch
msys/rsync
make
)
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
yes | pacman -Ry mingw64/mingw-w64-x86_64-boost
else
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-boost
)
fi
fi
if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-cli11
)
fi
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-flac
)
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-fontconfig
)
fi
if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-freetype
)
fi
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libdsm
)
fi
if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libevent
)
fi
if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libiconv
)
fi
if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libjpeg-turbo
)
fi
if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libpng
)
fi
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libsodium
)
fi
if [ "${PROJECT_ENABLE_LIBTASN}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libtasn1
)
fi
if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-nana
)
fi
if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-nuspell
)
fi
if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libogg
)
fi
if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-openal
)
fi
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-openssl
)
fi
if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-pugixml
)
fi
if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-SDL2
)
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-sfml
)
fi
if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-sqlite3
)
fi
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-gtest
)
fi
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-libvorbis
)
fi
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-wxwidgets3.2-msw
)
fi
pacman -Sqyuu --noconfirm &&
pacman -S --noconfirm --needed --disable-download-timeout msys2-keyring &&
pacman -S --noconfirm --needed --disable-download-timeout \
${PROJECT_MSYS2_PACKAGE_LIST[@]}

59
src/scripts/versions.sh Normal file
View File

@@ -0,0 +1,59 @@
#!/usr/bin/env bash
declare -A PROJECT_VERSIONS
PROJECT_VERSIONS[BINUTILS]="2.44"
PROJECT_VERSIONS[BOOST2_MAJOR]="1"
PROJECT_VERSIONS[BOOST2_MINOR]="76"
PROJECT_VERSIONS[BOOST2_PATCH]="0"
PROJECT_VERSIONS[BOOST_MAJOR]="1"
PROJECT_VERSIONS[BOOST_MINOR]="89"
PROJECT_VERSIONS[BOOST_PATCH]="0"
PROJECT_VERSIONS[CLI11]="2.5.0"
PROJECT_VERSIONS[CPP_HTTPLIB]="0.26.0"
PROJECT_VERSIONS[CURL]="8.16.0"
PROJECT_VERSIONS[CURL2]="8_16_0"
PROJECT_VERSIONS[CXXOPTS]="3.3.1"
PROJECT_VERSIONS[DTL]="2.01"
PROJECT_VERSIONS[EXPAT]="2.7.1"
PROJECT_VERSIONS[EXPAT2]="2_7_1"
PROJECT_VERSIONS[FLAC]="1.5.0"
PROJECT_VERSIONS[FMT]="12.0.0"
PROJECT_VERSIONS[FONTCONFIG]="2.16.0"
PROJECT_VERSIONS[FREETYPE2]="2.14.1"
PROJECT_VERSIONS[GCC]="15.2.0"
PROJECT_VERSIONS[GTEST]="1.17.0"
PROJECT_VERSIONS[GTKMM]="3.0"
PROJECT_VERSIONS[ICU]="76-1"
PROJECT_VERSIONS[INNOSETUP]="6.5.4"
PROJECT_VERSIONS[JSON]="3.12.0"
PROJECT_VERSIONS[LIBBITCOIN_SYSTEM]="3.8.0"
PROJECT_VERSIONS[LIBDSM]="0.4.3"
PROJECT_VERSIONS[LIBEVENT]="2.1.12"
PROJECT_VERSIONS[LIBICONV]="1.18"
PROJECT_VERSIONS[LIBJPEG_TURBO]="3.1.2"
PROJECT_VERSIONS[LIBPNG]="1.6.50"
PROJECT_VERSIONS[LIBSODIUM]="1.0.20"
PROJECT_VERSIONS[LIBTASN]="4.19.0"
PROJECT_VERSIONS[MINGW]="13.0.0"
PROJECT_VERSIONS[NANA]="1.7.4"
PROJECT_VERSIONS[NUSPELL]="5.1.6"
PROJECT_VERSIONS[OGG]="1.3.6"
PROJECT_VERSIONS[OPENAL]="1.24.3"
PROJECT_VERSIONS[OPENSSL]="3.6.0"
PROJECT_VERSIONS[PKG_CONFIG]="0.29.2"
PROJECT_VERSIONS[PUGIXML]="1.15"
PROJECT_VERSIONS[ROCKSDB]="10.5.1"
PROJECT_VERSIONS[SDL]="2.32.6"
PROJECT_VERSIONS[SECP256K1]="0.1.0.20"
PROJECT_VERSIONS[SFML]="2.6.2"
PROJECT_VERSIONS[SPDLOG]="1.15.3"
PROJECT_VERSIONS[SQLITE]="3500400"
PROJECT_VERSIONS[SQLITE2]="3.50.4"
PROJECT_VERSIONS[STDUUID]="1.2.3"
PROJECT_VERSIONS[VLC]="3.0"
PROJECT_VERSIONS[VORBIS]="1.3.7"
PROJECT_VERSIONS[WINFSP]="2.1.25156"
PROJECT_VERSIONS[WINFSP2]="2.1"
PROJECT_VERSIONS[WXWIDGETS]="3.3.1"
PROJECT_VERSIONS[ZLIB]="1.3.1"
export PROJECT_VERSIONS