From 2e93949bfc52c10322fa7ee560ef4abf1e325561 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 09:55:08 +0300 Subject: [PATCH 01/29] add fmt --- CMakeLists.txt | 7 ++++++- src/CMakeLists.txt | 11 ++++++++--- src/main.cpp | 9 +++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c01dae4..a39d099 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10.0) project(Homework CXX) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 17) # CMAKE_CXX_STANDARD = 17 include(cmake/StandardProjectSettings.cmake) # Link this 'library' to set the c++ standard / compile-time options requested add_library(default INTERFACE) @@ -9,6 +9,11 @@ target_compile_features(default INTERFACE cxx_std_17) include(cmake/CompilerWarnings.cmake) set_project_warnings(default) +include(cmake/conan.cmake) +conan_cmake_run( + REQUIRES + fmt/7.1.2 + BASIC_SETUP CMAKE_TARGETS BUILD missing) enable_testing() add_subdirectory(external/doctest) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 66e16a0..d537ddb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.10.0) + add_executable(proj_test test.cpp lib.cpp) -add_executable(proj main.cpp lib.cpp) +# ^ Взять test.cpp и lib.cpp, собрать вместе, назвать proj_test (proj_test.exe) target_link_libraries(proj_test PUBLIC doctest::doctest default) -target_link_libraries(proj PUBLIC doctest::doctest default) -doctest_discover_tests(proj_test) \ No newline at end of file +# ^ Использовать в proj_test библиотеки doctest::doctest и default +doctest_discover_tests(proj_test) +# ^ Прочитать из proj_test список тестов + +add_executable(proj main.cpp lib.cpp) +target_link_libraries(proj PUBLIC default CONAN_PKG::fmt) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index fc6e91e..5ef040a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,12 @@ #include "lib.hpp" +#include +#include #include +#include int main() { - std::cout << not_random() << "\n"; - return 0; + std::cout << fmt::format("not_random number is {0:04}\n", not_random()); + fmt::print("Another string and a vector {}\n", std::vector{1, 2, 3, 4}); + + return 0; } \ No newline at end of file From 276eabee51767d7bc7334719ee30be7c7da21789 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 10:56:04 +0300 Subject: [PATCH 02/29] seminar03@201 --- cmake/conan.cmake | 610 ++++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 86 ++++++- 2 files changed, 695 insertions(+), 1 deletion(-) create mode 100644 cmake/conan.cmake diff --git a/cmake/conan.cmake b/cmake/conan.cmake new file mode 100644 index 0000000..b27dc33 --- /dev/null +++ b/cmake/conan.cmake @@ -0,0 +1,610 @@ +# The MIT License (MIT) + +# Copyright (c) 2018 JFrog + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + + +# This file comes from: https://github.com/conan-io/cmake-conan. Please refer +# to this repository for issues and documentation. + +# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. +# It will take CMake current settings (os, compiler, compiler version, architecture) +# and translate them to conan settings for installing and retrieving dependencies. + +# It is intended to facilitate developers building projects that have conan dependencies, +# but it is only necessary on the end-user side. It is not necessary to create conan +# packages, in fact it shouldn't be use for that. Check the project documentation. + +# version: 0.15.0 + +include(CMakeParseArguments) + +function(_get_msvc_ide_version result) + set(${result} "" PARENT_SCOPE) + if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) + set(${result} 8 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) + set(${result} 9 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) + set(${result} 10 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) + set(${result} 11 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) + set(${result} 12 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) + set(${result} 14 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) + set(${result} 15 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) + set(${result} 16 PARENT_SCOPE) + else() + message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") + endif() +endfunction() + +function(conan_cmake_settings result) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) + #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) + #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) + #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) + #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) + #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) + #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) + + message(STATUS "Conan: Automatic detection of conan settings from cmake") + + parse_arguments(${ARGV}) + + if(ARGUMENTS_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) + elseif(CMAKE_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) + if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") + set(_CONAN_SETTING_BUILD_TYPE "Debug") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") + set(_CONAN_SETTING_BUILD_TYPE "Release") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") + set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") + set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") + endif() + + if(ARGUMENTS_ARCH) + set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) + endif() + #handle -s os setting + if(CMAKE_SYSTEM_NAME) + #use default conan os setting if CMAKE_SYSTEM_NAME is not defined + set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(CONAN_SYSTEM_NAME Macos) + endif() + set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore) + list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) + if (${_index} GREATER -1) + #check if the cmake system is a conan supported one + set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) + else() + message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") + endif() + endif() + + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + if (";${_languages};" MATCHES ";CXX;") + set(LANGUAGE CXX) + set(USING_CXX 1) + elseif (";${_languages};" MATCHES ";C;") + set(LANGUAGE C) + set(USING_CXX 0) + else () + message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") + endif() + + if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) + # using GCC + # TODO: Handle other params + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + if(${MAJOR} GREATER 4) + set(COMPILER_VERSION ${MAJOR}) + endif() + set(_CONAN_SETTING_COMPILER gcc) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) + # using AppleClang + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER apple-clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang) + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if(APPLE) + cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) + if(NOT APPLE_CLANG_POLICY STREQUAL NEW) + message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") + set(_CONAN_SETTING_COMPILER apple-clang) + endif() + endif() + if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) + endif() + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC) + set(_VISUAL "Visual Studio") + _get_msvc_ide_version(_VISUAL_VERSION) + if("${_VISUAL_VERSION}" STREQUAL "") + message(FATAL_ERROR "Conan: Visual Studio not recognized") + else() + set(_CONAN_SETTING_COMPILER ${_VISUAL}) + set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) + endif() + + if(NOT _CONAN_SETTING_ARCH) + if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") + set(_CONAN_SETTING_ARCH x86_64) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_CONAN_SETTING_ARCH armv6) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") + set(_CONAN_SETTING_ARCH x86) + else () + message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") + endif() + endif() + + conan_cmake_detect_vs_runtime(_vs_runtime) + message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") + set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) + + if (CMAKE_GENERATOR_TOOLSET) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + endif() + else() + message(FATAL_ERROR "Conan: compiler setup not recognized") + endif() + + # If profile is defined it is used + if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) + elseif(ARGUMENTS_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) + endif() + + foreach(ARG ${_APPLIED_PROFILES}) + set(_SETTINGS ${_SETTINGS} -pr=${ARG}) + endforeach() + + if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset) + endif() + + # Automatic from CMake + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + + foreach(ARG ${ARGUMENTS_SETTINGS}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}) + endforeach() + + message(STATUS "Conan: Settings= ${_SETTINGS}") + + set(${result} ${_SETTINGS} PARENT_SCOPE) +endfunction() + + +function(conan_cmake_detect_unix_libcxx result) + # Take into account any -stdlib in compile options + get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) + + # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions + get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) + foreach(define ${defines}) + if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") + if(define MATCHES "^-D") + set(compile_options ${compile_options} "${define}") + else() + set(compile_options ${compile_options} "-D${define}") + endif() + endif() + endforeach() + + execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "#include " + COMMAND ${CMAKE_CXX_COMPILER} -x c++ ${compile_options} -E -dM - + OUTPUT_VARIABLE string_defines + ) + + if(string_defines MATCHES "#define __GLIBCXX__") + # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake + if(DEFINED _GLIBCXX_USE_CXX11_ABI) + if(_GLIBCXX_USE_CXX11_ABI) + set(${result} libstdc++11 PARENT_SCOPE) + return() + else() + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endif() + + if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") + set(${result} libstdc++11 PARENT_SCOPE) + else() + # Either the compiler is missing the define because it is old, and so + # it can't use the new abi, or the compiler was configured to use the + # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) + set(${result} libstdc++ PARENT_SCOPE) + endif() + else() + set(${result} libc++ PARENT_SCOPE) + endif() +endfunction() + +function(conan_cmake_detect_vs_runtime result) + string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) + set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + foreach(variable ${variables}) + if(NOT "${${variable}}" STREQUAL "") + string(REPLACE " " ";" flags ${${variable}}) + foreach (flag ${flags}) + if(${flag} STREQUAL "/MD" OR ${flag} STREQUAL "/MDd" OR ${flag} STREQUAL "/MT" OR ${flag} STREQUAL "/MTd") + string(SUBSTRING ${flag} 1 -1 runtime) + set(${result} ${runtime} PARENT_SCOPE) + return() + endif() + endforeach() + endif() + endforeach() + if(${build_type} STREQUAL "DEBUG") + set(${result} "MDd" PARENT_SCOPE) + else() + set(${result} "MD" PARENT_SCOPE) + endif() +endfunction() + + +macro(parse_arguments) + set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) + set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER CONAN_COMMAND) + set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE + PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO + INSTALL_ARGS CONFIGURATION_TYPES) + cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +endmacro() + +function(conan_cmake_install) + # Calls "conan install" + # Argument BUILD is equivalant to --build={missing, PkgName,...} or + # --build when argument is 'BUILD all' (which builds all packages from source) + # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source + # cmake does not identify conan as command, even if it is +x and it is in the path + parse_arguments(${ARGV}) + + if(CONAN_CMAKE_MULTI) + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) + else() + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) + endif() + + set(CONAN_BUILD_POLICY "") + foreach(ARG ${ARGUMENTS_BUILD}) + if(${ARG} STREQUAL "all") + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) + break() + else() + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) + endif() + endforeach() + if(ARGUMENTS_CONAN_COMMAND) + set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + set(CONAN_OPTIONS "") + if(ARGUMENTS_CONANFILE) + set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) + # A conan file has been specified - apply specified options as well if provided + foreach(ARG ${ARGUMENTS_OPTIONS}) + set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) + endforeach() + else() + set(CONANFILE ".") + endif() + if(ARGUMENTS_UPDATE) + set(CONAN_INSTALL_UPDATE --update) + endif() + if(ARGUMENTS_NO_IMPORTS) + set(CONAN_INSTALL_NO_IMPORTS --no-imports) + endif() + set(CONAN_INSTALL_FOLDER "") + if(ARGUMENTS_INSTALL_FOLDER) + set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) + endif() + foreach(ARG ${ARGUMENTS_GENERATORS}) + set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_ENV}) + set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) + endforeach() + set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) + + string (REPLACE ";" " " _conan_args "${conan_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") + + if(ARGUMENTS_OUTPUT_QUIET) + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_output + ERROR_VARIABLE conan_output + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + else() + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + +endfunction() + + +function(conan_cmake_setup_conanfile) + parse_arguments(${ARGV}) + if(ARGUMENTS_CONANFILE) + get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) + # configure_file will make sure cmake re-runs when conanfile is updated + configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) + else() + conan_cmake_generate_conanfile(${ARGV}) + endif() +endfunction() + +function(conan_cmake_generate_conanfile) + # Generate, writing in disk a conanfile.txt with the requires, options, and imports + # specified as arguments + # This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) + parse_arguments(${ARGV}) + set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") + + file(WRITE ${_FN} "[generators]\ncmake\n\n[requires]\n") + foreach(ARG ${ARGUMENTS_REQUIRES}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() + + file(APPEND ${_FN} ${ARG} "\n[options]\n") + foreach(ARG ${ARGUMENTS_OPTIONS}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() + + file(APPEND ${_FN} ${ARG} "\n[imports]\n") + foreach(ARG ${ARGUMENTS_IMPORTS}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() +endfunction() + + +macro(conan_load_buildinfo) + if(CONAN_CMAKE_MULTI) + set(_CONANBUILDINFO conanbuildinfo_multi.cmake) + else() + set(_CONANBUILDINFO conanbuildinfo.cmake) + endif() + if(ARGUMENTS_INSTALL_FOLDER) + set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) + else() + set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) + endif() + # Checks for the existence of conanbuildinfo.cmake, and loads it + # important that it is macro, so variables defined at parent scope + if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") + message(STATUS "Conan: Loading ${_CONANBUILDINFO}") + include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) + else() + message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") + endif() +endmacro() + + +macro(conan_cmake_run) + parse_arguments(${ARGV}) + + if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) + message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") + elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) + message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") + endif() + + if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED + AND NOT ARGUMENTS_BUILD_TYPE) + set(CONAN_CMAKE_MULTI ON) + if (NOT ARGUMENTS_CONFIGURATION_TYPES) + set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") + endif() + message(STATUS "Conan: Using cmake-multi generator") + else() + set(CONAN_CMAKE_MULTI OFF) + endif() + + if(NOT CONAN_EXPORTED) + conan_cmake_setup_conanfile(${ARGV}) + if(CONAN_CMAKE_MULTI) + foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) + set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) + conan_cmake_settings(settings ${ARGV}) + conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endforeach() + set(CMAKE_BUILD_TYPE) + else() + conan_cmake_settings(settings ${ARGV}) + conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endif() + endif() + + if (NOT ARGUMENTS_NO_LOAD) + conan_load_buildinfo() + endif() + + if(ARGUMENTS_BASIC_SETUP) + foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) + if(ARGUMENTS_${_option}) + if(${_option} STREQUAL "CMAKE_TARGETS") + list(APPEND _setup_options "TARGETS") + else() + list(APPEND _setup_options ${_option}) + endif() + endif() + endforeach() + conan_basic_setup(${_setup_options}) + endif() +endmacro() + +macro(conan_check) + # Checks conan availability in PATH + # Arguments REQUIRED and VERSION are optional + # Example usage: + # conan_check(VERSION 1.0.0 REQUIRED) + message(STATUS "Conan: checking conan executable") + set(options REQUIRED) + set(oneValueArgs VERSION) + cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) + + find_program(CONAN_CMD conan) + if(NOT CONAN_CMD AND CONAN_REQUIRED) + message(FATAL_ERROR "Conan executable not found!") + endif() + message(STATUS "Conan: Found program ${CONAN_CMD}") + execute_process(COMMAND ${CONAN_CMD} --version + OUTPUT_VARIABLE CONAN_VERSION_OUTPUT + ERROR_VARIABLE CONAN_VERSION_OUTPUT) + message(STATUS "Conan: Version found ${CONAN_VERSION_OUTPUT}") + + if(DEFINED CONAN_VERSION) + string(REGEX MATCH ".*Conan version ([0-9]+\.[0-9]+\.[0-9]+)" FOO + "${CONAN_VERSION_OUTPUT}") + if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) + message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ + required: ${CONAN_VERSION}. Consider updating via 'pip \ + install conan==${CONAN_VERSION}'.") + endif() + endif() +endmacro() + +function(conan_add_remote) + # Adds a remote + # Arguments URL and NAME are required, INDEX and COMMAND are optional + # Example usage: + # conan_add_remote(NAME bincrafters INDEX 1 + # URL https://api.bintray.com/conan/bincrafters/public-conan) + set(oneValueArgs URL NAME INDEX COMMAND) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) + + if(DEFINED CONAN_INDEX) + set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") + endif() + if(CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL})") + execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_URL} + ${CONAN_INDEX_ARG} -f) +endfunction() + +macro(conan_config_install) + # install a full configuration from a local or remote zip file + # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional + # Example usage: + # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git + # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) + set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) + set(multiValueArgs ARGS) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set(CONAN_CONFIG_INSTALL_ARGS "") + + find_program(CONAN_CMD conan) + if(NOT CONAN_CMD AND CONAN_REQUIRED) + message(FATAL_ERROR "Conan executable not found!") + endif() + + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_CONFIG_INSTALL_ARGS "${CONAN_CONFIG_INSTALL_ARGS} --verify-ssl ${CONAN_VERIFY_SSL}") + endif() + + if(DEFINED CONAN_TYPE) + set(CONAN_CONFIG_INSTALL_ARGS "${CONAN_CONFIG_INSTALL_ARGS} --type ${CONAN_TYPE}") + endif() + + if(DEFINED CONAN_ARGS) + set(CONAN_CONFIG_INSTALL_ARGS "${CONAN_CONFIG_INSTALL_ARGS} --args \"${CONAN_ARGS}\"") + endif() + + if(DEFINED CONAN_SOURCE) + set(CONAN_CONFIG_INSTALL_ARGS "${CONAN_CONFIG_INSTALL_ARGS} --source-folder ${CONAN_SOURCE}") + endif() + + if(DEFINED CONAN_TARGET) + set(CONAN_CONFIG_INSTALL_ARGS "${CONAN_CONFIG_INSTALL_ARGS} --target-folder ${CONAN_TARGET}") + endif() + + message(STATUS "Conan: Installing config from ${CONAN_ITEM}") + execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_CONFIG_INSTALL_ARGS} ${CONAN_ITEM}) +endmacro() diff --git a/src/main.cpp b/src/main.cpp index 5ef040a..735edd3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,12 +1,96 @@ #include "lib.hpp" #include #include +#include +#include #include +#include +#include #include +/* +@dataclass +class List1: + value: int + next: 'List1' = None + def __init__(self, v): + self.value = v +*/ +struct List1 { + int value; + std::shared_ptr next /* = nullptr */; + List1(int v) { value = v; } +}; +auto print(List1 const &list) -> void { + fmt::print("{}{}", list.value, (list.next ? ", " : "\n")); + // cond ? expr1 : expr2 это как в python было expr1 if cond else expr2 + if (list.next) + print(*list.next); +} +auto step1() -> void { + print(3); + print(List1{3}); // то же самое +} + +struct List2 { + int value; + std::shared_ptr next /* = nullptr */; + explicit List2(int v) { value = v; } +}; +auto print2(List2 const &list) -> void { + fmt::print("{}{}", list.value, (list.next ? ", " : "\n")); + // cond ? expr1 : expr2 это как в python было expr1 if cond else expr2 + if (list.next) + print(*list.next); +} +auto step2() { + // print2(3); // ERROR! потому что explicit + print2(List2{3}); // то же самое +} + +struct Stack { + static const int max_number_of_elements = 32; + // Stack::max_number_of_elements == 32 + std::array elements; + size_t top = 0; + + auto push_back(int value) { + elements[top] = value; + ++top; + } + + auto pop_back() { + --top; + return elements[top]; + } + + Stack() = default; + // ^ пусть компилятор сам этот конструктор напишет, он умеет + Stack(std::initializer_list list) { + for (auto elem : list) + push_back(elem); + } +}; +std::ostream &operator<<(std::ostream &stream, Stack const &stack) { + stream << "Stack{"; + for (size_t i = 0; i < stack.top; ++i) + stream << i << (i == stack.top - 1 ? "" : ", "); + stream << "}"; + return stream; +} +auto step3() { + auto s1 = Stack(); + auto s2 = Stack{1, 2, 3}; + // Если компилятор видит '{', он ищет конструктор. принимающий + // std::initializer_list. Если он есть, он и вызывается. Если его нет, + // элементы в {} рассматриваются как отдельные аргументы конструктора + std::cout << s2 << "\n"; + fmt::print("{}\n", s1); +} + int main() { std::cout << fmt::format("not_random number is {0:04}\n", not_random()); fmt::print("Another string and a vector {}\n", std::vector{1, 2, 3, 4}); - + step3(); return 0; } \ No newline at end of file From 3a85ddabf20bdb81a905b8c15c87b36672f75d72 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 12:00:51 +0300 Subject: [PATCH 03/29] seminar 3@202 --- src/main.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 735edd3..0078898 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,11 +1,13 @@ #include "lib.hpp" +#include #include -#include #include +#include #include #include #include #include +#include #include /* @@ -55,13 +57,19 @@ struct Stack { size_t top = 0; auto push_back(int value) { + if (top >= max_number_of_elements) + throw std::out_of_range("stack is full"); // raise в python elements[top] = value; ++top; + // elements[top++] = value; } auto pop_back() { + if (top == 0) + throw std::out_of_range("stack is empty"); --top; return elements[top]; + // return elements[--top]; } Stack() = default; @@ -70,6 +78,11 @@ struct Stack { for (auto elem : list) push_back(elem); } + int operator[](size_t index) const { + if (index < top) + return elements[top - index]; + throw std::out_of_range("index too large"); + } }; std::ostream &operator<<(std::ostream &stream, Stack const &stack) { stream << "Stack{"; @@ -86,11 +99,42 @@ auto step3() { // элементы в {} рассматриваются как отдельные аргументы конструктора std::cout << s2 << "\n"; fmt::print("{}\n", s1); + try { + s1.pop_back(); + } catch (std::out_of_range const &error) { + fmt::print(std::cerr, "got error: {}\n", error.what()); + // throw; // как raise + } + fmt::print("s2[1]: {}\n", s2[1]); +} + +struct example1 { + int v; + explicit example1(int value) { v = value; } + explicit example1(std::initializer_list value) { + v = int(value.size()); + } + explicit example1(std::initializer_list value, + std::initializer_list /*unused*/) { + v = int(value.size()); + } +}; + +auto step4() { + auto e1 = example1(2); + auto e2 = example1{2}; + // Компилятор пытается превратить example1{2} в + // example1(std::initializer_list{2}) + auto e3 = example1({2}, {3}); + fmt::print("e1 = {}, e2 = {}, e3 = {}\n", e1.v, e2.v, e3.v); } int main() { std::cout << fmt::format("not_random number is {0:04}\n", not_random()); fmt::print("Another string and a vector {}\n", std::vector{1, 2, 3, 4}); + step1(); + step2(); step3(); + step4(); return 0; } \ No newline at end of file From 601f22b199f5977ec632367c1e20f184f5f6b4cd Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 12:35:37 +0300 Subject: [PATCH 04/29] about copy constructor --- src/main.cpp | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 0078898..e4bda62 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,14 +36,14 @@ auto step1() -> void { struct List2 { int value; - std::shared_ptr next /* = nullptr */; + std::shared_ptr next /* = nullptr */; explicit List2(int v) { value = v; } }; auto print2(List2 const &list) -> void { fmt::print("{}{}", list.value, (list.next ? ", " : "\n")); // cond ? expr1 : expr2 это как в python было expr1 if cond else expr2 if (list.next) - print(*list.next); + print2(*list.next); } auto step2() { // print2(3); // ERROR! потому что explicit @@ -128,6 +128,36 @@ auto step4() { auto e3 = example1({2}, {3}); fmt::print("e1 = {}, e2 = {}, e3 = {}\n", e1.v, e2.v, e3.v); } +struct List3 { + int value; + std::shared_ptr next /* = nullptr */; + explicit List3(int v) { value = v; } + List3(List3 const &other) { + value = other.value; + if (other.next) + next = std::make_shared(*other.next); + } + List3 &operator=(List3 const &other) { + if (this == &other) // если l3 = l3; просто оптимизация + return *this; + value = other.value; + if (other.next) + next = std::make_shared(*other.next); + else + next = nullptr; + return *this; + } + ~List3() { fmt::print("List3 destroyed\n"); } +}; + +auto step5() { + auto l1 = List3(3); + l1.next = std::make_shared(2); + auto l2 = l1; + l2.next->value = 4; + l1 = l2; + fmt::print("l1: {}, {}\n", l1.value, l1.next->value); +} int main() { std::cout << fmt::format("not_random number is {0:04}\n", not_random()); @@ -136,5 +166,6 @@ int main() { step2(); step3(); step4(); + step5(); return 0; } \ No newline at end of file From d51fbca586a3df64d9e140567a5ae54372513b41 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 17:44:02 +0300 Subject: [PATCH 05/29] test scenario for conan --- .travis.yml | 12 +++- CMakeLists.txt | 5 +- src/main.cpp | 170 +------------------------------------------------ 3 files changed, 13 insertions(+), 174 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3af4fb..4bae2a7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,13 @@ language: cpp -compiler: - - clang - - gcc +addons: + apt: + packages: + - g++-10 + - clang-11 + +env: + - CC=gcc-10 CXX=g++-10 + - CC=clang-10 CXX=clang++-10 dist: focal os: - linux diff --git a/CMakeLists.txt b/CMakeLists.txt index a39d099..ffb2893 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,9 @@ set_project_warnings(default) include(cmake/conan.cmake) conan_cmake_run( REQUIRES - fmt/7.1.2 - BASIC_SETUP CMAKE_TARGETS BUILD missing) + fmt/7.1.2 backward-cpp/1.5 + BASIC_SETUP CMAKE_TARGETS BUILD all PROFILE default PROFILE_AUTO ALL + ) enable_testing() add_subdirectory(external/doctest) diff --git a/src/main.cpp b/src/main.cpp index e4bda62..fdae182 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,171 +1,3 @@ #include "lib.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -/* -@dataclass -class List1: - value: int - next: 'List1' = None - def __init__(self, v): - self.value = v -*/ -struct List1 { - int value; - std::shared_ptr next /* = nullptr */; - List1(int v) { value = v; } -}; -auto print(List1 const &list) -> void { - fmt::print("{}{}", list.value, (list.next ? ", " : "\n")); - // cond ? expr1 : expr2 это как в python было expr1 if cond else expr2 - if (list.next) - print(*list.next); -} -auto step1() -> void { - print(3); - print(List1{3}); // то же самое -} - -struct List2 { - int value; - std::shared_ptr next /* = nullptr */; - explicit List2(int v) { value = v; } -}; -auto print2(List2 const &list) -> void { - fmt::print("{}{}", list.value, (list.next ? ", " : "\n")); - // cond ? expr1 : expr2 это как в python было expr1 if cond else expr2 - if (list.next) - print2(*list.next); -} -auto step2() { - // print2(3); // ERROR! потому что explicit - print2(List2{3}); // то же самое -} - -struct Stack { - static const int max_number_of_elements = 32; - // Stack::max_number_of_elements == 32 - std::array elements; - size_t top = 0; - - auto push_back(int value) { - if (top >= max_number_of_elements) - throw std::out_of_range("stack is full"); // raise в python - elements[top] = value; - ++top; - // elements[top++] = value; - } - - auto pop_back() { - if (top == 0) - throw std::out_of_range("stack is empty"); - --top; - return elements[top]; - // return elements[--top]; - } - - Stack() = default; - // ^ пусть компилятор сам этот конструктор напишет, он умеет - Stack(std::initializer_list list) { - for (auto elem : list) - push_back(elem); - } - int operator[](size_t index) const { - if (index < top) - return elements[top - index]; - throw std::out_of_range("index too large"); - } -}; -std::ostream &operator<<(std::ostream &stream, Stack const &stack) { - stream << "Stack{"; - for (size_t i = 0; i < stack.top; ++i) - stream << i << (i == stack.top - 1 ? "" : ", "); - stream << "}"; - return stream; -} -auto step3() { - auto s1 = Stack(); - auto s2 = Stack{1, 2, 3}; - // Если компилятор видит '{', он ищет конструктор. принимающий - // std::initializer_list. Если он есть, он и вызывается. Если его нет, - // элементы в {} рассматриваются как отдельные аргументы конструктора - std::cout << s2 << "\n"; - fmt::print("{}\n", s1); - try { - s1.pop_back(); - } catch (std::out_of_range const &error) { - fmt::print(std::cerr, "got error: {}\n", error.what()); - // throw; // как raise - } - fmt::print("s2[1]: {}\n", s2[1]); -} - -struct example1 { - int v; - explicit example1(int value) { v = value; } - explicit example1(std::initializer_list value) { - v = int(value.size()); - } - explicit example1(std::initializer_list value, - std::initializer_list /*unused*/) { - v = int(value.size()); - } -}; - -auto step4() { - auto e1 = example1(2); - auto e2 = example1{2}; - // Компилятор пытается превратить example1{2} в - // example1(std::initializer_list{2}) - auto e3 = example1({2}, {3}); - fmt::print("e1 = {}, e2 = {}, e3 = {}\n", e1.v, e2.v, e3.v); -} -struct List3 { - int value; - std::shared_ptr next /* = nullptr */; - explicit List3(int v) { value = v; } - List3(List3 const &other) { - value = other.value; - if (other.next) - next = std::make_shared(*other.next); - } - List3 &operator=(List3 const &other) { - if (this == &other) // если l3 = l3; просто оптимизация - return *this; - value = other.value; - if (other.next) - next = std::make_shared(*other.next); - else - next = nullptr; - return *this; - } - ~List3() { fmt::print("List3 destroyed\n"); } -}; - -auto step5() { - auto l1 = List3(3); - l1.next = std::make_shared(2); - auto l2 = l1; - l2.next->value = 4; - l1 = l2; - fmt::print("l1: {}, {}\n", l1.value, l1.next->value); -} - -int main() { - std::cout << fmt::format("not_random number is {0:04}\n", not_random()); - fmt::print("Another string and a vector {}\n", std::vector{1, 2, 3, 4}); - step1(); - step2(); - step3(); - step4(); - step5(); - return 0; -} \ No newline at end of file +int main() { return 0; } \ No newline at end of file From 6d776179542de0180a73c35dcd723ee2eb432479 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 18:11:42 +0300 Subject: [PATCH 06/29] add conan to before_install --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 4bae2a7..e7976c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,8 @@ os: - linux - windows - macos +before_install: + - pip3 install conan script: - mkdir -p build From 9a38faceb27b232168c11505976b6612c263781c Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 18:13:01 +0300 Subject: [PATCH 07/29] pip3 install --user --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e7976c7..247a73c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ os: - windows - macos before_install: - - pip3 install conan + - pip3 install --user conan script: - mkdir -p build From b9d22e89e89eb0c194c3284ded77a68cd34d0d1c Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 19:04:01 +0300 Subject: [PATCH 08/29] leave only linux for test --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 247a73c..c81ccce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,6 @@ env: dist: focal os: - linux - - windows - - macos before_install: - pip3 install --user conan From 4a08d8c20b29fd5766b8d553a30a591dcab33c87 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 26 Jan 2021 19:10:47 +0300 Subject: [PATCH 09/29] specify compiler in args --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index c81ccce..0fcc2e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,6 @@ addons: - g++-10 - clang-11 -env: - - CC=gcc-10 CXX=g++-10 - - CC=clang-10 CXX=clang++-10 dist: focal os: - linux @@ -17,6 +14,6 @@ before_install: script: - mkdir -p build - cd build - - cmake .. + - cmake .. -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-10 -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-10 - cmake --build . - ctest \ No newline at end of file From d341fe82791288c0cc3540b85d12c1f00494e167 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Wed, 27 Jan 2021 14:34:10 +0300 Subject: [PATCH 10/29] pass env to conan --- .travis.yml | 4 +++- CMakeLists.txt | 5 ++++- src/CMakeLists.txt | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0fcc2e9..717f758 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,12 +8,14 @@ addons: dist: focal os: - linux + - windows + - osx before_install: - pip3 install --user conan script: - mkdir -p build - cd build - - cmake .. -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-10 -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-10 + - cmake .. - cmake --build . - ctest \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index ffb2893..51e5458 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,10 +10,13 @@ target_compile_features(default INTERFACE cxx_std_17) include(cmake/CompilerWarnings.cmake) set_project_warnings(default) include(cmake/conan.cmake) +set(CONAN_DISABLE_CHECK_COMPILER ON) conan_cmake_run( REQUIRES fmt/7.1.2 backward-cpp/1.5 - BASIC_SETUP CMAKE_TARGETS BUILD all PROFILE default PROFILE_AUTO ALL + BASIC_SETUP CMAKE_TARGETS BUILD missing + ENV CC=${CMAKE_C_COMPILER} + ENV CXX=${CMAKE_CXX_COMPILER} ) enable_testing() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d537ddb..f2ca317 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,10 +2,10 @@ cmake_minimum_required(VERSION 3.10.0) add_executable(proj_test test.cpp lib.cpp) # ^ Взять test.cpp и lib.cpp, собрать вместе, назвать proj_test (proj_test.exe) -target_link_libraries(proj_test PUBLIC doctest::doctest default) +target_link_libraries(proj_test PUBLIC doctest::doctest CONAN_PKG::backward-cpp default) # ^ Использовать в proj_test библиотеки doctest::doctest и default doctest_discover_tests(proj_test) # ^ Прочитать из proj_test список тестов add_executable(proj main.cpp lib.cpp) -target_link_libraries(proj PUBLIC default CONAN_PKG::fmt) \ No newline at end of file +target_link_libraries(proj PUBLIC default CONAN_PKG::backward-cpp CONAN_PKG::fmt) \ No newline at end of file From 1e4f6dd6dc9c73c83074010eda9651d9728771ef Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Wed, 27 Jan 2021 17:04:23 +0300 Subject: [PATCH 11/29] before_install for each OS --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 717f758..945e2a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,9 @@ os: - windows - osx before_install: - - pip3 install --user conan + - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install conan; fi script: - mkdir -p build From 83eccb0ac3e36d8761f8a8560257fdba23b32053 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Wed, 27 Jan 2021 17:43:11 +0300 Subject: [PATCH 12/29] refreshenv and conanfile --- .travis.yml | 2 +- CMakeLists.txt | 5 +++-- conanfile.txt | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 conanfile.txt diff --git a/.travis.yml b/.travis.yml index 945e2a4..98dddc8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ os: - windows - osx before_install: - - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; fi + - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install conan; fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 51e5458..a4a3568 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,9 @@ set_project_warnings(default) include(cmake/conan.cmake) set(CONAN_DISABLE_CHECK_COMPILER ON) conan_cmake_run( - REQUIRES - fmt/7.1.2 backward-cpp/1.5 + CONANFILE conanfile.txt + # REQUIRES + # fmt/7.1.2 backward-cpp/1.5 BASIC_SETUP CMAKE_TARGETS BUILD missing ENV CC=${CMAKE_C_COMPILER} ENV CXX=${CMAKE_CXX_COMPILER} diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000..440d3b4 --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,6 @@ +[requires] +fmt/7.1.2 +backward-cpp/1.5 + +[generators] +cmake \ No newline at end of file From 06414469ffb030caea9cc9b057a7a596e8cf3361 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Thu, 28 Jan 2021 02:17:47 +0300 Subject: [PATCH 13/29] add osx_image and comment $CC --- .travis.yml | 3 ++- CMakeLists.txt | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 98dddc8..85187f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,12 @@ addons: - g++-10 - clang-11 -dist: focal os: - linux - windows - osx +dist: focal +osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi diff --git a/CMakeLists.txt b/CMakeLists.txt index a4a3568..3450978 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,13 +10,12 @@ target_compile_features(default INTERFACE cxx_std_17) include(cmake/CompilerWarnings.cmake) set_project_warnings(default) include(cmake/conan.cmake) -set(CONAN_DISABLE_CHECK_COMPILER ON) conan_cmake_run( CONANFILE conanfile.txt # REQUIRES # fmt/7.1.2 backward-cpp/1.5 BASIC_SETUP CMAKE_TARGETS BUILD missing - ENV CC=${CMAKE_C_COMPILER} + # ENV CC=${CMAKE_C_COMPILER} ENV CXX=${CMAKE_CXX_COMPILER} ) From d4c4aaeb82ec76b58bec2642a97dc413639c9359 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Thu, 28 Jan 2021 02:26:12 +0300 Subject: [PATCH 14/29] homebrew addon --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 85187f7..8f584da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,9 @@ addons: packages: - g++-10 - clang-11 - + homebrew: + packages: + - conan os: - linux - windows @@ -14,7 +16,6 @@ osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install conan; fi script: - mkdir -p build From 36ca0c50c5366abc4f497f4badec970d02e9fb0a Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Thu, 28 Jan 2021 02:33:53 +0300 Subject: [PATCH 15/29] test osx python --- .travis.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8f584da..57dd9ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,18 +4,19 @@ addons: packages: - g++-10 - clang-11 - homebrew: - packages: - - conan + # homebrew: + # packages: + # - conan os: - - linux - - windows + # - linux + # - windows - osx dist: focal osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --user conan; fi script: - mkdir -p build From d6dd6bc229438ba4c88e1cd6e4f94a85fe728628 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Thu, 28 Jan 2021 02:43:32 +0300 Subject: [PATCH 16/29] osx python path --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 57dd9ae..2c04972 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --user conan; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$HOME/Library/Python/3.9/bin; python3 -m pip install --user conan; fi script: - mkdir -p build From e003b2dec67127cb312301008be16700ac04c20f Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Fri, 29 Jan 2021 01:40:16 +0300 Subject: [PATCH 17/29] python user-base --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2c04972..9d61d01 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$HOME/Library/Python/3.9/bin; python3 -m pip install --user conan; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$(python3 -m site --user-base); python3 -m pip install --user conan; fi script: - mkdir -p build From 6ec21146dce7cbcbe77ecffe543927b890bf0775 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 09:38:47 +0300 Subject: [PATCH 18/29] modular env --- CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3450978..8f2af6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,13 +10,17 @@ target_compile_features(default INTERFACE cxx_std_17) include(cmake/CompilerWarnings.cmake) set_project_warnings(default) include(cmake/conan.cmake) +get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) +set(ENV_FOR_C CC) +set(ENV_FOR_CXX CXX) +set(ENV_FOR_Fortran FC) +foreach(language ${languages}) + list(APPEND ENV "${ENV_FOR_${language}}=${CMAKE_${language}_COMPILER}") +endforeach() conan_cmake_run( CONANFILE conanfile.txt - # REQUIRES - # fmt/7.1.2 backward-cpp/1.5 BASIC_SETUP CMAKE_TARGETS BUILD missing - # ENV CC=${CMAKE_C_COMPILER} - ENV CXX=${CMAKE_CXX_COMPILER} + ENV CONAN_CMAKE_PROGRAM="${CMAKE_COMMAND}" ${ENV} ) enable_testing() From d0d4c75054ac35f3a95a3a821afcd277b7f90bcd Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 17:47:48 +0300 Subject: [PATCH 19/29] update appveyor.yml with conan --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8e9c91a..39e0ffc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,7 +5,9 @@ image: - macos-mojave - macos install: -- cmd: git submodule update --init --recursive +- git submodule update --init --recursive +- pip3 install --user conan +- refreshenv build_script: - cmake -B build - cmake --build build From 2c17dd759cecd86d12d072541867962035f65cc1 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 17:52:06 +0300 Subject: [PATCH 20/29] fixing appveyor --- appveyor.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 39e0ffc..09110d2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,10 +4,12 @@ image: - Ubuntu2004 - macos-mojave - macos +stack: python install: - git submodule update --init --recursive -- pip3 install --user conan -- refreshenv +- cmd: pip install --user conan +- cmd: refreshenv +- sh: pip3 install --user conan build_script: - cmake -B build - cmake --build build From da59e2b01ed4d83f95e53b1c2494eed1bb755eb8 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 17:58:49 +0300 Subject: [PATCH 21/29] specify python version --- appveyor.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 09110d2..c0d13da 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,9 +4,12 @@ image: - Ubuntu2004 - macos-mojave - macos -stack: python +stack: python 3.9 +environment: + PYTHON: "C:\\Python39-x64" install: - git submodule update --init --recursive +- cmd: set PATH=%PATH%;%PYTHON%/Scripts/ - cmd: pip install --user conan - cmd: refreshenv - sh: pip3 install --user conan From 458b23519b524ccc092a350d1b64876e2725a309 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 18:01:42 +0300 Subject: [PATCH 22/29] remove --user --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c0d13da..66bfead 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,9 +10,9 @@ environment: install: - git submodule update --init --recursive - cmd: set PATH=%PATH%;%PYTHON%/Scripts/ -- cmd: pip install --user conan +- cmd: pip install conan - cmd: refreshenv -- sh: pip3 install --user conan +- sh: pip3 install conan build_script: - cmake -B build - cmake --build build From f329f1310005d610d6792317a275bb43dd93dbff Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 18:06:03 +0300 Subject: [PATCH 23/29] quote env twice --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f2af6a..b4852ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ set(ENV_FOR_C CC) set(ENV_FOR_CXX CXX) set(ENV_FOR_Fortran FC) foreach(language ${languages}) - list(APPEND ENV "${ENV_FOR_${language}}=${CMAKE_${language}_COMPILER}") + list(APPEND ENV "${ENV_FOR_${language}}=\"${CMAKE_${language}_COMPILER}\"") endforeach() conan_cmake_run( CONANFILE conanfile.txt From 5bb10ab2ab144ede8265081702d7bbd7fd8e3cf6 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 18:17:48 +0300 Subject: [PATCH 24/29] fallback for unknown languages --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b4852ff..920c0ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,11 @@ set(ENV_FOR_C CC) set(ENV_FOR_CXX CXX) set(ENV_FOR_Fortran FC) foreach(language ${languages}) - list(APPEND ENV "${ENV_FOR_${language}}=\"${CMAKE_${language}_COMPILER}\"") + if(ENV_FOR_${language}) + list(APPEND ENV "${ENV_FOR_${language}}=${CMAKE_${language}_COMPILER}") + else() + list(APPEND ENV "${language}=${CMAKE_${language}_COMPILER}") + endif() endforeach() conan_cmake_run( CONANFILE conanfile.txt From 206ac9edf1ec57b4d2d012958e4312263c8d71de Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 18:40:05 +0300 Subject: [PATCH 25/29] remove backward-cpp dependency --- conanfile.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/conanfile.txt b/conanfile.txt index 440d3b4..c855cf8 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,6 +1,5 @@ [requires] fmt/7.1.2 -backward-cpp/1.5 [generators] cmake \ No newline at end of file From d774d319ef95fce84a84b4a48d6d1e099e41e8b1 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 19:26:37 +0300 Subject: [PATCH 26/29] fix osx path --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9d61d01..f18c6c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ osx_image: xcode12.2 before_install: - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$(python3 -m site --user-base); python3 -m pip install --user conan; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$(python3 -m site --user-base)/bin; python3 -m pip install --user conan; fi script: - mkdir -p build From dea59b04df8560c8f50a0fbca7ae2a708f8dc990 Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 19:29:28 +0300 Subject: [PATCH 27/29] fully remove backward-cpp --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f2ca317..d537ddb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,10 +2,10 @@ cmake_minimum_required(VERSION 3.10.0) add_executable(proj_test test.cpp lib.cpp) # ^ Взять test.cpp и lib.cpp, собрать вместе, назвать proj_test (proj_test.exe) -target_link_libraries(proj_test PUBLIC doctest::doctest CONAN_PKG::backward-cpp default) +target_link_libraries(proj_test PUBLIC doctest::doctest default) # ^ Использовать в proj_test библиотеки doctest::doctest и default doctest_discover_tests(proj_test) # ^ Прочитать из proj_test список тестов add_executable(proj main.cpp lib.cpp) -target_link_libraries(proj PUBLIC default CONAN_PKG::backward-cpp CONAN_PKG::fmt) \ No newline at end of file +target_link_libraries(proj PUBLIC default CONAN_PKG::fmt) \ No newline at end of file From a3b095833a5d7993310fe34913bff3e012489c5e Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Tue, 2 Feb 2021 19:36:05 +0300 Subject: [PATCH 28/29] enable windows and linux on travis --- .travis.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index f18c6c6..ec7ba67 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,15 @@ language: cpp -addons: - apt: - packages: - - g++-10 - - clang-11 - # homebrew: - # packages: - # - conan +# addons: +# apt: +# packages: +# - g++-10 +# - clang-11 +# homebrew: +# packages: +# - conan os: - # - linux - # - windows + - linux + - windows - osx dist: focal osx_image: xcode12.2 From 954612fc686a2fb54ca58840ce0b1725cb56a0de Mon Sep 17 00:00:00 2001 From: Alexey Kreshchuk Date: Fri, 12 Feb 2021 16:39:22 +0300 Subject: [PATCH 29/29] specify x64 --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ec7ba67..5023405 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,13 +14,14 @@ os: dist: focal osx_image: xcode12.2 before_install: - - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); fi + - OPTS="" + - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install conan; export PATH=$(cmd.exe //c "refreshenv > nul & C:\Progra~1\Git\bin\bash -c 'echo \$PATH' "); OPTS="-A x64"; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then pip3 install --user conan; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:$(python3 -m site --user-base)/bin; python3 -m pip install --user conan; fi script: - mkdir -p build - cd build - - cmake .. + - cmake .. $OPTS - cmake --build . - - ctest \ No newline at end of file + - ctest