Tutorial: Update Step 5 to work on Windows

`log` and `exp` should be found on Windows systems now, as expected.

Update tests to be more specific in looking for the expected outcome of
the tutorial.
This commit is contained in:
Betsy McPhail 2020-02-18 16:32:50 -05:00 committed by Brad King
parent 21d72777fb
commit 07223c5c27
3 changed files with 27 additions and 8 deletions

View File

@ -8,10 +8,20 @@ target_include_directories(MathFunctions
# does this system provide the log and exp functions?
include(CheckSymbolExists)
set(CMAKE_REQUIRED_LIBRARIES "m")
check_symbol_exists(log "math.h" HAVE_LOG)
check_symbol_exists(exp "math.h" HAVE_EXP)
if(NOT (HAVE_LOG AND HAVE_EXP))
unset(HAVE_LOG CACHE)
unset(HAVE_EXP CACHE)
set(CMAKE_REQUIRED_LIBRARIES "m")
check_symbol_exists(log "math.h" HAVE_LOG)
check_symbol_exists(exp "math.h" HAVE_EXP)
if(HAVE_LOG AND HAVE_EXP)
target_link_libraries(MathFunctions PRIVATE m)
endif()
endif()
# add compile definitions
if(HAVE_LOG AND HAVE_EXP)
target_compile_definitions(MathFunctions
PRIVATE "HAVE_LOG" "HAVE_EXP")

View File

@ -386,7 +386,7 @@ these functions using the :module:`CheckSymbolExists` module in the top-level
.. literalinclude:: Step6/MathFunctions/CMakeLists.txt
:language: cmake
:start-after: # does this system provide the log and exp functions?
:end-before: if(HAVE_LOG AND HAVE_EXP)
:end-before: # add compile definitions
Now let's add these defines to ``TutorialConfig.h.in`` so that we can use them
from ``mysqrt.cxx``:

View File

@ -1605,7 +1605,7 @@ ${CMake_SOURCE_DIR}/Utilities/Release/push.bash --dir dev -- '${CMake_BUILD_NIGH
DEPENDS ExternalProjectUpdateSetup )
# do each of the tutorial steps
function(add_tutorial_test step_name use_mymath)
function(add_tutorial_test step_name use_mymath tutorial_arg pass_regex)
set(tutorial_test_name Tutorial${step_name})
set(tutorial_build_dir "${CMake_BINARY_DIR}/Tests/Tutorial/${step_name}")
if (use_mymath)
@ -1623,19 +1623,28 @@ ${CMake_SOURCE_DIR}/Utilities/Release/push.bash --dir dev -- '${CMake_BUILD_NIGH
${build_generator_args}
--build-project Tutorial
--build-options ${tutorial_build_options}
--test-command Tutorial 25.0)
--test-command Tutorial ${tutorial_arg})
set_tests_properties(${tutorial_test_name} PROPERTIES
PASS_REGULAR_EXPRESSION ${pass_regex})
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/${tutorial_build_dir}_Build")
endfunction()
if(NOT CMake_TEST_EXTERNAL_CMAKE)
foreach(STP RANGE 2 12)
add_tutorial_test(Step${STP} TRUE)
if (STP EQUAL 6)
set(pass_regex ".*using log and exp")
else()
set(pass_regex "The square root of 25 is 5")
endif()
add_tutorial_test(Step${STP} TRUE 25 ${pass_regex})
endforeach()
add_tutorial_test(Complete TRUE)
set(pass_regex "The square root of 25 is 5")
add_tutorial_test(Complete TRUE 25 ${pass_regex})
foreach(STP RANGE 3 12)
add_tutorial_test(Step${STP} FALSE)
add_tutorial_test(Step${STP} FALSE 25 ${pass_regex})
endforeach()
add_tutorial_test(Complete FALSE)
add_tutorial_test(Complete FALSE 25 ${pass_regex})
endif()
add_test(testing ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE}