v2.0.2-rc (#27)
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit

## v2.0.2-rc

### BREAKING CHANGES

* Refactored `config.json` - will need to verify configuration settings prior to mounting

### Issues

* \#12 \[Unit Test\] Complete all providers unit tests
* \#14 \[Unit Test\] SQLite mini-ORM unit tests and cleanup
* \#16 Add support for bucket name in Sia provider
* \#17 Update to common c++ build system
  * A single 64-bit Linux Jenkins server is used to build all Linux and Windows versions
  * All dependency sources are now included
  * MSVC is no longer supported
  * MSYS2 is required for building Windows binaries on Windows
  * OS X support is temporarily disabled
* \#19 \[bug\] Rename file is broken for files that are existing
* \#23 \[bug\] Incorrect file size displayed while upload is pending
* \#24 RocksDB implementations should be transactional
* \#25 Writes should block when maximum cache size is reached
* \#26 Complete ring buffer and direct download support

### Changes from v2.0.1-rc

* Ability to choose between RocksDB and SQLite databases
* Added direct reads and implemented download fallback
* Corrected file times on S3 and Sia providers
* Corrected handling of `chown()` and `chmod()`
* Fixed erroneous download of chunks after resize

Reviewed-on: #27
This commit is contained in:
2024-12-28 15:56:40 -06:00
parent 1b8de3b097
commit 8dd46b8ad8
790 changed files with 49979 additions and 417734 deletions

206
scripts/copy_mingw64_deps.sh Executable file
View File

@ -0,0 +1,206 @@
#!/bin/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/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.0/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

@ -1,30 +1,25 @@
#!/bin/bash
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
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
pushd "${CURRENT_DIR}/.."
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() {
TYPE=$1
BUILD_TYPE=$1
for FILE in ./docker/${TYPE}/*; do
DISTRONAME=$(basename ${FILE})
CONTAINER_NAME=repertory_${DISTRONAME}
TAG_NAME=repertory:${DISTRONAME}
echo Creating Container [${CONTAINER_NAME}]
for FILE in "${PROJECT_SOURCE_DIR}/docker/${BUILD_TYPE}/*"; do
DOCKER_CREATE_ONLY=1
DOCKER_NAME=$(basename ${FILE})
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
docker build -t ${TAG_NAME} - < docker/${TYPE}/${DISTRONAME}
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh"
done
}
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
create_containers aarch64
create_containers 64_bit
popd
popd
create_containers x86_64

13
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

69
scripts/deliver.sh Executable file
View File

@ -0,0 +1,69 @@
#!/bin/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 set\(PROJECT_RELEASE_ITER ./config.sh | sed s/\)//g | awk '{print $2}')
popd
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
DEST_DIR=${DEST_DIR}/${RELEASE}
else
DEST_DIR=${DEST_DIR}/nightly
fi
echo ${DEST_DIR}
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
popd
error_exit "delivered ${PROJECT_FILE_PART}" 0

60
scripts/docker_common.sh Executable file
View File

@ -0,0 +1,60 @@
#!/bin/bash
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; 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} \
-t ${DOCKER_TAG} . || exit 1
else
docker build ${APP_VERSION_BUILD_ARGS} \
--build-arg NUM_JOBS=${NUM_JOBS} \
-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

391
scripts/env.sh Executable file
View File

@ -0,0 +1,391 @@
#!/bin/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_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}/options.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_WIN32_LONG_PATH_NAMES=OFF
PROJECT_IS_ALPINE=0
PROJECT_IS_ARM64=0
PROJECT_MINGW64_COPY_DEPENDENCIES=()
PROJECT_MSYS2_PACKAGE_LIST=()
PROJECT_REQUIRE_ALPINE=OFF
PROJECT_STATIC_LINK=OFF
if [ "${PROJECT_BUILD_ARCH}" == "" ]; then
PROJECT_BUILD_ARCH=x86_64
elif [ "${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
PROJECT_REQUIRE_ALPINE=ON
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
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_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_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_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
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
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_WIN32_LONG_PATH_NAMES
export PROJECT_FILE_PART
export PROJECT_GIT_REV
export PROJECT_IS_ALPINE
export PROJECT_IS_ARM64
export PROJECT_IS_MINGW
export PROJECT_IS_MINGW_UNIX
export PROJECT_LINK_TYPE
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 " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}"
echo " File part: ${PROJECT_FILE_PART}"
echo " Is ARM64: ${PROJECT_IS_ARM64}"
echo " Is Alpine: ${PROJECT_IS_ALPINE}"
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
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
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
scripts/info.sh Executable file
View File

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

89
scripts/make_common.sh Executable file
View File

@ -0,0 +1,89 @@
#!/bin/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}"
cmake "${PROJECT_SOURCE_DIR}" \
-G"Unix Makefiles" \
-DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \
-DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \
-DPROJECT_DESC="${PROJECT_DESC}" \
-DPROJECT_URL="${PROJECT_URL}" \
${PROJECT_CMAKE_OPTS} || exit 1
if [ "${PROJECT_BUILD_CLEAN}" == "clean" ]; then
make clean
pushd build
make clean
popd
fi
make -j${NUM_JOBS} || exit 1
pushd build
make -j${NUM_JOBS} || exit 1
popd
popd
if [ "${PROJECT_IS_MINGW}" != "1" ] && [ "${PROJECT_REQUIRE_ALPINE}" == "ON" ]; then
rsync -av --progress /usr/share/icu/74.2/ "${PROJECT_DIST_DIR}/icu/"
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
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/"
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
chmod +x "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
else
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
fi
else
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
fi
done
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

@ -1,5 +0,0 @@
#!/bin/bash
pushd "$(dirname "$0")/.."
scripts/make_unix_docker.sh ${1} "${2}" 1
popd

11
scripts/make_package.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 ./make_package.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
popd

View File

@ -1,127 +1,66 @@
#!/bin/bash
PLATFORM_NAME=$1
SIGNING_FOLDER=$2
BINARY_FOLDER=$3
SOURCE_FOLDER=$4
OUTPUT_FOLDER=$5
ARM64=$6
TEMP_DIR=$(mktemp -d)
LINUX_PLATFORM=alpine
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
exit_script() {
echo "$1"
cd "${CURRENT_DIR}"
exit 1
function error_exit() {
echo $1
rm -rf ${TEMP_DIR}
exit $2
}
if [ -z "${PLATFORM_NAME}" ]; then
exit_script "'PLATFORM_NAME' is not set (arg1)"
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
if [ -z "${SIGNING_FOLDER}" ]; then
exit_script "'SIGNING_FOLDER' is not set (arg2)"
pushd "${PROJECT_DIST_DIR}"
if [ -f "${PROJECT_OUT_FILE}" ]; then
rm -f "${PROJECT_OUT_FILE}" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}" 1
fi
if [ -z "${BINARY_FOLDER}" ]; then
exit_script "'BINARY_FOLDER' is not set (arg3)"
if [ -f "${PROJECT_OUT_FILE}.sha256" ]; then
rm -f "${PROJECT_OUT_FILE}.sha256" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}.sha256" 1
fi
if [ -z "${SOURCE_FOLDER}" ]; then
exit_script "'SOURCE_FOLDER' is not set (arg4)"
if [ -f "${PROJECT_OUT_FILE}.sig" ]; then
rm -f "${PROJECT_OUT_FILE}.sig" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}.sig" 1
fi
if [ -z "${OUTPUT_FOLDER}" ]; then
exit_script "'OUTPUT_FOLDER' is not set (arg5)"
fi
if [ "${PLATFORM_NAME}" == "darwin" ]; then
SHA256_EXEC="shasum -a 256 -b"
else
SHA256_EXEC="sha256sum -b"
fi
pushd "${SOURCE_FOLDER}"
BRANCH=$(git branch --show-current)
RELEASE=$(grep set\(REPERTORY_RELEASE_ITER ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
OUTPUT_FOLDER=${OUTPUT_FOLDER}/${RELEASE}
else
OUTPUT_FOLDER=${OUTPUT_FOLDER}/nightly
fi
GIT_REV=$(git rev-parse --short HEAD)
REPERTORY_VERSION=$(grep set\(REPERTORY_MAJOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_MINOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_REV ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}-${RELEASE}
popd
REPERTORY_BINARY=repertory
if [ "${ARM64}" == "1" ]; then
if [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_arm64.zip
rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1
for APP in ${PROJECT_APP_LIST[@]}; do
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
strip ${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_arm64.zip
strip ${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}
fi
elif [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_amd64.zip
elif [ "${PLATFORM_NAME}" == "mingw64" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_windows_amd64.zip
REPERTORY_BINARY=${REPERTORY_BINARY}.exe
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_amd64.zip
fi
ZIP_FILE_PATH=./${ZIP_FILE_NAME}
done
create_hash_and_sig() {
${SHA256_EXEC} ./${1} > ${1}.sha256 || exit_script "SHA-256 failed for $1"
openssl dgst -sha256 -sign "${SIGNING_FOLDER}/blockstorage_dev_private.pem" -out ${1}.sig $1 || exit_script "Create signature failed for $1"
openssl dgst -sha256 -verify "${SIGNING_FOLDER}/blockstorage_dev_public.pem" -signature ${1}.sig $1 || exit_script "Verify signature failed for $1"
}
clean_directory() {
rm -f "${ZIP_FILE_PATH}"
rm -f "${ZIP_FILE_PATH}.sha256"
rm -f "${ZIP_FILE_PATH}.sig"
rm -f "cacert.pem.sha256"
rm -f "cacert.pem.sig"
rm -f "${REPERTORY_BINARY}.sha256"
rm -f "${REPERTORY_BINARY}.sig"
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
rm -f "winfsp-x64.dll.sha256"
rm -f "winfsp-x64.dll.sig"
fi
}
pushd "${BINARY_FOLDER}"
clean_directory
strip ./${REPERTORY_BINARY}
create_hash_and_sig ${REPERTORY_BINARY}
create_hash_and_sig cacert.pem
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
create_hash_and_sig winfsp-x64.dll
fi
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
winfsp-x64.dll winfsp-x64.dll.sha256 winfsp-x64.dll.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
else
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
fi
create_hash_and_sig ${ZIP_FILE_NAME}
cp -f "${ZIP_FILE_PATH}" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME} failed"
cp -f "${ZIP_FILE_PATH}.sha256" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sha256 failed"
cp -f "${ZIP_FILE_PATH}.sig" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sig failed"
clean_directory
pushd "${TEMP_DIR}/${PROJECT_NAME}/"
IFS=$'\n'
set -f
FILE_LIST=$(find . -type f)
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
error_exit "created package ${PROJECT_FILE_PART}" 0

View File

@ -1,23 +1,20 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
BUILD_ARCH=$3
PROJECT_SCRIPTS_DIR=$(realpath "$0")
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 0 0
SOURCE_DIR=$(dirname "$0")/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
NAME=alpine
if [ -z "${BUILD_ARCH}" ]; then
BUILD_ARCH=64_bit
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 0 0
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
ln -sf ${SOURCE_DIR}/build/compile_commands.json ${SOURCE_DIR}/compile_commands.json
if [ "${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}
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} &&
docker run -td -u $(id -u):$(id -g) --device /dev/fuse --cap-add SYS_ADMIN --name repertory_${NAME} --env MY_NUM_JOBS=${MY_NUM_JOBS} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} &&
docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_unix_docker.sh ${BUILD_TYPE} ${BUILD_CLEAN}"
docker stop repertory_${NAME}
docker rm repertory_${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

@ -1,70 +0,0 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
IS_MINGW=$3
if [ "${IS_MINGW}" == "1" ]; then
BUILD_ROOT=build3
else
BUILD_ROOT=build
fi
BUILD_FOLDER=$(echo "${BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
if [ "${BUILD_FOLDER}" == "release" ]; then
BUILD_TYPE=Release
fi
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 "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
echo "Job count: ${NUM_JOBS}"
pushd "$(dirname "$0")"
mkdir -p ../${BUILD_ROOT}/${BUILD_FOLDER}
pushd ../${BUILD_ROOT}/${BUILD_FOLDER}
if [ "${IS_MINGW}" == "1" ]; then
TOOLCHAIN=$(realpath ../../cmake/mingw-w64-x86_64.cmake)
EXE_EXT=.exe
CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
fi
cmake ../.. ${CMAKE_ADDITIONAL_OPTS} \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DREPERTORY_ENABLE_S3=ON \
-DREPERTORY_ENABLE_S3_TESTING=ON || exit 1
pushd ..
ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi
popd
if [ "${BUILD_CLEAN}" == "clean" ]; then
make clean
fi
make -j${NUM_JOBS} || exit 1
popd
pushd ../${BUILD_ROOT}
ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi
popd
ln -sf ../3rd_party/cacert.pem ../${BUILD_ROOT}/cacert.pem
popd

16
scripts/make_win32.cmd Normal file
View File

@ -0,0 +1,16 @@
@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_common.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
popd

16
scripts/make_win32.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/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

34
scripts/options.sh Executable file
View File

@ -0,0 +1,34 @@
#!/bin/bash
PROJECT_LIBRARIES=(
BOOST
CPP_HTTPLIB
CURL
FUSE
JSON
LIBSODIUM
OPENSSL
PUGIXML
ROCKSDB
SPDLOG
SQLITE
STDUUID
TESTING
WINFSP
)
declare -A PROJECT_CLEANUP
PROJECT_CLEANUP[BOOST]="3rd_party/boost_*"
PROJECT_CLEANUP[CPP_HTTPLIB]="3rd_party/cpp-httplib-*"
PROJECT_CLEANUP[CURL]="3rd_party/curl-*"
PROJECT_CLEANUP[JSON]="3rd_party/json-*"
PROJECT_CLEANUP[LIBBITCOIN_SYSTEM_ON]="3rd_party/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_*"
PROJECT_CLEANUP[LIBSODIUM]="3rd_party/libsodium-*:3rd_party/libsodium*"
PROJECT_CLEANUP[OPENSSL]="3rd_party/openssl-*"
PROJECT_CLEANUP[PUGIXML]="3rd_party/pugixml-*"
PROJECT_CLEANUP[ROCKSDB]="3rd_party/rocksdb-*"
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[WINFSP]="3rd_party/winfsp-*"

View File

@ -1,25 +1,18 @@
#!/bin/bash
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
DOCKER_NAME=$1
pushd "${CURRENT_DIR}/.."
NAME=$1
TYPE=$2
if [ -z "$NAME" ]; then
echo "Name not set"
else
if [ -z "${TYPE}" ]; then
TYPE=64_bit
fi
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
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build -t repertory:${NAME} - < docker/${TYPE}/${NAME} &&
docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name repertory_${NAME} -v $(pwd):/mnt repertory:${NAME} &&
docker exec -it repertory_${NAME} /bin/bash
docker stop repertory_${NAME}
docker rm repertory_${NAME}
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$2" "$3" "$4" "$5" "$6"
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
fi
popd
popd
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
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
scripts/run_tests.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/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

12
scripts/setup_msys2.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 ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
popd

View File

@ -1,11 +1,187 @@
#!/bin/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 msys2-keyring &&
pacman -S --noconfirm --needed --disable-download-timeout msys2-keyring &&
pacman -S --noconfirm --needed --disable-download-timeout \
mingw64/mingw-w64-x86_64-cmake \
mingw64/mingw-w64-x86_64-gcc \
mingw64/mingw-w64-x86_64-gdb \
mingw64/mingw-w64-x86_64-make \
mingw64/mingw-w64-x86_64-toolchain \
msys/git \
msys/mercurial \
make
${PROJECT_MSYS2_PACKAGE_LIST[@]}

55
scripts/versions.sh Executable file
View File

@ -0,0 +1,55 @@
#!/bin/bash
declare -A PROJECT_VERSIONS
PROJECT_VERSIONS[BINUTILS]="2.41"
PROJECT_VERSIONS[BOOST2_MAJOR]="1"
PROJECT_VERSIONS[BOOST2_MINOR]="76"
PROJECT_VERSIONS[BOOST2_PATCH]="0"
PROJECT_VERSIONS[BOOST_MAJOR]="1"
PROJECT_VERSIONS[BOOST_MINOR]="87"
PROJECT_VERSIONS[BOOST_PATCH]="0"
PROJECT_VERSIONS[CPP_HTTPLIB]="0.18.1"
PROJECT_VERSIONS[CURL]="8.11.0"
PROJECT_VERSIONS[CURL2]="8_11_0"
PROJECT_VERSIONS[EXPAT]="2.6.4"
PROJECT_VERSIONS[EXPAT2]="2_6_4"
PROJECT_VERSIONS[GCC]="14.2.0"
PROJECT_VERSIONS[GTEST]="1.15.2"
PROJECT_VERSIONS[ICU]="75-1"
PROJECT_VERSIONS[JSON]="3.11.3"
PROJECT_VERSIONS[LIBSODIUM]="1.0.20"
PROJECT_VERSIONS[MESA]="23.3.3"
PROJECT_VERSIONS[MINGW]="11.0.1"
PROJECT_VERSIONS[OPENSSL]="3.4.0"
PROJECT_VERSIONS[PKG_CONFIG]="0.29.2"
PROJECT_VERSIONS[PUGIXML]="1.14"
PROJECT_VERSIONS[ROCKSDB]="9.7.4"
PROJECT_VERSIONS[SPDLOG]="1.15.0"
PROJECT_VERSIONS[SQLITE]="3460100"
PROJECT_VERSIONS[SQLITE2]="3.46.1"
PROJECT_VERSIONS[STDUUID]="1.2.3"
PROJECT_VERSIONS[ZLIB]="1.3.1"
export PROJECT_VERSIONS
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[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[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[GCC]="https://ftp.gnu.org/gnu/gcc/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[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[MINGW]="https://phoenixnap.dl.sourceforge.net/project/mingw-w64/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[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[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/2024/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[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