From 9e45828250f43a695aa70ff4a9fee2c07e06ba72 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 11:17:33 +0100 Subject: [PATCH 1/3] update deps --- .gitmodules | 2 +- deps/ledger-zxlib | 2 +- deps/nanos-secure-sdk | 2 +- deps/nanosplus-secure-sdk | 2 +- deps/nanox-secure-sdk | 2 +- deps/stax-secure-sdk | 2 +- tests_zemu/package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitmodules b/.gitmodules index 2b7416d..51f0818 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "deps/nanos-secure-sdk"] path = deps/nanos-secure-sdk - url = https://github.com/LedgerHQ/nanos-secure-sdk + url = https://github.com/LedgerHQ/ledger-secure-sdk [submodule "deps/nanosplus-secure-sdk"] path = deps/nanosplus-secure-sdk url = https://github.com/LedgerHQ/ledger-secure-sdk diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index 4dc9c52..a669ab0 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit 4dc9c5271c2a5060546a78db0bfa01233bf56021 +Subproject commit a669ab077a3acbf80dd27d9563c2b5d35620d67a diff --git a/deps/nanos-secure-sdk b/deps/nanos-secure-sdk index 68c5bfa..e0d514f 160000 --- a/deps/nanos-secure-sdk +++ b/deps/nanos-secure-sdk @@ -1 +1 @@ -Subproject commit 68c5bfa09a048544bdd98178cab397243f17f321 +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/deps/nanosplus-secure-sdk b/deps/nanosplus-secure-sdk index b4e97e4..e0d514f 160000 --- a/deps/nanosplus-secure-sdk +++ b/deps/nanosplus-secure-sdk @@ -1 +1 @@ -Subproject commit b4e97e40f78b59293f8f995aed02de4222ad8f4e +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/deps/nanox-secure-sdk b/deps/nanox-secure-sdk index b4e97e4..e0d514f 160000 --- a/deps/nanox-secure-sdk +++ b/deps/nanox-secure-sdk @@ -1 +1 @@ -Subproject commit b4e97e40f78b59293f8f995aed02de4222ad8f4e +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/deps/stax-secure-sdk b/deps/stax-secure-sdk index b4e97e4..e0d514f 160000 --- a/deps/stax-secure-sdk +++ b/deps/stax-secure-sdk @@ -1 +1 @@ -Subproject commit b4e97e40f78b59293f8f995aed02de4222ad8f4e +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/tests_zemu/package.json b/tests_zemu/package.json index d08be40..bf257f1 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@zondax/ledger-flare": "../js", - "@zondax/zemu": "^0.48.0" + "@zondax/zemu": "^0.49.0" }, "devDependencies": { "@ethereumjs/common": "^2.4.0", From 28e006544f481eaaca68739878ac2bb4e5b1e51d Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 12:09:56 +0100 Subject: [PATCH 2/3] bump version & update snapshots --- app/Makefile.version | 4 ++-- tests_zemu/snapshots/s-mainmenu/00004.png | Bin 383 -> 379 bytes tests_zemu/snapshots/s-mainmenu/00010.png | Bin 383 -> 379 bytes tests_zemu/snapshots/sp-mainmenu/00004.png | Bin 338 -> 331 bytes tests_zemu/snapshots/sp-mainmenu/00010.png | Bin 338 -> 331 bytes tests_zemu/snapshots/st-mainmenu/00001.png | Bin 13825 -> 13740 bytes tests_zemu/snapshots/x-mainmenu/00004.png | Bin 338 -> 331 bytes tests_zemu/snapshots/x-mainmenu/00010.png | Bin 338 -> 331 bytes 8 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Makefile.version b/app/Makefile.version index 05311d3..dc333d1 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -1,6 +1,6 @@ # This is the major version -APPVERSION_M=0 +APPVERSION_M=2 # This is the minor version APPVERSION_N=0 # This is the patch version -APPVERSION_P=13 +APPVERSION_P=0 diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index b9b49090e2d0c013e0a956a3a367c619b7b59712..90e7da88eca02a41c2367fca55bc93981431dbe5 100644 GIT binary patch delta 352 zcmV-m0iXW=0{a4xB!5ClL_t(|ob8#*5`!QNMbWAM|G_ToLMIavKw_Cx;GXHiQj~J@ zAYcdp003rXaT@2?<6*a}W!aqmz+3sajyApA8eaqC;PF95I(8W-$!?vqx{h}2G8dgJ z+w}>t%KAFlt!Lhmf(mL1xku5Rs55|d+NS)FOESMdxd(hx(0^lw)17#M0m%2u?$5go zl!)r~0hQ$kbsN`Vo6{}=2J%WzQj73efaieFR#CdO!hQ@CdtiQhZD?u0!BHIMYUP4e%vpgt3KL%a;YvygUn-g0}^ yHsfJj6LiI?-_(bEX(a9%_a!9&0002M4159mzL)SoM{zFz00004uc>JMbXUv|6m{71Ewhjp*Yq^y(fDxt`oT} zrF0sbhOvYonz~OEBN{#Cmp+7C`Gf$SxrYfcA1MJ z%XWT3s&al^G@F@cq@aqLLT)d*6FLXZ#C19y5GQ;uBk|vkT1FJ?9CEPF6!iR{^PGafXsjH-L$a9} znwx~9ew^yG0000t%KAFlt!Lhmf(mL1xku5Rs55|d+NS)FOESMdxd(hx(0^lw)17#M0m%2u?$5go zl!)r~0hQ$kbsN`Vo6{}=2J%WzQj73efaieFR#CdO!hQ@CdtiQhZD?u0!BHIMYUP4e%vpgt3KL%a;YvygUn-g0}^ yHsfJj6LiI?-_(bEX(a9%_a!9&0002M4159mzL)SoM{zFz00004uc>JMbXUv|6m{71Ewhjp*Yq^y(fDxt`oT} zrF0sbhOvYonz~OEBN{#Cmp+7C`Gf$SxrYfcA1MJ z%XWT3s&al^G@F@cq@aqLLT)d*6FLXZ#C19y5GQ;uBk|vkT1FJ?9CEPF6!iR{^PGafXsjH-L$a9} znwx~9ew^yG0000$k=X+vLTC#_hbcUBOvWs=^UV5)#Vo`m?ns<>^ z#$fX+om)?0fBEdJy%W34xt6^r@3!Zx&^xnsT7Ru)E9vE%sdskr@s;w9%R8UHd&Sm~ zf1~&Q@6TDMQ$(}w%rE(uJ7;~#cjH$oU}Oid8_%wlvfMvCj|UajcHY#eK%ag?11~J%=re#uN7+^W%F5cy+1zdK-Ek2n}sF6 w`9Dm0>Al)*MwsRY?a4Sl{{l?o(EQ z`x`p#fB((+e%j?-wm_T5l<(JkjBeWds$Na`pK>KZb=L*2KYZ&$mW7u~y|Qw?a9;oC z-1w(|9bD5F8SDwUdp0XN=7q0?_gVd!yDlW_g)q!lY0us8=l*;D_lL8#3Thq5$<*`Z zKGb;4;@7(RKXC@0mOIa!OF6#Q`|8xJzw8JfGMxF$Cca}=qIG>;14z`<)z4*}Q$iB} Dw8xM` diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index 034729d64e525bb945ecd517fb93150b805a8303..412d843520e566dbe79941d7222cdd2999bf857a 100644 GIT binary patch delta 304 zcmcb_bed^`O1+S$i(^Q|oVPc<`3@QIxL$0y;rVU9%KKKwQ0*t-D;IrLzGK`psj)JT zX~q-=1UR57cafE6X5>$k=X+vLTC#_hbcUBOvWs=^UV5)#Vo`m?ns<>^ z#$fX+om)?0fBEdJy%W34xt6^r@3!Zx&^xnsT7Ru)E9vE%sdskr@s;w9%R8UHd&Sm~ zf1~&Q@6TDMQ$(}w%rE(uJ7;~#cjH$oU}Oid8_%wlvfMvCj|UajcHY#eK%ag?11~J%=re#uN7+^W%F5cy+1zdK-Ek2n}sF6 w`9Dm0>Al)*MwsRY?a4Sl{{l?o(EQ z`x`p#fB((+e%j?-wm_T5l<(JkjBeWds$Na`pK>KZb=L*2KYZ&$mW7u~y|Qw?a9;oC z-1w(|9bD5F8SDwUdp0XN=7q0?_gVd!yDlW_g)q!lY0us8=l*;D_lL8#3Thq5$<*`Z zKGb;4;@7(RKXC@0mOIa!OF6#Q`|8xJzw8JfGMxF$Cca}=qIG>;14z`<)z4*}Q$iB} Dw8xM` diff --git a/tests_zemu/snapshots/st-mainmenu/00001.png b/tests_zemu/snapshots/st-mainmenu/00001.png index 03f9e3902b5503bfc91e55e0af735950b53b3ccd..c860173655ff5f6f01336881dfd322d98c111074 100644 GIT binary patch literal 13740 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 literal 13825 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 w`9Dm0>Al)*MwsRY?a4Sl{{l?o(EQ z`x`p#fB((+e%j?-wm_T5l<(JkjBeWds$Na`pK>KZb=L*2KYZ&$mW7u~y|Qw?a9;oC z-1w(|9bD5F8SDwUdp0XN=7q0?_gVd!yDlW_g)q!lY0us8=l*;D_lL8#3Thq5$<*`Z zKGb;4;@7(RKXC@0mOIa!OF6#Q`|8xJzw8JfGMxF$Cca}=qIG>;14z`<)z4*}Q$iB} Dw8xM` diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index 034729d64e525bb945ecd517fb93150b805a8303..412d843520e566dbe79941d7222cdd2999bf857a 100644 GIT binary patch delta 304 zcmcb_bed^`O1+S$i(^Q|oVPc<`3@QIxL$0y;rVU9%KKKwQ0*t-D;IrLzGK`psj)JT zX~q-=1UR57cafE6X5>$k=X+vLTC#_hbcUBOvWs=^UV5)#Vo`m?ns<>^ z#$fX+om)?0fBEdJy%W34xt6^r@3!Zx&^xnsT7Ru)E9vE%sdskr@s;w9%R8UHd&Sm~ zf1~&Q@6TDMQ$(}w%rE(uJ7;~#cjH$oU}Oid8_%wlvfMvCj|UajcHY#eK%ag?11~J%=re#uN7+^W%F5cy+1zdK-Ek2n}sF6 w`9Dm0>Al)*MwsRY?a4Sl{{l?o(EQ z`x`p#fB((+e%j?-wm_T5l<(JkjBeWds$Na`pK>KZb=L*2KYZ&$mW7u~y|Qw?a9;oC z-1w(|9bD5F8SDwUdp0XN=7q0?_gVd!yDlW_g)q!lY0us8=l*;D_lL8#3Thq5$<*`Z zKGb;4;@7(RKXC@0mOIa!OF6#Q`|8xJzw8JfGMxF$Cca}=qIG>;14z`<)z4*}Q$iB} Dw8xM` From cd81d15f269c54ad2670e98e6847cea1bfbc1676 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 14:20:37 +0100 Subject: [PATCH 3/3] remove conan & add hunter --- CMakeLists.txt | 32 +- cmake/Hunter/config.cmake | 1 + cmake/HunterGate.cmake | 543 ++++++++++++++++++++++++++++ cmake/cmake-modules | 1 - cmake/conan/CMakeLists.txt | 12 - cmake/gtest/CMakeLists.txt | 32 -- cmake/gtest/CMakeLists.txt.gtest.in | 16 - conanfile.txt | 6 - 8 files changed, 565 insertions(+), 78 deletions(-) create mode 100644 cmake/Hunter/config.cmake create mode 100644 cmake/HunterGate.cmake delete mode 160000 cmake/cmake-modules delete mode 100644 cmake/conan/CMakeLists.txt delete mode 100644 cmake/gtest/CMakeLists.txt delete mode 100644 cmake/gtest/CMakeLists.txt.gtest.in delete mode 100644 conanfile.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f3ca01..454309d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,12 +14,22 @@ # * limitations under the License. # ******************************************************************************** cmake_minimum_required(VERSION 3.0) +include("cmake/HunterGate.cmake") +HunterGate( + URL "https://github.com/cpp-pm/hunter/archive/v0.25.5.tar.gz" + SHA1 "a20151e4c0740ee7d0f9994476856d813cdead29" + LOCAL +) + project(ledger-flare VERSION 0.0.0) enable_testing() cmake_policy(SET CMP0025 NEW) set(CMAKE_CXX_STANDARD 11) +set(HUNTER_STATUS_DEBUG ON) +set(HUNTER_TLS_VERIFY OFF) + option(ENABLE_FUZZING "Build with fuzzing instrumentation and build fuzz targets" OFF) option(ENABLE_COVERAGE "Build with source code coverage instrumentation" OFF) option(ENABLE_SANITIZERS "Build with ASAN and UBSAN" OFF) @@ -31,6 +41,13 @@ string(APPEND CMAKE_LINKER_FLAGS " -fno-omit-frame-pointer -g") add_definitions(-DAPP_STANDARD) add_definitions(-DSUBSTRATE_PARSER_FULL) +hunter_add_package(fmt) +find_package(fmt CONFIG REQUIRED) +hunter_add_package(jsoncpp) +find_package(jsoncpp CONFIG REQUIRED) +hunter_add_package(GTest) +find_package(GTest CONFIG REQUIRED) + if(ENABLE_FUZZING) add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1) SET(ENABLE_SANITIZERS ON CACHE BOOL "Sanitizer automatically enabled" FORCE) @@ -72,9 +89,6 @@ if(ENABLE_SANITIZERS) string(APPEND CMAKE_LINKER_FLAGS " -fsanitize=address,undefined -fsanitize-recover=address,undefined") endif() -include(cmake/conan/CMakeLists.txt) -add_subdirectory(cmake/gtest) - set(RETRIEVE_MAJOR_CMD "cat ${CMAKE_CURRENT_SOURCE_DIR}/app/Makefile.version | grep APPVERSION_M | cut -b 14- | tr -d '\n'" ) @@ -151,23 +165,19 @@ file(GLOB_RECURSE TESTS_SRC add_executable(unittests ${TESTS_SRC}) target_include_directories(unittests PRIVATE - ${gtest_SOURCE_DIR}/include - ${gmock_SOURCE_DIR}/include - ${CONAN_INCLUDE_DIRS_FMT} - ${CONAN_INCLUDE_DIRS_JSONCPP} ${CMAKE_CURRENT_SOURCE_DIR}/app/src ${CMAKE_CURRENT_SOURCE_DIR}/app/src/lib ${CMAKE_CURRENT_SOURCE_DIR}/deps/ripemd160 ) target_link_libraries(unittests PRIVATE - gtest_main + GTest::gtest_main app_lib - CONAN_PKG::fmt - CONAN_PKG::jsoncpp) + fmt::fmt + JsonCpp::JsonCpp) add_compile_definitions(TESTVECTORS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/") -add_test(unittests ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittests) +add_test(NAME unittests COMMAND unittests) set_tests_properties(unittests PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests) # ############################################################# diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake new file mode 100644 index 0000000..0703ceb --- /dev/null +++ b/cmake/Hunter/config.cmake @@ -0,0 +1 @@ +hunter_config(GTest VERSION 1.14.0) diff --git a/cmake/HunterGate.cmake b/cmake/HunterGate.cmake new file mode 100644 index 0000000..17c6d38 --- /dev/null +++ b/cmake/HunterGate.cmake @@ -0,0 +1,543 @@ +# Copyright (c) 2013-2019, Ruslan Baratov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This is a gate file to Hunter package manager. +# Include this file using `include` command and add package you need, example: +# +# cmake_minimum_required(VERSION 3.5) +# +# include("cmake/HunterGate.cmake") +# HunterGate( +# URL "https://github.com/path/to/hunter/archive.tar.gz" +# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d" +# ) +# +# project(MyProject) +# +# hunter_add_package(Foo) +# hunter_add_package(Boo COMPONENTS Bar Baz) +# +# Projects: +# * https://github.com/cpp-pm/gate/ +# * https://github.com/cpp-pm/hunter + +option(HUNTER_ENABLED "Enable Hunter package manager support" ON) + +if(HUNTER_ENABLED) + if(CMAKE_VERSION VERSION_LESS "3.5") + message( + FATAL_ERROR + "At least CMake version 3.5 required for Hunter dependency management." + " Update CMake or set HUNTER_ENABLED to OFF." + ) + endif() +endif() + +include(CMakeParseArguments) # cmake_parse_arguments + +option(HUNTER_STATUS_PRINT "Print working status" ON) +option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) +option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) +set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.") + +set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors") + +function(hunter_gate_status_print) + if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + message(STATUS "[hunter] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_status_debug) + if(HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + string(TIMESTAMP timestamp) + message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_error_page error_page) + message("------------------------------ ERROR ------------------------------") + message(" ${HUNTER_ERROR_PAGE}/${error_page}.html") + message("-------------------------------------------------------------------") + message("") + message(FATAL_ERROR "") +endfunction() + +function(hunter_gate_internal_error) + message("") + foreach(print_message ${ARGV}) + message("[hunter ** INTERNAL **] ${print_message}") + endforeach() + message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("error.internal") +endfunction() + +function(hunter_gate_fatal_error) + cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}") + if("${hunter_ERROR_PAGE}" STREQUAL "") + hunter_gate_internal_error("Expected ERROR_PAGE") + endif() + message("") + foreach(x ${hunter_UNPARSED_ARGUMENTS}) + message("[hunter ** FATAL ERROR **] ${x}") + endforeach() + message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("${hunter_ERROR_PAGE}") +endfunction() + +function(hunter_gate_user_error) + hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data") +endfunction() + +function(hunter_gate_self root version sha1 result) + string(COMPARE EQUAL "${root}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("root is empty") + endif() + + string(COMPARE EQUAL "${version}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("version is empty") + endif() + + string(COMPARE EQUAL "${sha1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("sha1 is empty") + endif() + + string(SUBSTRING "${sha1}" 0 7 archive_id) + + if(EXISTS "${root}/cmake/Hunter") + set(hunter_self "${root}") + else() + set( + hunter_self + "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked" + ) + endif() + + set("${result}" "${hunter_self}" PARENT_SCOPE) +endfunction() + +# Set HUNTER_GATE_ROOT cmake variable to suitable value. +function(hunter_gate_detect_root) + # Check CMake variable + if(HUNTER_ROOT) + set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable") + return() + endif() + + # Check environment variable + if(DEFINED ENV{HUNTER_ROOT}) + set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by environment variable") + return() + endif() + + # Check HOME environment variable + if(DEFINED ENV{HOME}) + set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable") + return() + endif() + + # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only) + if(WIN32) + if(DEFINED ENV{SYSTEMDRIVE}) + set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using SYSTEMDRIVE environment variable" + ) + return() + endif() + + if(DEFINED ENV{USERPROFILE}) + set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using USERPROFILE environment variable" + ) + return() + endif() + endif() + + hunter_gate_fatal_error( + "Can't detect HUNTER_ROOT" + ERROR_PAGE "error.detect.hunter.root" + ) +endfunction() + +function(hunter_gate_download dir) + string( + COMPARE + NOTEQUAL + "$ENV{HUNTER_DISABLE_AUTOINSTALL}" + "" + disable_autoinstall + ) + if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL) + hunter_gate_fatal_error( + "Hunter not found in '${dir}'" + "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'" + "Settings:" + " HUNTER_ROOT: ${HUNTER_GATE_ROOT}" + " HUNTER_SHA1: ${HUNTER_GATE_SHA1}" + ERROR_PAGE "error.run.install" + ) + endif() + string(COMPARE EQUAL "${dir}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("Empty 'dir' argument") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_SHA1 empty") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_URL empty") + endif() + + set(done_location "${dir}/DONE") + set(sha1_location "${dir}/SHA1") + + set(build_dir "${dir}/Build") + set(cmakelists "${dir}/CMakeLists.txt") + + hunter_gate_status_debug("Locking directory: ${dir}") + file(LOCK "${dir}" DIRECTORY GUARD FUNCTION) + hunter_gate_status_debug("Lock done") + + if(EXISTS "${done_location}") + # while waiting for lock other instance can do all the job + hunter_gate_status_debug("File '${done_location}' found, skip install") + return() + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(MAKE_DIRECTORY "${build_dir}") # check directory permissions + + # Disabling languages speeds up a little bit, reduces noise in the output + # and avoids path too long windows error + file( + WRITE + "${cmakelists}" + "cmake_minimum_required(VERSION 3.5)\n" + "if(POLICY CMP0114)\n" + " cmake_policy(SET CMP0114 NEW)\n" + "endif()\n" + "if(POLICY CMP0135)\n" + " cmake_policy(SET CMP0135 NEW)\n" + "endif()\n" + "project(HunterDownload LANGUAGES NONE)\n" + "include(ExternalProject)\n" + "ExternalProject_Add(\n" + " Hunter\n" + " URL\n" + " \"${HUNTER_GATE_URL}\"\n" + " URL_HASH\n" + " SHA1=${HUNTER_GATE_SHA1}\n" + " DOWNLOAD_DIR\n" + " \"${dir}\"\n" + " TLS_VERIFY\n" + " ${HUNTER_TLS_VERIFY}\n" + " SOURCE_DIR\n" + " \"${dir}/Unpacked\"\n" + " CONFIGURE_COMMAND\n" + " \"\"\n" + " BUILD_COMMAND\n" + " \"\"\n" + " INSTALL_COMMAND\n" + " \"\"\n" + ")\n" + ) + + if(HUNTER_STATUS_DEBUG) + set(logging_params "") + else() + set(logging_params OUTPUT_QUIET) + endif() + + hunter_gate_status_debug("Run generate") + + # Need to add toolchain file too. + # Otherwise on Visual Studio + MDD this will fail with error: + # "Could not find an appropriate version of the Windows 10 SDK installed on this machine" + if(EXISTS "${CMAKE_TOOLCHAIN_FILE}") + get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE) + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}") + else() + # 'toolchain_arg' can't be empty + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=") + endif() + + string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make) + if(no_make) + set(make_arg "") + else() + # Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM + set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") + endif() + + execute_process( + COMMAND + "${CMAKE_COMMAND}" + "-H${dir}" + "-B${build_dir}" + "-G${CMAKE_GENERATOR}" + "${toolchain_arg}" + ${make_arg} + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error( + "Configure project failed." + "To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}" + "In directory ${dir}" + ) + endif() + + hunter_gate_status_print( + "Initializing Hunter workspace (${HUNTER_GATE_SHA1})" + " ${HUNTER_GATE_URL}" + " -> ${dir}" + ) + execute_process( + COMMAND "${CMAKE_COMMAND}" --build "${build_dir}" + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error("Build project failed") + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}") + file(WRITE "${done_location}" "DONE") + + hunter_gate_status_debug("Finished") +endfunction() + +# Must be a macro so master file 'cmake/Hunter' can +# apply all variables easily just by 'include' command +# (otherwise PARENT_SCOPE magic needed) +macro(HunterGate) + if(HUNTER_GATE_DONE) + # variable HUNTER_GATE_DONE set explicitly for external project + # (see `hunter_download`) + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() + + # First HunterGate command will init Hunter, others will be ignored + get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET) + + if(NOT HUNTER_ENABLED) + # Empty function to avoid error "unknown function" + function(hunter_add_package) + endfunction() + + set( + _hunter_gate_disabled_mode_dir + "${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode" + ) + if(EXISTS "${_hunter_gate_disabled_mode_dir}") + hunter_gate_status_debug( + "Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}" + ) + list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}") + endif() + elseif(_hunter_gate_done) + hunter_gate_status_debug("Secondary HunterGate (use old settings)") + hunter_gate_self( + "${HUNTER_CACHED_ROOT}" + "${HUNTER_VERSION}" + "${HUNTER_SHA1}" + _hunter_self + ) + include("${_hunter_self}/cmake/Hunter") + else() + set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}") + + string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name) + if(_have_project_name) + hunter_gate_fatal_error( + "Please set HunterGate *before* 'project' command. " + "Detected project: ${PROJECT_NAME}" + ERROR_PAGE "error.huntergate.before.project" + ) + endif() + + cmake_parse_arguments( + HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV} + ) + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1) + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url) + string( + COMPARE + NOTEQUAL + "${HUNTER_GATE_UNPARSED_ARGUMENTS}" + "" + _have_unparsed + ) + string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global) + string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath) + + if(_have_unparsed) + hunter_gate_user_error( + "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}" + ) + endif() + if(_empty_sha1) + hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory") + endif() + if(_empty_url) + hunter_gate_user_error("URL suboption of HunterGate is mandatory") + endif() + if(_have_global) + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)") + endif() + endif() + if(HUNTER_GATE_LOCAL) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)") + endif() + endif() + if(_have_filepath) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)") + endif() + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)") + endif() + endif() + + hunter_gate_detect_root() # set HUNTER_GATE_ROOT + + # Beautify path, fix probable problems with windows path slashes + get_filename_component( + HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE + ) + hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}") + if(NOT HUNTER_ALLOW_SPACES_IN_PATH) + string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces) + if(NOT _contain_spaces EQUAL -1) + hunter_gate_fatal_error( + "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." + "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" + "(Use at your own risk!)" + ERROR_PAGE "error.spaces.in.hunter.root" + ) + endif() + endif() + + string( + REGEX + MATCH + "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*" + HUNTER_GATE_VERSION + "${HUNTER_GATE_URL}" + ) + string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty) + if(_is_empty) + set(HUNTER_GATE_VERSION "unknown") + endif() + + hunter_gate_self( + "${HUNTER_GATE_ROOT}" + "${HUNTER_GATE_VERSION}" + "${HUNTER_GATE_SHA1}" + _hunter_self + ) + + set(_master_location "${_hunter_self}/cmake/Hunter") + if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter") + # Hunter downloaded manually (e.g. by 'git clone') + set(_unused "xxxxxxxxxx") + set(HUNTER_GATE_SHA1 "${_unused}") + set(HUNTER_GATE_VERSION "${_unused}") + else() + get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE) + set(_done_location "${_archive_id_location}/DONE") + set(_sha1_location "${_archive_id_location}/SHA1") + + # Check Hunter already downloaded by HunterGate + if(NOT EXISTS "${_done_location}") + hunter_gate_download("${_archive_id_location}") + endif() + + if(NOT EXISTS "${_done_location}") + hunter_gate_internal_error("hunter_gate_download failed") + endif() + + if(NOT EXISTS "${_sha1_location}") + hunter_gate_internal_error("${_sha1_location} not found") + endif() + file(READ "${_sha1_location}" _sha1_value) + string(TOLOWER "${_sha1_value}" _sha1_value_lower) + string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower) + string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal) + if(NOT _is_equal) + hunter_gate_internal_error( + "Short SHA1 collision:" + " ${_sha1_value} (from ${_sha1_location})" + " ${HUNTER_GATE_SHA1} (HunterGate)" + ) + endif() + if(NOT EXISTS "${_master_location}") + hunter_gate_user_error( + "Master file not found:" + " ${_master_location}" + "try to update Hunter/HunterGate" + ) + endif() + endif() + include("${_master_location}") + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() +endmacro() diff --git a/cmake/cmake-modules b/cmake/cmake-modules deleted file mode 160000 index 877bab9..0000000 --- a/cmake/cmake-modules +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 877bab9dd1b17468c5d939cacaa2ad7ba99d1977 diff --git a/cmake/conan/CMakeLists.txt b/cmake/conan/CMakeLists.txt deleted file mode 100644 index 4899e70..0000000 --- a/cmake/conan/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Download automatically, you can also just copy the conan.cmake file - -if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") - message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") - file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.13/conan.cmake" - "${CMAKE_BINARY_DIR}/conan.cmake") -endif () -include(${CMAKE_BINARY_DIR}/conan.cmake) - -conan_check(REQUIRED) - -conan_cmake_run(CONANFILE conanfile.txt BASIC_SETUP CMAKE_TARGETS BUILD missing) diff --git a/cmake/gtest/CMakeLists.txt b/cmake/gtest/CMakeLists.txt deleted file mode 100644 index 5962ac3..0000000 --- a/cmake/gtest/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -############################## -# Google Test -# Based on instructions in https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -# Download and unpack googletest at configure time -configure_file(CMakeLists.txt.gtest.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt) - -execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "CMake step for googletest failed: ${result}") -endif () - -execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "Build step for googletest failed: ${result}") -endif () - -# Prevent overriding the parent project's compiler/linker settings on Windows -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - -add_subdirectory( - ${CMAKE_BINARY_DIR}/googletest-src - ${CMAKE_BINARY_DIR}/googletest-build -) - -if (CMAKE_VERSION VERSION_LESS 2.8.11) - include_directories("${gtest_SOURCE_DIR}/include") - include_directories("${gtest_SOURCE_DIR}/include") -endif () diff --git a/cmake/gtest/CMakeLists.txt.gtest.in b/cmake/gtest/CMakeLists.txt.gtest.in deleted file mode 100644 index 71b26c5..0000000 --- a/cmake/gtest/CMakeLists.txt.gtest.in +++ /dev/null @@ -1,16 +0,0 @@ -# Based on https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -cmake_minimum_required(VERSION 3.0.0) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.1 - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - ) diff --git a/conanfile.txt b/conanfile.txt deleted file mode 100644 index 0d3d2a7..0000000 --- a/conanfile.txt +++ /dev/null @@ -1,6 +0,0 @@ -[requires] -jsoncpp/1.9.3 -fmt/7.0.2 - -[generators] -cmake