From 0db9052c3f59ab634c704429caa4e5410afae3be Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 27 Aug 2024 19:26:25 -0500 Subject: [PATCH] updated build system --- cmake/functions.cmake | 18 +++++- cmake/hashes.cmake | 73 +++++++++++---------- cmake/libraries/pugixml.cmake | 2 +- cmake/versions.cmake | 95 ++++++++++++++-------------- docker/x86_64/mingw64 | 2 +- scripts/copy_mingw64_deps.sh | 89 ++++++++++++++------------ scripts/env.sh | 40 ++++++------ scripts/setup_msys2.sh | 38 +++++++++-- support/include/utils/config.hpp | 4 ++ support/include/utils/path.hpp | 35 +++++++++- support/src/utils/file_directory.cpp | 2 +- support/src/utils/file_file.cpp | 2 +- support/test/src/utils/path_test.cpp | 33 +++++++++- 13 files changed, 274 insertions(+), 159 deletions(-) diff --git a/cmake/functions.cmake b/cmake/functions.cmake index 5da081f2..2bcedf85 100644 --- a/cmake/functions.cmake +++ b/cmake/functions.cmake @@ -26,7 +26,7 @@ function(set_common_target_options name) endif() endfunction(set_common_target_options) -function(add_project_executable2 name dependencies libraries headers sources) +function(add_project_executable2 name dependencies libraries headers sources is_win32) if (PROJECT_WINDOWS_VERSION_RC) list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC}) endif() @@ -52,6 +52,10 @@ function(add_project_executable2 name dependencies libraries headers sources) if(PROJECT_ENABLE_SDL AND PROJECT_IS_MINGW) target_link_libraries(${name} PRIVATE SDL2::SDL2main) endif () + + if (is_win32 AND PROJECT_IS_MINGW) + target_link_options(${name} PRIVATE -mwindows) + endif() endfunction(add_project_executable2) function(add_project_executable name dependencies libraries) @@ -69,7 +73,15 @@ function(add_project_executable name dependencies libraries) ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx ) - add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}") + if(PROJECT_ENABLE_WXWIDGETS OR PROJECT_ENABLE_SDL OR PROJECT_ENABLE_SFML OR PROJECT_ENABLE_NANA) + set(IS_WIN32 ON) + endif() + + add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" "${IS_WIN32}") + + if(PROJECT_ENABLE_WXWIDGETS) + target_link_libraries(${name} PRIVATE ${wxWidgets_LIBRARIES}) + endif() endfunction(add_project_executable) function(add_project_library name dependencies libraries additional_sources) @@ -121,7 +133,7 @@ function(add_project_test_executable name dependencies libraries) ${additional_sources} ) - add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}") + add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" OFF) target_compile_definitions(${name} PRIVATE -DPROJECT_TESTING) diff --git a/cmake/hashes.cmake b/cmake/hashes.cmake index fb02bce5..6547c33c 100644 --- a/cmake/hashes.cmake +++ b/cmake/hashes.cmake @@ -1,42 +1,41 @@ - -set(FMT_HASH 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f) -set(CPP_HTTPLIB_HASH c1742fc7179aaae2a67ad9bba0740b7e9ffaf4f5e62feef53101ecdef1478716) -set(OGG_HASH 0eb4b4b9420a0f51db142ba3f9c64b333f826532dc0f48c6410ae51f4799b664) -set(ROCKSDB_HASH b20780586d3df4a3c5bcbde341a2c1946b03d18237960bda5bc5e9538f42af40) -set(WXWIDGETS_HASH 0ad86a3ad3e2e519b6a705248fc9226e3a09bbf069c6c692a02acf7c2d1c6b51) -set(FONTCONFIG_HASH f5f359d6332861bd497570848fcb42520964a9e83d5e3abe397b6b6db9bcaaf4) -set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1) -set(FREETYPE2_HASH 5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747) -set(NUSPELL_HASH 5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a) -set(LIBEVENT_HASH 7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24) -set(CXXOPTS_HASH 841f49f2e045b9c6365997c2a8fbf76e6f215042dda4511a5bb04bc5ebc7f88a) -set(SFML_HASH 82535db9e57105d4f3a8aedabd138631defaedc593cab589c924b7d7a11ffb9d) -set(ICU_HASH 925e6b4b8cf8856e0ac214f6f34e30dee63b7bb7a50460ab4603950eff48f89e) -set(SECP256K1_HASH 61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701) -set(LIBDSM_HASH 747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a) -set(GTEST_HASH 7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926) -set(FLAC_HASH 0a4bb82a30609b606650d538a804a7b40205366ce8fc98871b0ecf3fbb0611ee) -set(CURL_HASH d714818f6ac41ae9154850158fed44b7a87650a6d52f83d3bcb9aa527be354d7) -set(SQLITE_HASH 77823cb110929c2bcb0f5d48e4833b5c59a8a6e40cdea3936b99e199dbbe5784) -set(CLI11_HASH f2d893a65c3b1324c50d4e682c0cdc021dd0477ae2c048544f39eed6654b699a) -set(LIBPNG_HASH fecc95b46cf05e8e3fc8a414750e0ba5aad00d89e9fdf175e94ff041caf1a03a) -set(MINGW_HASH 3f66bce069ee8bed7439a1a13da7cb91a5e67ea6170f21317ac7f5794625ee10) -set(LIBTASN_HASH 1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a) -set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c) -set(PUGIXML_HASH 2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015) -set(OPENSSL_HASH 777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e) -set(SPDLOG_HASH 1586508029a7d0670dfcb2d97575dcdc242d3868a259742b69f100801ab4e16b) -set(OPENAL_HASH dfddf3a1f61059853c625b7bb03de8433b455f2f79f89548cbcbd5edca3d4a4a) -set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293) set(BINUTILS_HASH ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450) -set(SDL_HASH 254a767aa486fa6308d4473159c1f23c794610be775d63e98084111d96814b85) +set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca) +set(BOOST_HASH be0d91732d5b0cc6fbb275c7939974457e79b54d6f07ce2e3dfdd68bef883b0b) +set(CLI11_HASH f2d893a65c3b1324c50d4e682c0cdc021dd0477ae2c048544f39eed6654b699a) +set(CPP_HTTPLIB_HASH c1742fc7179aaae2a67ad9bba0740b7e9ffaf4f5e62feef53101ecdef1478716) +set(CURL_HASH d714818f6ac41ae9154850158fed44b7a87650a6d52f83d3bcb9aa527be354d7) +set(CXXOPTS_HASH 841f49f2e045b9c6365997c2a8fbf76e6f215042dda4511a5bb04bc5ebc7f88a) +set(EXPAT_HASH fbd032683370d761ba68dba2566d3280a154f5290634172d60a79b24d366d9dc) +set(FLAC_HASH 0a4bb82a30609b606650d538a804a7b40205366ce8fc98871b0ecf3fbb0611ee) +set(FMT_HASH 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f) +set(FONTCONFIG_HASH f5f359d6332861bd497570848fcb42520964a9e83d5e3abe397b6b6db9bcaaf4) +set(FREETYPE2_HASH 5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747) +set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293) +set(GTEST_HASH 7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926) +set(ICU_HASH 925e6b4b8cf8856e0ac214f6f34e30dee63b7bb7a50460ab4603950eff48f89e) +set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406) +set(LIBDSM_HASH 747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a) +set(LIBEVENT_HASH 7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24) set(LIBICONV_HASH 8f74213b56238c85a50a5329f77e06198771e70dd9a739779f4c02f65d971313) set(LIBJPEG_TURBO_HASH a649205a90e39a548863a3614a9576a3fb4465f8e8e66d54999f127957c25b21) -set(VORBIS_HASH 270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13) -set(EXPAT_HASH fbd032683370d761ba68dba2566d3280a154f5290634172d60a79b24d366d9dc) -set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3) -set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406) +set(LIBPNG_HASH fecc95b46cf05e8e3fc8a414750e0ba5aad00d89e9fdf175e94ff041caf1a03a) +set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1) +set(LIBTASN_HASH 1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a) +set(MINGW_HASH 3f66bce069ee8bed7439a1a13da7cb91a5e67ea6170f21317ac7f5794625ee10) set(NANA_HASH 56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb) +set(NUSPELL_HASH 5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a) +set(OGG_HASH 0eb4b4b9420a0f51db142ba3f9c64b333f826532dc0f48c6410ae51f4799b664) +set(OPENAL_HASH dfddf3a1f61059853c625b7bb03de8433b455f2f79f89548cbcbd5edca3d4a4a) +set(OPENSSL_HASH 777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e) set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591) -set(BOOST_HASH be0d91732d5b0cc6fbb275c7939974457e79b54d6f07ce2e3dfdd68bef883b0b) -set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca) +set(PUGIXML_HASH 2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015) +set(ROCKSDB_HASH b20780586d3df4a3c5bcbde341a2c1946b03d18237960bda5bc5e9538f42af40) +set(SDL_HASH 254a767aa486fa6308d4473159c1f23c794610be775d63e98084111d96814b85) +set(SECP256K1_HASH 61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701) +set(SFML_HASH 82535db9e57105d4f3a8aedabd138631defaedc593cab589c924b7d7a11ffb9d) +set(SPDLOG_HASH 1586508029a7d0670dfcb2d97575dcdc242d3868a259742b69f100801ab4e16b) +set(SQLITE_HASH 77823cb110929c2bcb0f5d48e4833b5c59a8a6e40cdea3936b99e199dbbe5784) +set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3) +set(VORBIS_HASH 270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13) +set(WXWIDGETS_HASH 0ad86a3ad3e2e519b6a705248fc9226e3a09bbf069c6c692a02acf7c2d1c6b51) +set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c) diff --git a/cmake/libraries/pugixml.cmake b/cmake/libraries/pugixml.cmake index 88105416..6427f11a 100644 --- a/cmake/libraries/pugixml.cmake +++ b/cmake/libraries/pugixml.cmake @@ -11,7 +11,7 @@ if(PROJECT_ENABLE_PUGIXML) else() link_libraries(pugixml::pugixml) endif() - elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + elseif(NOT PROJECT_IS_MINGW) ExternalProject_Add(pugixml_project PREFIX external URL ${PROJECT_3RD_PARTY_DIR}/pugixml-${PUGIXML_VERSION}.tar.gz diff --git a/cmake/versions.cmake b/cmake/versions.cmake index f5910a0f..cd3ac409 100644 --- a/cmake/versions.cmake +++ b/cmake/versions.cmake @@ -1,54 +1,53 @@ - -set(FMT_VERSION 11.0.2) -set(CPP_HTTPLIB_VERSION 0.16.3) -set(OGG_VERSION 1.3.5) -set(ROCKSDB_VERSION 9.5.2) -set(WXWIDGETS_VERSION 3.2.5) -set(FONTCONFIG_VERSION 2.15.0) -set(BOOST2_MINOR_VERSION 76) -set(LIBSODIUM_VERSION 1.0.20) -set(BOOST_PATCH_VERSION 0) -set(FREETYPE2_VERSION 2.13.3) -set(NUSPELL_VERSION 5.1.6) -set(EXPAT2_VERSION 2_6_2) -set(LIBEVENT_VERSION 2.1.12) -set(CXXOPTS_VERSION 3.2.1) -set(SFML_VERSION 2.6.1) -set(VLC_VERSION 3.0) -set(ICU_VERSION 75-1) -set(SECP256K1_VERSION 0.1.0.20) -set(BOOST_MAJOR_VERSION 1) -set(LIBDSM_VERSION 0.4.3) -set(GTEST_VERSION 1.15.2) -set(BOOST2_PATCH_VERSION 0) -set(FLAC_VERSION 1.4.3) -set(CURL_VERSION 8.9.1) -set(SQLITE_VERSION 3460100) -set(CLI11_VERSION 2.4.2) -set(LIBPNG_VERSION 1.6.43) -set(LIBBITCOIN_SYSTEM_VERSION 3.8.0) -set(MINGW_VERSION 11.0.1) -set(LIBTASN_VERSION 4.19.0) -set(ZLIB_VERSION 1.3.1) -set(PUGIXML_VERSION 1.14) -set(OPENSSL_VERSION 3.3.1) -set(SQLITE2_VERSION 3.46.1) -set(SPDLOG_VERSION 1.14.1) -set(OPENAL_VERSION 1.23.1) -set(GTKMM_VERSION 3.0) -set(GCC_VERSION 14.2.0) set(BINUTILS_VERSION 2.41) -set(SDL_VERSION 2.30.6) +set(BOOST2_MAJOR_VERSION 1) +set(BOOST2_MINOR_VERSION 76) +set(BOOST2_PATCH_VERSION 0) +set(BOOST_MAJOR_VERSION 1) +set(BOOST_MINOR_VERSION 85) +set(BOOST_PATCH_VERSION 0) +set(CLI11_VERSION 2.4.2) +set(CPP_HTTPLIB_VERSION 0.16.3) set(CURL2_VERSION 8_9_1) +set(CURL_VERSION 8.9.1) +set(CXXOPTS_VERSION 3.2.1) +set(DTL_VERSION 2.01) +set(EXPAT2_VERSION 2_6_2) +set(EXPAT_VERSION 2.6.2) +set(FLAC_VERSION 1.4.3) +set(FMT_VERSION 11.0.2) +set(FONTCONFIG_VERSION 2.15.0) +set(FREETYPE2_VERSION 2.13.3) +set(GCC_VERSION 14.2.0) +set(GTEST_VERSION 1.15.2) +set(GTKMM_VERSION 3.0) +set(ICU_VERSION 75-1) +set(JSON_VERSION 3.11.3) +set(LIBBITCOIN_SYSTEM_VERSION 3.8.0) +set(LIBDSM_VERSION 0.4.3) +set(LIBEVENT_VERSION 2.1.12) set(LIBICONV_VERSION 1.17) set(LIBJPEG_TURBO_VERSION 3.0.3) -set(VORBIS_VERSION 1.3.7) -set(DTL_VERSION 2.01) -set(EXPAT_VERSION 2.6.2) -set(BOOST_MINOR_VERSION 85) -set(STDUUID_VERSION 1.2.3) -set(BOOST2_MAJOR_VERSION 1) -set(JSON_VERSION 3.11.3) -set(NANA_VERSION 1.7.4) +set(LIBPNG_VERSION 1.6.43) +set(LIBSODIUM_VERSION 1.0.20) +set(LIBTASN_VERSION 4.19.0) set(MESA_VERSION 23.3.3) +set(MINGW_VERSION 11.0.1) +set(NANA_VERSION 1.7.4) +set(NUSPELL_VERSION 5.1.6) +set(OGG_VERSION 1.3.5) +set(OPENAL_VERSION 1.23.1) +set(OPENSSL_VERSION 3.3.1) set(PKG_CONFIG_VERSION 0.29.2) +set(PUGIXML_VERSION 1.14) +set(ROCKSDB_VERSION 9.5.2) +set(SDL_VERSION 2.30.6) +set(SECP256K1_VERSION 0.1.0.20) +set(SFML_VERSION 2.6.1) +set(SPDLOG_VERSION 1.14.1) +set(SQLITE2_VERSION 3.46.1) +set(SQLITE_VERSION 3460100) +set(STDUUID_VERSION 1.2.3) +set(VLC_VERSION 3.0) +set(VORBIS_VERSION 1.3.7) +set(WXWIDGETS_VERSION 3.2.5) +set(ZLIB_VERSION 1.3.1) diff --git a/docker/x86_64/mingw64 b/docker/x86_64/mingw64 index f48607d5..dbfb5ac0 100644 --- a/docker/x86_64/mingw64 +++ b/docker/x86_64/mingw64 @@ -1092,7 +1092,7 @@ ARG LIBDSM_VERSION ENV MY_LIBDSM_VERSION=${LIBDSM_VERSION} RUN if [ -f "/3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz" ]; then \ cd /3rd_party && sha256sum -c ./libdsm-${MY_LIBDSM_VERSION}.tar.gz.sha256 && cd - \ - && tar xvxf /3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz \ + && tar xvzf /3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz \ && cd libdsm-${MY_LIBDSM_VERSION} \ && /3rd_party/libdsm_patch.sh /3rd_party . \ && meson setup \ diff --git a/scripts/copy_mingw64_deps.sh b/scripts/copy_mingw64_deps.sh index d1ceb849..5a1b0671 100755 --- a/scripts/copy_mingw64_deps.sh +++ b/scripts/copy_mingw64_deps.sh @@ -41,19 +41,47 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th 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 @@ -61,24 +89,12 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th ) fi - if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libopenal*.dll) + if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll) fi - if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdsm.dll) - fi - - if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libiconv.dll) - fi - - if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpng*.dll) - fi - - if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnana*.dll) + if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/SDL2*.dll) fi if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then @@ -104,6 +120,24 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libvorbis*.dll) fi + if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.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/libva*.dll + /mingw64/bin/opengl*.dll + /mingw64/bin/vulkan*.dll + ) + fi + if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then if [ "${PROJECT_ENABLE_BACKWARD_CPP}" == "ON" ]; then PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/msvcr90.dll) @@ -117,14 +151,6 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcurl*.dll) fi - if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnuspell*.dll) - fi - - if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll) - fi - if [ "${PROJECT_ENABLE_ROCKSDB}" == "ON" ]; then PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/librocksdb*.dll) fi @@ -133,10 +159,6 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsecp256k1*.dll) fi - if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/SDL*.dll) - fi - if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libspdlog*.dll) fi @@ -144,17 +166,6 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; th if [ "${PROJECT_ENABLE_TPL}" == "ON" ]; then PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiny-process*.dll) fi - - if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll) - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll) - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.dll) - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxm*.dll) - fi - fi - - if [ "${PROJECT_ENABLE_SFML}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then - PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/opengl*.dll) fi rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/bin/*.dll "${PROJECT_DIST_DIR}/" diff --git a/scripts/env.sh b/scripts/env.sh index d45d898a..b65d2e0b 100755 --- a/scripts/env.sh +++ b/scripts/env.sh @@ -129,7 +129,9 @@ if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then PROJECT_ENABLE_OPENSSL=ON fi -if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then +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 @@ -138,8 +140,10 @@ if [ "${PROJECT_IS_MINGW}" == "1" ]; then PROJECT_ENABLE_BACKWARD_CPP=OFF fi -if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then - MSYS=winsymlinks:nativestrict +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 @@ -153,10 +157,17 @@ 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 @@ -181,8 +192,8 @@ else 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 @@ -200,23 +211,6 @@ if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; th PROJECT_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}" fi -if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then - PROJECT_BUILD_SHARED_LIBS=OFF - PROJECT_ENABLE_BACKWARD_CPP=OFF -else - PROJECT_BUILD_SHARED_LIBS=ON -fi - -if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then - PROJECT_ENABLE_LIBICONV=ON - PROJECT_ENABLE_LIBTASN=ON - if [ "${PROJECT_IS_MINGW}" == "1" ]; then - PROJECT_KEEP_OPENSSL=1 - else - PROJECT_ENABLE_OPENSSL=ON - fi -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")) @@ -285,6 +279,10 @@ 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 diff --git a/scripts/setup_msys2.sh b/scripts/setup_msys2.sh index 287b5d0b..7a91c90d 100755 --- a/scripts/setup_msys2.sh +++ b/scripts/setup_msys2.sh @@ -73,15 +73,15 @@ if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then ) fi -if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then +if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then PROJECT_MSYS2_PACKAGE_LIST+=( - mingw64/mingw-w64-x86_64-libiconv + mingw64/mingw-w64-x86_64-libevent ) fi -if [ "${PROJECT_ENABLE_LIBTASN}" == "ON" ]; then +if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then PROJECT_MSYS2_PACKAGE_LIST+=( - mingw64/mingw-w64-x86_64-libtasn1 + mingw64/mingw-w64-x86_64-libiconv ) fi @@ -103,12 +103,24 @@ if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then ) 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 @@ -127,6 +139,18 @@ if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then ) 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 @@ -151,6 +175,12 @@ if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then ) 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 \ diff --git a/support/include/utils/config.hpp b/support/include/utils/config.hpp index 1e25cc91..eee595c0 100644 --- a/support/include/utils/config.hpp +++ b/support/include/utils/config.hpp @@ -326,7 +326,11 @@ using vlc_string_t = std::unique_ptr; #endif // defined(PROJECT_ENABLE_BOOST) #if defined(PROJECT_ENABLE_CLI11) +#if defined(PROJECT_IS_MINGW) && !defined(PROJECT_IS_MINGW_UNIX) +#include "CLI/CLI.hpp" +#else // !defined(PROJECT_IS_MINGW) || defined(PROJECT_IS_MINGW_UNIX) #include "CLI11.hpp" +#endif // defined(PROJECT_IS_MINGW) && !defined(PROJECT_IS_MINGW_UNIX) #endif // defined(PROJECT_ENABLE_CLI11) #if defined(PROJECT_ENABLE_CPP_HTTPLIB) diff --git a/support/include/utils/path.hpp b/support/include/utils/path.hpp index 56622da7..3ac31d24 100644 --- a/support/include/utils/path.hpp +++ b/support/include/utils/path.hpp @@ -43,6 +43,8 @@ inline constexpr const std::string_view directory_seperator{backslash}; inline constexpr const std::wstring_view directory_seperator_w{backslash_w}; inline constexpr const std::string_view not_directory_seperator{slash}; inline constexpr const std::wstring_view not_directory_seperator_w{slash_w}; +inline constexpr const std::string_view unc_notation{"\\\\"}; +inline constexpr const std::wstring_view unc_notation_w{L"\\\\"}; #else // !defined(_WIN32) inline constexpr const std::string_view directory_seperator{slash}; inline constexpr const std::wstring_view directory_seperator_w{slash_w}; @@ -177,6 +179,24 @@ get_slash() -> std::basic_string_view { return slash_w; } +#if defined(_WIN32) +template +[[nodiscard]] inline constexpr auto +get_unc_notation() -> std::basic_string_view; + +template <> +[[nodiscard]] inline constexpr auto +get_unc_notation() -> std::basic_string_view { + return unc_notation; +} + +template <> +[[nodiscard]] inline constexpr auto +get_unc_notation() -> std::basic_string_view { + return unc_notation_w; +} +#endif // defined(_WIN32) + template [[nodiscard]] inline auto get_current_path() -> string_t; @@ -332,6 +352,11 @@ template get_not_directory_seperator()); #if defined(_WIN32) + auto unc_notation_t = get_unc_notation(); + if (utils::string::begins_with(fmt_path, unc_notation_t)) { + return fmt_path; + } + auto dot_t = get_dot(); auto dot_sep_t = string_t{dot_t} + dir_sep_t; if (fmt_path == dot_t || fmt_path == dot_sep_t) { @@ -385,9 +410,15 @@ format_path(string_t &path, utils::string::replace(path, not_sep, sep); #if defined(_WIN32) + auto is_unc{false}; auto long_notation_t = get_long_notation(); + auto unc_notation_t = get_unc_notation(); if (utils::string::begins_with(path, long_notation_t)) { path = path.substr(long_notation_t.size()); + } else if (utils::string::begins_with(path, unc_notation_t)) { + path = path.substr(unc_notation_t.size()); + utils::string::left_trim(path, sep.at(0U)); + is_unc = true; } #endif // defined(_WIN32) @@ -401,7 +432,9 @@ format_path(string_t &path, } #if defined(_WIN32) - if ((path.size() >= 2U) && (path.at(1U) == ':')) { + if (is_unc) { + path = string_t{unc_notation_t} + path; + } else if ((path.size() >= 2U) && (path.at(1U) == ':')) { path[0U] = utils::string::to_lower(string_t(1U, path.at(0U))).at(0U); } #endif // defined(_WIN32) diff --git a/support/src/utils/file_directory.cpp b/support/src/utils/file_directory.cpp index 29ef0e0b..c1f82ea1 100644 --- a/support/src/utils/file_directory.cpp +++ b/support/src/utils/file_directory.cpp @@ -342,7 +342,7 @@ auto directory::remove() -> bool { return utils::retry_action([this]() -> bool { try { #if defined(_WIN32) - return (::RemoveDirectoryA(path_.c_str())); + return ::RemoveDirectoryA(path_.c_str()); #else // !defined(_WIN32) return (rmdir(path_.c_str()) == 0); #endif // defined(_WIN32) diff --git a/support/src/utils/file_file.cpp b/support/src/utils/file_file.cpp index 0baf98cd..77fd660b 100644 --- a/support/src/utils/file_file.cpp +++ b/support/src/utils/file_file.cpp @@ -437,7 +437,7 @@ auto file::remove() -> bool { return utils::retry_action([this]() -> bool { #if defined(_WIN32) - return !!::DeleteFileA(path_.c_str()); + return ::DeleteFileA(path_.c_str()); #else // !defined(_WIN32) std::error_code ec{}; return std::filesystem::remove(path_, ec); diff --git a/support/test/src/utils/path_test.cpp b/support/test/src/utils/path_test.cpp index 28b1cd63..6b64ff2d 100644 --- a/support/test/src/utils/path_test.cpp +++ b/support/test/src/utils/path_test.cpp @@ -57,6 +57,11 @@ TEST(utils_path, constants) { EXPECT_EQ(std::wstring_view{L"./"}, utils::path::dot_slash_w); EXPECT_EQ(std::string_view{"/"}, utils::path::slash); EXPECT_EQ(std::wstring_view{L"/"}, utils::path::slash_w); + +#if defined(_WIN32) + EXPECT_EQ(std::string_view{"\\\\"}, utils::path::unc_notation); + EXPECT_EQ(std::wstring_view{L"\\\\"}, utils::path::unc_notation_w); +#endif // defined(_WIN32) } TEST(utils_path, directory_seperator) { @@ -171,6 +176,9 @@ TEST(utils_path, combine) { s = utils::path::combine("R:", {"\\"}); EXPECT_STREQ(test_path("r:").c_str(), s.c_str()); + + s = utils::path::combine("\\\\moose", {"cow"}); + EXPECT_STREQ("\\\\moose\\cow", s.c_str()); #endif } @@ -276,14 +284,14 @@ TEST(utils_path, finalize) { s = utils::path::finalize(R"(\\)"); #if defined(_WIN32) - EXPECT_STREQ(test_path(R"(\)").c_str(), s.c_str()); + EXPECT_STREQ("\\\\", s.c_str()); #else EXPECT_STREQ("/", s.c_str()); #endif s = utils::path::finalize("//"); #if defined(_WIN32) - EXPECT_STREQ(test_path(R"(\)").c_str(), s.c_str()); + EXPECT_STREQ("\\\\", s.c_str()); #else EXPECT_STREQ("/", s.c_str()); #endif @@ -330,6 +338,18 @@ TEST(utils_path, finalize) { s = utils::path::finalize("D:/moose/"); EXPECT_STREQ(test_path("d:\\moose").c_str(), s.c_str()); + + s = utils::path::finalize("\\\\moose\\cow"); + EXPECT_STREQ("\\\\moose\\cow", s.c_str()); + + s = utils::path::finalize("//moose/cow"); + EXPECT_STREQ("\\\\moose\\cow", s.c_str()); +#else // !defined(_WIN32) + s = utils::path::finalize("\\\\moose\\cow"); + EXPECT_STREQ("/moose/cow", s.c_str()); + + s = utils::path::finalize("//moose/cow"); + EXPECT_STREQ("/moose/cow", s.c_str()); #endif // defined(_WIN32) } @@ -351,6 +371,12 @@ TEST(utils_path, absolute) { path = utils::path::absolute(R"(./moose)"); EXPECT_STREQ((dir + R"(\moose)").c_str(), path.c_str()); + path = utils::path::absolute(R"(\\server\share)"); + EXPECT_STREQ(R"(\\server\share)", path.c_str()); + + path = utils::path::absolute(R"(//server/share)"); + EXPECT_STREQ(R"(\\server\share)", path.c_str()); + auto home_env = utils::get_environment_variable("USERPROFILE"); #else // !defined(_WIN32) path = utils::path::absolute(R"(.\moose)"); @@ -359,6 +385,9 @@ TEST(utils_path, absolute) { path = utils::path::absolute(R"(./moose)"); EXPECT_STREQ((dir + R"(/moose)").c_str(), path.c_str()); + path = utils::path::absolute(R"(\\server\share)"); + EXPECT_STREQ(R"(/server/share)", path.c_str()); + auto home_env = utils::get_environment_variable("HOME"); #endif // defined(_WIN32) auto home = utils::path::absolute(home_env);