# FindMathematica example project
cmake_minimum_required(VERSION 2.8.12)
project (Mathematica-project)
set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake/Mathematica")
set (CMAKE_VERBOSE_MAKEFILE OFF)
set (CMAKE_COLOR_MAKEFILE ON)
set (CMAKE_SKIP_ASSEMBLY_SOURCE_RULES ON)
set (CMAKE_SKIP_PREPROCESSED_SOURCE_RULES ON)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
set (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Debug)
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS 1)
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
# compile all example C++ code as C++11
set (CMAKE_CXX_STANDARD 11)
endif()
# default settings for options that affect search
#set (Mathematica_USE_STATIC_LIBRARIES OFF)
#set (Mathematica_USE_MINIMAL_LIBRARIES ON)
#set (Mathematica_USE_LIBCXX_LIBRARIES ON)
#set (Mathematica_MathLink_FIND_VERSION_MAJOR 3)
#set (Mathematica_WSTP_FIND_VERSION_MAJOR 3)
#set (Mathematica_DEBUG OFF)
# finds newest Mathematica installation and its default components
find_package(Mathematica)
# finds Mathematica 10.0.2 installation and required components
#find_package(Mathematica 10.0.2 EXACT REQUIRED MathLink WSTP JLink WolframLibrary)
# finds Mathematica >= 9 installation and optional components
#find_package(Mathematica 9 COMPONENTS MathLink JLink)
# find Java and use the Java installation bundled with Mathematica
if (Mathematica_JLink_JAVA_HOME AND NOT APPLE)
set (JAVA_HOME "${Mathematica_JLink_JAVA_HOME}")
endif()
find_package(Java 1.7 COMPONENTS Development)
if (Mathematica_MathLink_DEFINITIONS)
add_definitions(${Mathematica_MathLink_DEFINITIONS})
endif()
if (Mathematica_WSTP_DEFINITIONS)
add_definitions(${Mathematica_WSTP_DEFINITIONS})
endif()
enable_testing()
# helper macro which adds convenience target which lets you run tests from IDE
macro (add_convenience_test_target _targetName _testRegEx)
if (CMAKE_CONFIGURATION_TYPES)
add_custom_target("${_targetName}"
COMMAND
${CMAKE_CTEST_COMMAND} -V --force-new-ctest-process
--tests-regex "${_testRegEx}"
--build-config "${CMAKE_CFG_INTDIR}")
else()
add_custom_target("${_targetName}"
COMMAND
${CMAKE_CTEST_COMMAND} -V --force-new-ctest-process
--tests-regex "${_testRegEx}")
endif()
set_target_properties("${_targetName}" PROPERTIES FOLDER "Tests")
endmacro()
if (${Mathematica_FOUND})
message(STATUS "Mathematica Version ${Mathematica_VERSION}")
# Mathematica_SYSTEM_IDS contains the list of Mathematica platform system IDs that the
# project is being compiled for. This usually contains just one entry (e.g., "Windows").
# It may contain multiple entries if we are building a universal binary under Mac OS X
# (e.g., "MacOSX-x86-64;MacOSX-x86").
message(STATUS "Mathematica Target System IDs ${Mathematica_SYSTEM_IDS}")
# Mathematica_HOST_SYSTEM_IDS is the list of Mathematica platform system IDs that can
# run on the build host. If we are executing the CMake build under a 64-bit version of
# Windows this would be "Windows-x86-64;Windows". Under a 32-bit version of Windows this
# would be just "Windows".
message(STATUS "Mathematica Host System IDs ${Mathematica_HOST_SYSTEM_IDS}")
# Mathematica_BASE_DIR is the directory for systemwide files to be loaded by Mathematica
message(STATUS "Mathematica Base Directory ${Mathematica_BASE_DIR}")
# Mathematica_USERBASE_DIR is the directory for user-specific files to be loaded by Mathematica
message(STATUS "Mathematica User Base Directory ${Mathematica_USERBASE_DIR}")
message(STATUS "Mathematica runtime library dirs: ${Mathematica_RUNTIME_LIBRARY_DIRS}")
message(STATUS "Mathematica runtime library dirs debug: ${Mathematica_RUNTIME_LIBRARY_DIRS_DEBUG}")
add_subdirectory(MathematicaExamples)
if (${Mathematica_JLink_FOUND})
add_subdirectory(DocumentationExamples)
endif()
endif()
if (${Mathematica_WolframLibrary_FOUND})
# copy LibraryLink example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources")
file (GLOB_RECURSE _LibraryLinkExamples
"${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources/*.c"
"${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources/*.cxx")
file (COPY ${_LibraryLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/LibraryLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(LibraryLinkExamples)
endif()
add_subdirectory(CodeGenerationExamples)
endif()
if (${Mathematica_MathLink_FOUND})
# copy MathLink example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples")
file (GLOB_RECURSE _MathLinkExamples
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.tm"
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.c"
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.cxx")
file (COPY ${_MathLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/MathLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(MathLinkExamples)
endif()
endif()
if (${Mathematica_WSTP_FOUND})
# copy WSTP example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples")
file (GLOB_RECURSE _WSTPExamples
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.tm"
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.c"
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.cxx")
file (COPY ${_WSTPExamples}
DESTINATION "${CMAKE_BINARY_DIR}/WSTPExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(WSTPExamples)
endif()
endif()
if (Mathematica_MUnit_FOUND)
add_subdirectory(MUnitExamples)
endif ()
if (JAVA_FOUND AND Mathematica_JLink_FOUND)
# copy J/Link example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_JLink_PACKAGE_DIR}/Examples")
file (GLOB_RECURSE _JLinkLinkExamples
"${Mathematica_JLink_PACKAGE_DIR}/Examples/*.java")
file (COPY ${_JLinkLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/JLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(JLinkExamples)
endif()
endif()