# FindMathematica pure Mathematica examples # run Mathematica code while CMake is configuring and capture its output in a CMake variable Mathematica_EXECUTE( CODE "Print[StandardForm[$LicenseID]]" OUTPUT_VARIABLE Mathematica_LicenseID TIMEOUT 10) message(STATUS "Mathematica License ID ${Mathematica_LicenseID}") # run Mathematica code while CMake is configuring and capture its output in a CMake cache variable Mathematica_EXECUTE( CODE "Print[StandardForm[$MachineID]]" OUTPUT_VARIABLE Mathematica_MathID CACHE DOC "Mathematica Math ID" TIMEOUT 10) message(STATUS "Mathematica Math ID ${Mathematica_MathID}") # find Mathematica package Mathematica_FIND_PACKAGE(Mathematica_NETLink_PACKAGE_FILE "NETLink`" DOC "NETLink package.") Mathematica_GET_PACKAGE_DIR(Mathematica_NETLink_PACKAGE_DIR "${Mathematica_NETLink_PACKAGE_FILE}") message(STATUS "Mathematica .NET/Link package directory ${Mathematica_NETLink_PACKAGE_DIR}") # run Mathematica code while CMake is configuring and write output to file Mathematica_EXECUTE( SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/demo.m" OUTPUT_FILE "demo.m.log" TIMEOUT 10) Mathematica_EXECUTE( SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/directories.m" OUTPUT_FILE "directories.m.log" TIMEOUT 10) # add a stand-alone target which runs Mathematica code Mathematica_ADD_CUSTOM_TARGET(CurrentDate ALL CODE "Print[DateString[]]" COMMENT "Show the current date.") set_target_properties(CurrentDate PROPERTIES FOLDER "Mathematica") # add a stand-alone target which runs Mathematica code from an encoded source file Mathematica_ENCODE(demo.m) Mathematica_ADD_CUSTOM_TARGET(DemoScript ALL SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/demo.m" COMMENT "Running demo.m") set_target_properties(DemoScript PROPERTIES FOLDER "Mathematica") Mathematica_ENCODE(directories.m OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/directories.m" CHECK_TIMESTAMPS) # add a convenience target which holds Mathematica source files for IDEs add_custom_target(MathematicaExamples ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/demo.m" SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/demo.m" "${CMAKE_CURRENT_SOURCE_DIR}/directories.m") set_target_properties(MathematicaExamples PROPERTIES FOLDER "Mathematica") # define a helper function to simplify CMake Mathematica tests function (do_mathematica_test _name _cmds _expectedOutput) foreach (_systemID ${Mathematica_SYSTEM_IDS}) set (_testName "Mathematica_${_systemID}_${_name}") list (FIND Mathematica_HOST_SYSTEM_IDS ${_systemID} _index) if (${_index} GREATER -1) Mathematica_add_test ( NAME "${_testName}" CODE "${_cmds}" SYSTEM_ID "${_systemID}" ${ARGN}) Mathematica_set_tests_properties (${_testName} PROPERTIES TIMEOUT 10 PASS_REGULAR_EXPRESSION "${_expectedOutput}") else() message (STATUS "Skipping test ${_testName}, cross-compiling from ${Mathematica_HOST_SYSTEM_ID}.") endif() endforeach() endfunction () # regular CMake tests do_mathematica_test(Simple "Print[1+1]" # Expected output "2") do_mathematica_test(FactorInteger "Print[FactorInteger[2434500]]" # Expected output "{{2, 2}, {3, 2}, {5, 3}, {541, 1}}") do_mathematica_test(Prime "Print[Prime[Input[]]]" # Expected output "27529" INPUT "3007") add_convenience_test_target(MathematicaTests "Mathematica")