cmake_minimum_required(VERSION 3.25) project(aplwc VERSION 0.0.1 LANGUAGES C ) set(CMAKE_C_STANDARD 90) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) add_library(common INTERFACE) target_include_directories(common INTERFACE "src/include" ) target_compile_options(common INTERFACE $<$: -O0 -Wall -Wextra -Wpedantic -Werror -fsanitize=address,undefined -DAPLWC_BUILD_TYPE_DEBUG > $<$: -O0 --coverage -fcondition-coverage -DAPLWC_BUILD_TYPE_COVERAGE -DNDEBUG > $<$: -DAPLWC_BUILD_TYPE_RELEASE > ) target_link_options(common INTERFACE $<$: -fsanitize=address,undefined > $<$: --coverage -fcondition-coverage > ) add_library(aplwc src/lib/eval.c src/lib/main.c src/lib/memory.c src/lib/string.c src/lib/syntax.c ) target_link_libraries(aplwc PRIVATE common) add_executable(aplwc-repl src/bin/main.c src/bin/util.c src/bin/wrappers.c ) target_link_libraries(aplwc-repl PRIVATE common aplwc) enable_testing() file(GLOB TEST_SOURCES CONFIGURE_DEPENDS "tests/*.c") foreach(source ${TEST_SOURCES}) get_filename_component(name "${source}" NAME_WE) set(test_bin "testbin-${name}") add_executable("${test_bin}" "${source}") target_link_libraries("${test_bin}" PRIVATE common aplwc) add_test(NAME "${name}" COMMAND "${test_bin}") endforeach() add_test(NAME "aplwc-repl-tiny" COMMAND "aplwc-repl") set_tests_properties("aplwc-repl-tiny" PROPERTIES ENVIRONMENT "APLWC_MEM=16" WILL_FAIL TRUE ) add_test(NAME "aplwc-repl-large" COMMAND "aplwc-repl") set_tests_properties("aplwc-repl-large" PROPERTIES ENVIRONMENT "APLWC_MEM=64000" ) add_test(NAME "aplwc-repl-emptyvar" COMMAND "aplwc-repl") set_tests_properties("aplwc-repl-emptyvar" PROPERTIES ENVIRONMENT "APLWC_MEM=" ) add_test(NAME "aplwc-repl-badvar" COMMAND "aplwc-repl") set_tests_properties("aplwc-repl-badvar" PROPERTIES ENVIRONMENT "APLWC_MEM=1M" ) add_test(NAME "aplwc-repl" COMMAND "aplwc-repl") set(REQUIRED_MALLOCS 1) foreach(i RANGE 0 ${REQUIRED_MALLOCS}) set(name "aplwc-repl-${i}-${REQUIRED_MALLOCS}") add_test(NAME "${name}" COMMAND "aplwc-repl") set_tests_properties("${name}" PROPERTIES ENVIRONMENT "APLWC_MALLOC_FAIL_AFTER=${i}" ) if(NOT i EQUAL ${REQUIRED_MALLOCS} AND NOT CMAKE_BUILD_TYPE STREQUAL "Release") set_tests_properties("${name}" PROPERTIES WILL_FAIL TRUE ) endif() endforeach()