diff --git a/CMakeLists.txt b/CMakeLists.txt index bb00edb..8bf1629 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,6 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.11) # FetchContent requires CMake 3.11 project(chaiscript_extras) -if(BIICODE) - include("biicode.cmake") - RETURN() -endif() - # MINGW does not yet support C++11's concurrency features if(MINGW) option(MULTITHREAD_SUPPORT_ENABLED "Multithreaded Support Enabled" FALSE) @@ -15,7 +10,6 @@ endif() option(BUILD_IN_CPP17_MODE "Build with C++17 flags" FALSE) - if(CMAKE_COMPILER_IS_GNUCC) option(ENABLE_COVERAGE "Enable Coverage Reporting in GCC" FALSE) @@ -76,8 +70,6 @@ endif() include(CTest) enable_testing() - - if(CMAKE_COMPILER_IS_GNUCC) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) @@ -142,7 +134,6 @@ if(MINGW OR CYGWIN) add_definitions(-O3) endif() - if(NOT MULTITHREAD_SUPPORT_ENABLED) add_definitions(-DCHAISCRIPT_NO_THREADS) endif() @@ -166,75 +157,11 @@ if(CMAKE_HOST_UNIX) add_definitions(-pthread) endif() - endif() -list(APPEND LIBS ${READLINE_LIB}) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}") -# ChaiScript -set(CHAISCRIPT_BRANCH v5.8.6) -set(CHAISCRIPT_VERSION 5.8.6) -file(DOWNLOAD https://github.com/ChaiScript/ChaiScript/archive/${CHAISCRIPT_BRANCH}.tar.gz "${CMAKE_BINARY_DIR}/chaiscript/chaiscript-${CHAISCRIPT_BRANCH}.tar.gz" - INACTIVITY_TIMEOUT 180 TIMEOUT 180 TLS_VERIFY off) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf "${CMAKE_BINARY_DIR}/chaiscript/chaiscript-${CHAISCRIPT_BRANCH}.tar.gz" "${CMAKE_BINARY_DIR}/chaiscript" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/chaiscript") -include_directories("${CMAKE_BINARY_DIR}/chaiscript/ChaiScript-${CHAISCRIPT_VERSION}/include") - -# String ID -set(STRING_ID_VERSION 674527b0dab0cca9cf846f3084e986d2783357eb) -file(DOWNLOAD https://github.com/foonathan/string_id/archive/${STRING_ID_VERSION}.tar.gz "${CMAKE_BINARY_DIR}/string_id/string_id-${STRING_ID_VERSION}.tar.gz" - INACTIVITY_TIMEOUT 180 TIMEOUT 180 TLS_VERIFY off) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf "${CMAKE_BINARY_DIR}/string_id/string_id-${STRING_ID_VERSION}.tar.gz" "${CMAKE_BINARY_DIR}/string_id" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/string_id") -file(RENAME "${CMAKE_BINARY_DIR}/string_id/string_id-${STRING_ID_VERSION}" "${CMAKE_BINARY_DIR}/string_id/string_id") -include_directories("${CMAKE_BINARY_DIR}/string_id") -include_directories("${CMAKE_SOURCE_DIR}/tests") - -# Add catch tests macro -macro(ADD_CATCH_TESTS executable) - if (MSVC) - file(TO_NATIVE_PATH "${QT_LIBRARY_DIR}" QT_LIB_PATH) - set(NEWPATH "${QT_LIB_PATH};$ENV{PATH}") - else() - set(NEWPATH $ENV{PATH}) - endif() - - get_target_property(target_files ${executable} SOURCES) - - message("Files: ${target_files}") - - foreach(source ${target_files}) - if(NOT "${source}" MATCHES "/moc_.*cxx") - string(REGEX MATCH .*cpp source "${source}") - if(source) - file(READ "${source}" contents) - string(REGEX MATCHALL "TEST_CASE\\([ ]*\"[^\"]+\"" found_tests ${contents}) - foreach(hit ${found_tests}) - message("Found Test: ${hit}") - string(REGEX REPLACE "TEST_CASE\\([ ]*(\"[^\"]+\").*" "\\1" test_name ${hit}) - add_test(${test_name} "${executable}" ${test_name}) - set_tests_properties(${test_name} PROPERTIES TIMEOUT 660 ENVIRONMENT "PATH=${NEWPATH}") - endforeach() - endif() - endif() - endforeach() -endmacro() - - - -add_executable(math_test tests/math.cpp) -target_link_libraries(math_test ${LIBS}) -ADD_CATCH_TESTS(math_test) - -# TODO: Fix String ID Tests -#add_executable(string_id_test tests/string_id.cpp) -#target_link_libraries(string_id_test ${LIBS}) -#ADD_CATCH_TESTS(string_id_test) - -add_executable(string_methods_test tests/string_methods.cpp) -target_link_libraries(string_methods_test ${LIBS}) -ADD_CATCH_TESTS(string_methods_test) +add_subdirectory(cmake) +add_subdirectory(tests) diff --git a/biicode.cmake b/biicode.cmake deleted file mode 100644 index 672b4c2..0000000 --- a/biicode.cmake +++ /dev/null @@ -1,12 +0,0 @@ -set(BII_LIB_DEPS ${BII_LIB_DEPS} pthread dl) - -ADD_BIICODE_TARGETS() -#TARGET_INCLUDE_DIRECTORIES(${BII_BLOCK_TARGET} INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/../foonathan_string_id/foonathan/string_id") - - -IF(APPLE) - TARGET_COMPILE_OPTIONS(${BII_BLOCK_TARGET} INTERFACE "-std=c++11 -stdlib=libc++") -ELSEIF (WIN32 OR UNIX) - TARGET_COMPILE_OPTIONS(${BII_BLOCK_TARGET} INTERFACE "-std=c++11") -ENDIF(APPLE) - diff --git a/biicode.conf b/biicode.conf deleted file mode 100644 index a9a6914..0000000 --- a/biicode.conf +++ /dev/null @@ -1,48 +0,0 @@ -# Biicode configuration file - -[requirements] - ChaiScript/ChaiScript: 1 - foonathan/string_id: 8 - - -[parent] - ChaiScript/ChaiScript_extras: 0 -[paths] - # Local directories to look for headers (within block) - # / - # include - -[dependencies] - # Manual adjust file implicit dependencies, add (+), remove (-), or overwrite (=) - # hello.h + hello_imp.cpp hello_imp2.cpp - # *.h + *.cpp - -[mains] - # Manual adjust of files that define an executable - # !main.cpp # Do not build executable from this file - # main2.cpp # Build it (it doesnt have a main() function, but maybe it includes it) - !tests/catch.hpp - tests/*.cpp - -[tests] - # Manual adjust of files that define a CTest test - # test/* pattern to evaluate this test/ folder sources like tests - tests/*.cpp - -[hooks] - # These are defined equal to [dependencies],files names matching bii*stage*hook.py - # will be launched as python scripts at stage = {post_process, clean} - # CMakeLists.txt + bii/my_post_process1_hook.py bii_clean_hook.py - -[includes] - # Mapping of include patterns to external blocks - # hello*.h: user3/depblock # includes will be processed as user3/depblock/hello*.h - chaiscript/*.hpp: ChaiScript/ChaiScript/include - string_id/*.hpp: foonathan - -[data] - # Manually define data files dependencies, that will be copied to bin for execution - # By default they are copied to bin/user/block/... which should be taken into account - # when loading from disk such data - # image.cpp + image.jpg # code should write open("user/block/image.jpg") - diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt new file mode 100644 index 0000000..4d9daaa --- /dev/null +++ b/cmake/CMakeLists.txt @@ -0,0 +1,4 @@ +include(chaiscript.cmake) + +# TODO: Fix string_id_test. +#include(foonathan_string_id.cmake) diff --git a/cmake/chaiscript.cmake b/cmake/chaiscript.cmake new file mode 100644 index 0000000..5fbdf1c --- /dev/null +++ b/cmake/chaiscript.cmake @@ -0,0 +1,25 @@ +set(CHAISCRIPT_VERSION 5.8.6) +find_package(chaiscript ${CHAISCRIPT_VERSION} QUIET) + +if (NOT chaiscript_FOUND) + include(FetchContent) + + FetchContent_Declare( + chaiscript + GIT_REPOSITORY https://github.com/ChaiScript/ChaiScript.git + GIT_TAG v${CHAISCRIPT_VERSION} + ) + + FetchContent_GetProperties(chaiscript) + if (NOT chaiscript_POPULATED) + set(FETCHCONTENT_QUIET NO) + FetchContent_Populate(chaiscript) + + set(BUILD_SAMPLES OFF CACHE BOOL "" FORCE) + set(BUILD_MODULES ON CACHE BOOL "" FORCE) + set(BUILD_TESTING OFF CACHE BOOL "" FORCE) + set(BUILD_LIBFUZZ_TESTER OFF CACHE BOOL "" FORCE) + + add_subdirectory(${chaiscript_SOURCE_DIR} ${chaiscript_BINARY_DIR}) + endif() +endif() diff --git a/cmake/foonathan_string_id.cmake b/cmake/foonathan_string_id.cmake new file mode 100644 index 0000000..46fcc30 --- /dev/null +++ b/cmake/foonathan_string_id.cmake @@ -0,0 +1,20 @@ +set(STRING_ID_VERSION 6e2e5c48ee4a3ac0c54ba505f0a573561f2979ec) +find_package(foonathan_string_id 2.0.3 QUIET) + +if (NOT foonathan_string_id_FOUND) + include(FetchContent) + + FetchContent_Declare( + foonathan_string_id + GIT_REPOSITORY https://github.com/foonathan/string_id.git + GIT_TAG ${STRING_ID_VERSION} + ) + + FetchContent_GetProperties(foonathan_string_id) + if (NOT foonathan_string_id_POPULATED) + set(FETCHCONTENT_QUIET NO) + FetchContent_Populate(foonathan_string_id) + + add_subdirectory(${foonathan_string_id_SOURCE_DIR} ${foonathan_string_id_BINARY_DIR}) + endif() +endif() diff --git a/include/chaiscript/extras/string_id.hpp b/include/chaiscript/extras/string_id.hpp index 3461a73..241a52f 100644 --- a/include/chaiscript/extras/string_id.hpp +++ b/include/chaiscript/extras/string_id.hpp @@ -9,8 +9,6 @@ #include #include - - namespace chaiscript { namespace extras { namespace string_id { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..8416adb --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,52 @@ +list(APPEND LIBS ${READLINE_LIB}) + +# Add catch tests macro +macro(ADD_CATCH_TESTS executable) + if (MSVC) + file(TO_NATIVE_PATH "${QT_LIBRARY_DIR}" QT_LIB_PATH) + set(NEWPATH "${QT_LIB_PATH};$ENV{PATH}") + else() + set(NEWPATH $ENV{PATH}) + endif() + + get_target_property(target_files ${executable} SOURCES) + + message("Files: ${target_files}") + + foreach(source ${target_files}) + if(NOT "${source}" MATCHES "/moc_.*cxx") + string(REGEX MATCH .*cpp source "${source}") + if(source) + file(READ "${source}" contents) + string(REGEX MATCHALL "TEST_CASE\\([ ]*\"[^\"]+\"" found_tests ${contents}) + foreach(hit ${found_tests}) + message("Found Test: ${hit}") + string(REGEX REPLACE "TEST_CASE\\([ ]*(\"[^\"]+\").*" "\\1" test_name ${hit}) + add_test(${test_name} "${executable}" ${test_name}) + set_tests_properties(${test_name} PROPERTIES TIMEOUT 660 ENVIRONMENT "PATH=${NEWPATH}") + endforeach() + endif() + endif() + endforeach() +endmacro() + +# Math +add_executable(math_test math.cpp) +target_link_libraries(math_test ${LIBS}) +target_include_directories(math_test PUBLIC "${chaiscript_SOURCE_DIR}/include") +ADD_CATCH_TESTS(math_test) + +# String ID +#add_executable(string_id_test string_id.cpp) +#target_link_libraries(string_id_test ${LIBS} foonathan_string_id) +#target_include_directories(string_id_test PUBLIC +# "${chaiscript_SOURCE_DIR}/include" +# "${foonathan_string_id_SOURCE_DIR}" +#) +#ADD_CATCH_TESTS(string_id_test) + +# String Methods +add_executable(string_methods_test string_methods.cpp) +target_link_libraries(string_methods_test ${LIBS}) +target_include_directories(string_methods_test PUBLIC "${chaiscript_SOURCE_DIR}/include") +ADD_CATCH_TESTS(string_methods_test)