Files
ThirdParty-6/ParaView-5.0.1/CMakeLists.txt

946 lines
37 KiB
CMake

#==========================================================================
#
# Program: ParaView
#
# Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc.
# All rights reserved.
#
# ParaView is a free software; you can redistribute it and/or modify it
# under the terms of the ParaView license version 1.2.
#
# See License_v1.2.txt for the full ParaView license.
# A copy of this license can be obtained by contacting
# Kitware Inc.
# 28 Corporate Drive
# Clifton Park, NY 12065
# USA
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#==========================================================================
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
# Link to Qt5's WinMain automatically (in executables).
if (POLICY CMP0020)
cmake_policy(SET CMP0020 NEW)
endif ()
# Set a consistent MACOSX_RPATH default across all CMake versions.
# When CMake 2.8.12 is required, change this default to 1.
# When CMake 3.0.0 is required, remove this block (see CMP0042).
if(NOT DEFINED CMAKE_MACOSX_RPATH)
set(CMAKE_MACOSX_RPATH 0)
endif()
project(ParaView)
# Disallow in-source build
if ("${ParaView_SOURCE_DIR}" STREQUAL "${ParaView_BINARY_DIR}")
message(FATAL_ERROR
"ParaView requires an out of source Build. "
"Please create a separate binary directory and run CMake there.")
endif()
#------------------------------------------------------------------------------
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Debug' as none was specified.")
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
"MinSizeRel" "RelWithDebInfo")
endif()
#------------------------------------------------------------------------------
# Choose static or shared libraries.
option(BUILD_SHARED_LIBS "Build VTK with shared libraries." ON)
set(VTK_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
#------------------------------------------------------------------------------
# Protect against a stampede of static links at the same time.
if (NOT BUILD_SHARED_LIBS)
set(PV_EXE_JOB_LINK_POOL static_exe_link)
set_property(GLOBAL APPEND PROPERTY
JOB_POOLS static_exe_link=1)
endif ()
#-------------------------------------------------------------------------------
set (ParaView_CMAKE_DIR "${ParaView_SOURCE_DIR}/CMake")
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ParaView_CMAKE_DIR})
# Use the new version of the variable names for output of build process.
# Make sure these are consistent with what VTK sets.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
include(Utilities/Git/Git.cmake)
include(ParaViewDetermineVersion)
include(CMakeDependentOption)
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Setup ParaView Environment
#------------------------------------------------------------------------------
# Determine ParaView Source Version
set (PARAVIEW_VERSION_MAJOR 5)
set (PARAVIEW_VERSION_MINOR 0)
set (PARAVIEW_VERSION_PATCH 1)
set (PARAVIEW_VERSION_PATCH_EXTRA)
set (PARAVIEW_VERSION "5.0")
set (PARAVIEW_VERSION_FULL "5.0.1")
determine_version(${ParaView_SOURCE_DIR} ${GIT_EXECUTABLE} "PARAVIEW")
# Setup some cross compiling related things.
if (CMAKE_CROSSCOMPILING AND NOT COMPILE_TOOLS_IMPORTED)
find_package (ParaViewCompileTools REQUIRED)
# this keeps VTK sub-dir from trying to import VTKCompileTools.
set (COMPILE_TOOLS_IMPORTED TRUE)
endif()
#------------------------------------------------------------------------------
# Setup install directories (we use names with VTK_ prefix, since ParaView now
# is built as a custom "VTK" library.
if(NOT VTK_INSTALL_RUNTIME_DIR)
set(VTK_INSTALL_RUNTIME_DIR bin)
endif()
if(NOT VTK_INSTALL_LIBRARY_DIR)
set(VTK_INSTALL_LIBRARY_DIR lib/paraview-${PARAVIEW_VERSION})
endif()
# ParaView installs the vtk python modules specifically to appropriate locations.
if(NOT VTK_INSTALL_PYTHON_MODULE_DIR)
set (VTK_INSTALL_PYTHON_MODULE_DIR "${VTK_INSTALL_LIBRARY_DIR}/site-packages" CACHE
INTERNAL "Directory where python modules will be installed")
endif()
if(NOT VTK_BUILD_PYTHON_MODULE_DIR)
set (VTK_BUILD_PYTHON_MODULE_DIR "${CMAKE_BINARY_DIR}/lib/site-packages" CACHE
INTERNAL "Directory where python modules will be built")
endif()
if(NOT VTK_INSTALL_ARCHIVE_DIR)
set(VTK_INSTALL_ARCHIVE_DIR lib/paraview-${PARAVIEW_VERSION})
endif()
if(NOT VTK_INSTALL_INCLUDE_DIR)
set(VTK_INSTALL_INCLUDE_DIR include/paraview-${PARAVIEW_VERSION})
endif()
if(NOT VTK_INSTALL_DATA_DIR)
set(VTK_INSTALL_DATA_DIR share/paraview-${PARAVIEW_VERSION})
endif()
if(NOT VTK_INSTALL_DOC_DIR)
set(VTK_INSTALL_DOC_DIR share/doc/paraview-${PARAVIEW_VERSION})
endif()
if(NOT VTK_INSTALL_PACKAGE_DIR)
set(VTK_INSTALL_PACKAGE_DIR "lib/cmake/paraview-${PARAVIEW_VERSION}")
endif()
if(NOT VTK_INSTALL_DOXYGEN_DIR)
set(VTK_INSTALL_DOXYGEN_DIR ${VTK_INSTALL_DOC_DIR}/doxygen)
endif()
if(NOT VTK_INSTALL_EXPORT_NAME)
set(VTK_INSTALL_EXPORT_NAME ParaViewTargets)
endif()
if(NOT VTK_MODULES_DIR)
set(VTK_MODULES_DIR "${ParaView_BINARY_DIR}/${VTK_INSTALL_PACKAGE_DIR}/Modules")
endif()
if(NOT PARAVIEW_WWW_DIR)
set(PARAVIEW_WWW_DIR "${ParaView_BINARY_DIR}/www")
endif()
set(PARAVIEW_MODULES_DIR ${VTK_MODULES_DIR})
if (NOT DEFINED VTK_CUSTOM_LIBRARY_SUFFIX)
set (VTK_CUSTOM_LIBRARY_SUFFIX "-pv${PARAVIEW_VERSION}")
endif()
# Handle the target export file, this is used if building against a build tree.
if(NOT VTK_EXPORTS_FILE)
set(VTK_EXPORTS_FILE "${ParaView_BINARY_DIR}/VTK/${VTK_INSTALL_EXPORT_NAME}.cmake")
endif()
file(REMOVE "${VTK_EXPORTS_FILE}")
if(NOT PV_INSTALL_PLUGIN_DIR)
if (WIN32)
set (PV_INSTALL_PLUGIN_DIR ${VTK_INSTALL_RUNTIME_DIR})
else ()
set (PV_INSTALL_PLUGIN_DIR ${VTK_INSTALL_LIBRARY_DIR})
endif()
endif()
# Disable installing of the Qt Designer plugin. There's no need for it in
# ParaView install rules.
set (VTK_INSTALL_NO_QT_PLUGIN TRUE)
# Disable installing of the vtkpython executables.
set (VTK_INSTALL_NO_PYTHON_EXES TRUE)
# for temporary backwards compatibility.
set (PV_INSTALL_BIN_DIR ${VTK_INSTALL_RUNTIME_DIR})
set (PV_INSTALL_LIB_DIR ${VTK_INSTALL_ARCHIVE_DIR})
set (PV_INSTALL_EXPORT_NAME ${VTK_INSTALL_EXPORT_NAME})
# Setting this ensures that "make install" will leave rpaths to external
# libraries (not part of the build-tree e.g. Qt, ffmpeg, etc.) intact on
# "make install". This ensures that one can install a version of ParaView on the
# build machine without any issues. If this not desired, simply specify
# CMAKE_INSTALL_RPATH_USE_LINK_PATH when configuring Paraview and
# "make install" will strip all rpaths, which is default behavior.
if(NOT CMAKE_INSTALL_RPATH_USE_LINK_PATH )
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Define ParaView specific options.
#------------------------------------------------------------------------------
set(default_testing ON)
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.ExternalData/README.rst")
# Source tarball without the data, so turn off testing.
set(default_testing OFF)
endif ()
option(BUILD_TESTING "Build ParaView Testing" ${default_testing})
option(BUILD_EXAMPLES "Build ParaView examples" OFF)
option(BUILD_SHARED_LIBS "Build ParaView using shared libraries" ON)
option(PARAVIEW_BUILD_QT_GUI "Enable ParaView Qt-based client" ON)
option(PARAVIEW_USE_DAX "Build ParaView with Dax many-core filters" OFF)
option(PARAVIEW_USE_MPI "Enable MPI support for parallel computing" OFF)
option(PARAVIEW_USE_PISTON "Build ParaView with Piston GPGPU filters" OFF)
option(PARAVIEW_USE_VISITBRIDGE "Build ParaView with VisIt readers." OFF)
# Xdmf3 is not ON by default since it depends on Boost.
option(PARAVIEW_ENABLE_XDMF3 "Enable Xdmf3 support (requires Boost)." OFF)
# Enable CGNS support
option(PARAVIEW_ENABLE_CGNS "Enable the CGNS file reader" OFF)
if (UNIX)
option(PARAVIEW_ENABLE_FFMPEG "Enable FFMPEG Support." OFF)
endif()
if (UNIX)
# Since development installs are currently being tested only on linuxes. We
# can support these for other platforms if time permits.
option(PARAVIEW_INSTALL_DEVELOPMENT_FILES
"When enabled, \"make install\" will install development files" OFF)
endif()
cmake_dependent_option(PARAVIEW_USE_MPI_SSEND
"Use MPI synchronous-send commands for communication" OFF
"PARAVIEW_USE_MPI" OFF)
cmake_dependent_option(PARAVIEW_USE_ICE_T
"Enable IceT (needed for parallel rendering)" ON
"PARAVIEW_USE_MPI" OFF)
cmake_dependent_option(PARAVIEW_INITIALIZE_MPI_ON_CLIENT
"Initialize MPI on client-processes by default. Can be overridden using command line arguments"
OFF
"PARAVIEW_USE_MPI" OFF)
mark_as_advanced(PARAVIEW_USE_ICE_T
PARAVIEW_USE_MPI_SSEND
PARAVIEW_INITIALIZE_MPI_ON_CLIENT)
cmake_dependent_option(PARAVIEW_ENABLE_QT_SUPPORT
"Build ParaView with Qt support (without GUI)" OFF
"NOT PARAVIEW_BUILD_QT_GUI" ON)
# Add an option to enable using Qt Webkit for widgets, as needed.
# Default is OFF. We don't want to depend on WebKit unless absolutely needed.
cmake_dependent_option(PARAVIEW_USE_QTWEBKIT
"Use Qt WebKit components as needed." OFF
"PARAVIEW_ENABLE_QT_SUPPORT" OFF)
mark_as_advanced(PARAVIEW_USE_QTWEBKIT)
# If PARAVIEW_BUILD_QT_GUI is OFF, provide an option to the user to turn other command line
# executables ON/OFF.
cmake_dependent_option(PARAVIEW_ENABLE_COMMANDLINE_TOOLS
"Build ParaView command-line tools" ON
"NOT PARAVIEW_BUILD_QT_GUI" ON)
option(PARAVIEW_ENABLE_PYTHON "Enable/Disable Python scripting support" OFF)
cmake_dependent_option(PARAVIEW_USE_UNIFIED_BINDINGS "If enabled, Python bindings will back the ClientServer wrapping implementation" OFF
PARAVIEW_ENABLE_PYTHON OFF)
mark_as_advanced(PARAVIEW_USE_UNIFIED_BINDINGS)
cmake_dependent_option(PARAVIEW_ENABLE_MATPLOTLIB "Enable/Disable Python scripting support" ON
"PARAVIEW_ENABLE_PYTHON" OFF)
mark_as_advanced(PARAVIEW_ENABLE_MATPLOTLIB)
# If building on Unix with MPI enabled, we will present another option to
# enable building of CosmoTools VTK extensions. This option is by default
# OFF and set to OFF if ParaView is not built with MPI.
if (UNIX)
cmake_dependent_option(PARAVIEW_ENABLE_COSMOTOOLS
"Build ParaView with CosmoTools VTK Extensions" OFF
"PARAVIEW_USE_MPI" OFF)
mark_as_advanced(PARAVIEW_ENABLE_COSMOTOOLS)
endif()
# Is this a 32 bit or 64bit build. Display this in about dialog.
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
set(PARAVIEW_BUILD_ARCHITECTURE "64")
else()
set(PARAVIEW_BUILD_ARCHITECTURE "32")
endif()
# setup external data. this will automatically download the test
# data and baseline files to the build tree and set PARAVIEW_DATA_ROOT.
include(ParaViewExternalData)
set(ExternalData_LINK_CONTENT MD5)
set(ExternalData_BINARY_ROOT "${CMAKE_BINARY_DIR}/ExternalData")
set(PARAVIEW_TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Testing/Data")
set(PARAVIEW_TEST_BASELINE_DIR "${PARAVIEW_TEST_DATA_DIR}/Baseline")
set(PARAVIEW_TEST_OUTPUT_DATA_DIR "${ExternalData_BINARY_ROOT}/Testing/Data")
set(PARAVIEW_TEST_OUTPUT_BASELINE_DIR "${PARAVIEW_TEST_OUTPUT_DATA_DIR}/Baseline")
set(PARAVIEW_TEST_OUTPUT_DIR "${CMAKE_BINARY_DIR}/Testing/Temporary")
set(PARAVIEW_DATA_ROOT "${PARAVIEW_TEST_OUTPUT_DATA_DIR}")
if (APPLE)
option(PARAVIEW_DO_UNIX_STYLE_INSTALLS
"When enabled, install will result in unix-style install rather than an OsX app"
OFF)
mark_as_advanced(PARAVIEW_DO_UNIX_STYLE_INSTALLS)
endif()
if (APPLE AND PARAVIEW_DO_UNIX_STYLE_INSTALLS)
# We are doing a unix-style install i.e. everything will be installed in
# CMAKE_INSTALL_PREFIX/bin and CMAKE_INSTALL_PREFIX/lib etc. as on other unix
# platforms. We still need to setup CMAKE_INSTALL_NAME_DIR correctly so that
# the binaries point to appropriate location for the libraries.
# 1. Make CMAKE_INSTALL_PREFIX publicly accessible, if it was hidden in
# previous pass
get_property(is_internal CACHE CMAKE_INSTALL_PREFIX PROPERTY TYPE)
if (is_internal STREQUAL "INTERNAL")
set (CMAKE_INSTALL_PREFIX ${CACHED_CMAKE_INSTALL_PREFIX} CACHE PATH "Install prefix" FORCE)
else()
set (CMAKE_INSTALL_PREFIX ${CACHED_CMAKE_INSTALL_PREFIX} CACHE PATH "Install prefix")
endif()
unset(MACOSX_APP_INSTALL_PREFIX CACHE)
if (PARAVIEW_CUSTOM_INSTALL_NAME_DIR)
# Allow the user to set a custom install_name directory. This is useful for
# using ParaView as an SDK where the binaries are not necessarily in the
# same place as ParaView's binaries.
set(CMAKE_INSTALL_NAME_DIR "${PARAVIEW_CUSTOM_INSTALL_NAME_DIR}/${VTK_INSTALL_LIBRARY_DIR}")
else ()
# Set CMAKE_INSTALL_NAME_DIR to point to the libraries directory relative
# to the executable.
set(CMAKE_INSTALL_NAME_DIR "@executable_path/../${VTK_INSTALL_LIBRARY_DIR}")
endif ()
# ensure that we don't build forwarding executables on apple.
set(VTK_BUILD_FORWARDING_EXECUTABLES FALSE)
elseif (APPLE AND NOT PARAVIEW_DO_UNIX_STYLE_INSTALLS)
# If building on apple, we will set cmake rules for ParaView such that "make
# install" will result in creation of an application bundle by default.
# The trick we play is as such:
# 1. We hide the CMAKE_INSTALL_PREFIX variable at force it to a
# internal/temporary location. All generic VTK/ParaView install rules
# happily go about installing under this CMAKE_INSTALL_PREFIX location.
# 2. We provide a new vairable MACOSX_APP_INSTALL_PREFIX that user can set to
# point where he wants the app bundle to be placed (default is
# /Applications).
# 3. We set CMAKE_INSTALL_NAME_DIR to point to location of runtime libraries
# in the app bundle. Thus when the libraries are installed, cmake
# automatically cleans up the install_name paths for all shared libs that
# we built to point to a location within the app.
# 4. To make packaging of plugins easier, we install plugins under a directory
# named "plugins" in the temporary CMAKE_INSTALL_PREFIX location. This just
# a simple trick to avoid having to keep track of plugins we built.
# 5. Every application that builds an app, then uses the
# ParaViewBrandingInstallApp.cmake or something similar to put all the
# libraries, plugins, python files etc. within the app bundle itself.
# 6. Finally, the bundle generated under the temporary location is copied over
# to the path specified by MACOSX_APP_INSTALL_PREFIX.
#
# In keeping with our "WE INSTALL WHAT WE BUILD" rule, this app bundle is not
# distributable to others since it does not include Qt, or other external
# dependencies. For a distributable pacakage, refer to ParaView Super-build
# instructions.
# Try to preserve user-specified CMAKE_INSTALL_PREFIX if any.
get_property(is_internal CACHE CMAKE_INSTALL_PREFIX PROPERTY TYPE)
if (NOT is_internal STREQUAL "INTERNAL")
# CMAKE_INSTALL_PREFIX is not internal yet, so it must be avialable to the
# user, so save it.
set (CACHED_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "")
endif()
set (CMAKE_INSTALL_PREFIX
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/__macos_install
CACHE INTERNAL "" FORCE)
set (MACOSX_APP_INSTALL_PREFIX
"/Applications"
CACHE PATH
"Location where the *.app bundle must be installed.")
set(CMAKE_INSTALL_NAME_DIR "@executable_path/../Libraries")
set(PV_INSTALL_PLUGIN_DIR "Plugins")
# ensure that we don't build forwarding executables on apple.
set(VTK_BUILD_FORWARDING_EXECUTABLES FALSE)
endif()
if (UNIX AND NOT APPLE)
set(VTK_BUILD_FORWARDING_EXECUTABLES TRUE)
endif()
# ParaViewWeb on Windows needs win32api which is not provided by default
# For now the default behavior would be to disable it on Windows build
if (WIN32)
set(PARAVIEW_ENABLE_WEB OFF CACHE BOOL "" FORCE)
else()
cmake_dependent_option(PARAVIEW_ENABLE_WEB "Enable/Disable web support" ON
"PARAVIEW_ENABLE_PYTHON" OFF)
endif()
mark_as_advanced(PARAVIEW_ENABLE_WEB)
if (PARAVIEW_ENABLE_WEB)
# Request vtkParaViewWeb module
list(APPEND vtkParaViewWeb_REQUEST_BY "Option PARAVIEW_ENABLE_WEB")
endif()
option(PARAVIEW_BUILD_WEB_DOCUMENTATION "Enable/Disable web documentation" OFF)
mark_as_advanced(PARAVIEW_BUILD_WEB_DOCUMENTATION)
if (PARAVIEW_BUILD_WEB_DOCUMENTATION)
# Request vtkParaViewWebDocumentation module.
list(APPEND vtkParaViewWebDocumentation_REQUEST_BY "Option PARAVIEW_BUILD_WEB_DOCUMENTATION")
endif()
option(PARAVIEW_ENABLE_CATALYST "Enable Catalyst CoProcessing modules" ON)
cmake_dependent_option(PARAVIEW_BUILD_CATALYST_ADAPTORS
"Build Adaptors for various simulation codes" OFF
"PARAVIEW_ENABLE_CATALYST" OFF)
mark_as_advanced(PARAVIEW_BUILD_CATALYST_ADAPTORS)
if (PARAVIEW_ENABLE_CATALYST)
# Request vtkPVCatalyst module.
list(APPEND vtkPVCatalyst_REQUEST_BY "Option PARAVIEW_ENABLE_CATALYST")
if (BUILD_TESTING)
# Request vtkPVCatalystTestDriver module for testing.
list(APPEND vtkPVCatalystTestDriver_REQUEST_BY "Option PARAVIEW_ENABLE_CATALYST, BUILD_TESTING")
endif()
# When Catalyst is enabled, Fortran is optionally needed. Hence we enable
# Fortran at the top level itself. When individual module called
# enable_language(...), it failed during first cmake configure but worked o
# subsequent. enable_language(... OPTIONAL) overcomes that issue altogether.
if (NOT WIN32)
# Theoretically, CheckFortran should not be needed, but it
# enable_language(OPTIONAL) fails with Ninja generator.
include(CheckFortran)
if (CMAKE_Fortran_COMPILER)
enable_language(Fortran OPTIONAL)
endif()
endif()
endif()
# Add ability to freeze Python modules.
cmake_dependent_option(PARAVIEW_FREEZE_PYTHON
"Freeze Python packages/modules into the application." OFF
"PARAVIEW_ENABLE_PYTHON;NOT WIN32" OFF)
mark_as_advanced(PARAVIEW_FREEZE_PYTHON)
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Update state based on chosen/imported options.
#------------------------------------------------------------------------------
set (PARAVIEW_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
if (NOT PARAVIEW_INSTALL_DEVELOPMENT_FILES)
set (VTK_INSTALL_NO_DEVELOPMENT TRUE)
endif()
# Setup Qt state
if (PARAVIEW_ENABLE_QT_SUPPORT)
# need to set up Qt stuff here because there are Qt dependencies before
# ParaView requires this minimum version of Qt, and let's do it here before
# our first call to FindQt4.cmake
set (QT_REQUIRED TRUE)
include (ParaViewQtVersion)
if (PARAVIEW_QT_VERSION VERSION_GREATER "4")
set (Qt5_FIND_COMPONENTS
Help
Network
Test
UiTools
Widgets
Xml)
if(PARAVIEW_USE_QTWEBKIT)
list(APPEND Qt5_FIND_COMPONENTS WebKitWidgets)
endif()
include (ParaViewQt5)
if (NOT QT5_FOUND)
message( SEND_ERROR "Qt ${QT_MIN_VERSION} or greater not found. "
"Please set the Qt5Core_DIR variable." )
endif ()
else ()
find_package (Qt4)
if (NOT QT4_FOUND)
message (SEND_ERROR "Qt ${QT_MIN_VERSION} or greater not found. "
"Please set the QT_QMAKE_EXECUTABLE variable.")
else ()
# check is Qtversion is 4.8.*. If so, we are good. Otherwise we will post a
# warning of versions (>= 4.7 && < 4.8). However we report errors for any
# version less than 4.7
string(REGEX MATCH "^4\\.[8]\\.[0-9]+" qt_version_match "${QTVERSION}")
if (NOT qt_version_match)
string(REGEX MATCH "^4\\.[0-6]+\\.[0-9]+" qt_version46_x_tmp "${QTVERSION}")
if (qt_version46_x_tmp)
message(SEND_ERROR "Qt ${QTVERSION} not supported. "
"Please use ${QT_OFFICIAL_VERSION} (you may need to clean your dirtied cache)."
"Minium required version is ${QT_MIN_VERSION}.")
else ()
message(WARNING "Warning: You are using Qt ${QTVERSION}. "
"Officially supported version is Qt ${QT_OFFICIAL_VERSION}")
endif ()
endif ()
endif ()
endif ()
endif ()
SET(PARAVIEW_QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE})
# Setup testing.
if (BUILD_TESTING)
set (PARAVIEW_TEST_DIR ${ParaView_BINARY_DIR}/Testing/Temporary)
make_directory(${PARAVIEW_TEST_DIR})
enable_testing()
include(CTest)
endif()
# Setup default state for ParaView module groups.
set (VTK_Group_ParaViewCore ON CACHE BOOL "")
set (VTK_Group_ParaViewRendering ON CACHE BOOL "")
if (PARAVIEW_ENABLE_COMMANDLINE_TOOLS)
# Request the vtkPVServerManagerApplication module.
list (APPEND vtkPVServerManagerApplication_REQUEST_BY
"Option PARAVIEW_ENABLE_COMMANDLINE_TOOLS")
endif()
if (PARAVIEW_BUILD_QT_GUI)
# Request the pqApplicationComponents module.
list (APPEND pqApplicationComponents_REQUEST_BY "Option PARAVIEW_BUILD_QT_GUI")
endif()
#------------------------------------------------------------------------------
# Test to check install tree
#------------------------------------------------------------------------------
if (BUILD_TESTING AND PARAVIEW_INSTALL_DEVELOPMENT_FILES)
add_test( NAME pv.TestDevelopmentInstall
COMMAND ${CMAKE_COMMAND}
-DPARAVIEW_BINARY_DIR:PATH=${CMAKE_BINARY_DIR}
-DPARAVIEW_INSTALL_DIR:PATH=${CMAKE_INSTALL_PREFIX}
-DPARAVIEW_SOURCE_DIR:PATH=${CMAKE_SOURCE_DIR}
-DPARAVIEW_TEST_DIR:PATH=${PARAVIEW_TEST_DIR}
-DPARAVIEW_VERSION:STRING=${PARAVIEW_VERSION}
-P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/ParaViewTestInstall.cmake)
set_tests_properties(pv.TestDevelopmentInstall PROPERTIES
LABELS "PARAVIEW"
ENVIRONMENT "DESTDIR=${CMAKE_BINARY_DIR}/test-install")
endif()
#------------------------------------------------------------------------------
include_directories(${ParaView_BINARY_DIR})
set (PARAVIEW_MODULE_ROOTS)
#------------------------------------------------------------------------------
# Bring in VTK
#------------------------------------------------------------------------------
# ParaView provides an advanced option that can be used to make ParaView use a
# pre-built VTK. For that, the option must be passed to the first cmake command
# using -D. i.e. to use a separately built VTK, in a clean binary directory, do
# the following:
# cmake -DUSE_EXTERNAL_VTK:BOOL=ON
# Changing the option after the first configure will have no effect.
if (NOT __paraview_configured AND USE_EXTERNAL_VTK)
# the __paraview_configured ensures that USE_EXTERNAL_VTK has no effect except
# in an empty binary dir.
set (PARAVIEW_USING_EXTERNAL_VTK TRUE CACHE INTERNAL "Using external VTK" FORCE)
endif()
set (__paraview_configured TRUE CACHE INTERNAL
"ParaView has been configured" FORCE)
if (PARAVIEW_USING_EXTERNAL_VTK)
find_package(VTK REQUIRED)
message(STATUS "Using External VTK from \"${VTK_DIR}\"")
# Update CMAKE_MODULE_PATH to include VTK's cmake files.
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${VTK_CMAKE_DIR}
${VTK_MODULES_DIR})
# Since importing VTK changes the VTK_MODULES_DIR variable to point to the
# location where VTK's modules are, we update the variable. That way new
# configuration files generated for modules ParaView adds go in the correct
# location.
set (VTK_MODULES_DIR ${PARAVIEW_MODULES_DIR})
else()
# Update CMAKE_MODULE_PATH to include VTK's cmake files.
set (VTK_CMAKE_DIR ${ParaView_SOURCE_DIR}/VTK/CMake)
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${VTK_CMAKE_DIR})
#----------------------------------------------------------------------------------
# Set some flags that affect VTK's modules.
cmake_dependent_option(VTK_NO_PYTHON_THREADS "Disable Python Threads support" ON PARAVIEW_ENABLE_PYTHON OFF)
cmake_dependent_option(VTK_PYTHON_FULL_THREADSAFE "Ensure all calls to Python using GIL" OFF "NOT VTK_NO_PYTHON_THREADS" OFF)
mark_as_advanced(VTK_NO_PYTHON_THREADS VTK_PYTHON_FULL_THREADSAFE)
set(VTK_WRAP_PYTHON ${PARAVIEW_ENABLE_PYTHON}
CACHE INTERNAL "Should VTK Python wrapping be built?" FORCE)
# Turn Cosmo and VPIC MPI build flags based on value of PARAVIEW_USE_MPI
set(VTK_VPIC_USE_MPI ${PARAVIEW_USE_MPI} CACHE BOOL "" FORCE)
mark_as_advanced(VTK_VPIC_USE_MPI)
# Change VTK default, since VTK is set up to enable TK when python wrapping is
# enabled.
option(VTK_USE_TK "Build VTK with Tk support" OFF)
# turn of groups that VTK turns on by default. We will enable modules as
# needed.
set(VTK_Group_StandAlone OFF CACHE BOOL "" FORCE)
set(VTK_Group_Rendering OFF CACHE BOOL "" FORCE)
# set the default backend for PV to be OpenGL
set(VTK_RENDERING_BACKEND_DEFAULT "OpenGL")
endif()
#----------------------------------------------------------------------------------
# Import all essential CMake files. Based on whether we are using internal or
# external VTK, these modules will be imported for the appropropriate locations.
include(vtkModuleAPI)
include(vtkModuleMacros)
include(ParaViewMacros)
#----------------------------------------------------------------------------------
list (APPEND PARAVIEW_MODULE_ROOTS
ThirdParty
Utilities
ParaViewCore
Qt
CoProcessing/Catalyst
CoProcessing/TestDriver)
add_custom_target(ParaViewDoc)
if (PARAVIEW_ENABLE_WEB)
list (APPEND PARAVIEW_MODULE_ROOTS Web)
set (vtkWeb_WWW_DEST ${PARAVIEW_WWW_DIR})
if (PARAVIEW_BUILD_WEB_DOCUMENTATION)
list (APPEND ParaViewModulesDirs Web/Documentation)
endif()
# Setup install rules for Web Applications
install(
DIRECTORY "${PARAVIEW_WWW_DIR}"
DESTINATION "${VTK_INSTALL_DATA_DIR}"
USE_SOURCE_PERMISSIONS
COMPONENT Runtime
)
endif()
include(ParaViewModuleTop)
#----------------------------------------------------------------------------------
# keep VTK cmake variables from polluting the non-advanced space.
mark_as_advanced(
VTK_EXTRA_COMPILER_WARNINGS
VTK_Group_Imaging
VTK_Group_MPI
VTK_Group_ParaView
VTK_Group_ParaViewCore
VTK_Group_ParaViewPython
VTK_Group_ParaViewQt
VTK_Group_ParaViewRendering
VTK_Group_Qt
VTK_Group_Rendering
VTK_Group_StandAlone
VTK_Group_Tk
VTK_Group_Views
VTK_Group_Web
VTK_USE_TK
VTK_WRAP_JAVA
VTK_WRAP_TCL)
mark_as_advanced(
VTK_ANDROID_BUILD
VTK_IOS_BUILD
VTK_USE_CXX11_FEATURES
VTK_USE_LARGE_DATA
VTK_USE_SYSTEM_GLEW
VTK_PYTHON_VERSION)
#------------------------------------------------------------------------------
# Based on state of VTK modules, set up some variables that paraview needs to
# compile optional code.
configure_file(
${ParaView_SOURCE_DIR}/vtkPVConfig.h.in
${ParaView_BINARY_DIR}/vtkPVConfig.h
@ONLY)
if (NOT VTK_INSTALL_NO_DEVELOPMENT)
install(FILES ${ParaView_BINARY_DIR}/vtkPVConfig.h
DESTINATION ${VTK_INSTALL_INCLUDE_DIR}
COMPONENT Development)
endif()
#------------------------------------------------------------------------------
# Client-Server Wrapping for all Modules.
#------------------------------------------------------------------------------
# Wrap all modules ParaView/VTK knows about.
add_subdirectory(Wrapping/ClientServer)
#------------------------------------------------------------------------------
# Package the paraview *.py files.
# This doesn't do the actual Python wrapping of modules. That's managed by VTK.
# This merely builds/installs/packages the ParaView specific *.py files.
#------------------------------------------------------------------------------
add_subdirectory(Wrapping/Python)
#------------------------------------------------------------------------------
# Process modules that need to be add at the end, after all other modules have
# been processed.
if (PARAVIEW_ENABLE_PYTHON)
add_subdirectory(Utilities/PythonInitializer)
endif()
if (PARAVIEW_ENABLE_PYTHON AND PARAVIEW_ENABLE_CATALYST)
find_package(PythonLibs REQUIRED)
vtk_add_module(${CMAKE_CURRENT_SOURCE_DIR}/CoProcessing/PythonCatalyst
module.cmake
${CMAKE_CURRENT_BINARY_DIR}/CoProcessing/PythonCatalyst
Cxx
Python)
list(APPEND VTK_MODULES_ENABLED vtkPVPythonCatalyst)
# the following variable needs to stay vtk-module
set(vtk-module vtkPVPythonCatalyst)
add_subdirectory("${${vtk-module}_SOURCE_DIR}" "${${vtk-module}_BINARY_DIR}")
set(${vtk-module}_WRAP_PYTHON ON)
set_property(GLOBAL APPEND PROPERTY VTK_PYTHON_WRAPPED ${vtk-module})
set(vtkPVPythonCatalyst_INCLUDE_DIRS
${ParaView_BINARY_DIR}/CoProcessing/PythonCatalyst/
${CMAKE_CURRENT_SOURCE_DIR}/CoProcessing/PythonCatalyst/)
list(APPEND VTK_PYTHON_MODULES ${vtk-module})
set(vtkPVPythonCatalyst_HEADERS vtkCPPythonScriptPipeline)
vtk_add_python_wrapping(${vtk-module})
if (BUILD_TESTING)
set (_test_module_name "${vtk-module}-Test-Cxx")
add_subdirectory(
"${${_test_module_name}_SOURCE_DIR}" "${${_test_module_name}_BINARY_DIR}")
endif()
set_property(TARGET vtkPVPythonCatalystPythonD PROPERTY INCLUDE_DIRECTORIES
${VTK_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}
${vtkPVPythonCatalyst_INCLUDE_DIRS}
${ParaView_BINARY_DIR}/CoProcessing/Catalyst)
set_property(TARGET vtkPVPythonCatalystPython PROPERTY INCLUDE_DIRECTORIES
${VTK_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}
${vtkPVPythonCatalyst_INCLUDE_DIRS}
${ParaView_BINARY_DIR}/CoProcessing/Catalyst)
# All the ${vtk-module}Python files are installed by VTK/Wrapping/Python/CMakeLists.txt
# outside the module subsystem. Hence, we need to install the vtkPVPythonCatalystPython
# library explicitly here (BUG #15085).
# This code mirrors the code in VTK/Wrapping/Python/CMakeLists.txt
if (NOT VTK_INSTALL_NO_RUNTIME AND BUILD_SHARED_LIBS AND NOT VTK_INSTALL_NO_LIBRARIES)
install(TARGETS ${vtk-module}Python
EXPORT ${VTK_INSTALL_EXPORT_NAME}
RUNTIME DESTINATION ${VTK_INSTALL_RUNTIME_DIR} COMPONENT RuntimeLibraries
LIBRARY DESTINATION ${VTK_INSTALL_PYTHON_MODULE_DIR}/vtk COMPONENT RuntimeLibraries
ARCHIVE DESTINATION ${VTK_INSTALL_ARCHIVE_DIR} COMPONENT Development
)
endif()
unset(vtk-module)
endif()
#------------------------------------------------------------------------------
# Process ParaView Plugins. These are processed similar to VTK modules.
include(ParaViewPluginsMacros)
# This will set two variables:
# PARAVIEW_PLUGINS_ALL -- all available plugins.
# PARAVIEW_PLUGINLIST - list of library/target names for all enable plugins.
pv_process_plugins(
${CMAKE_CURRENT_SOURCE_DIR}/Plugins
${CMAKE_CURRENT_BINARY_DIR}/Plugins)
if (PARAVIEW_ENABLE_COMMANDLINE_TOOLS)
add_subdirectory(CommandLineExecutables)
endif()
add_subdirectory(Applications)
#------------------------------------------------------------------------------
# We add a mechanism to incorporate arbitrary install rules into the
# build-process.
foreach(rule_file ${PARAVIEW_EXTRA_INSTALL_RULES_FILE})
if (EXISTS "${rule_file}")
message (STATUS "***** Incorporating custom cmake file : ${rule_file} ****")
include("${rule_file}")
message (STATUS "*********************************************************")
endif ()
endforeach()
#------------------------------------------------------------------------------
# Lastly generate the ParaViewConfig.cmake so that other projects can depend on
# ParaView.
# We create two versions of ParaViewConfig.cmake for the build tree and the
# install tree.
# For build tree.
set (PARAVIEW_CONFIG_INSTALLED FALSE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ParaViewConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/ParaViewConfig.cmake @ONLY)
set (PARAVIEW_CONFIG_INSTALLED TRUE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ParaViewConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ParaViewConfig.cmake @ONLY)
configure_file(ParaViewConfigVersion.cmake.in ParaViewConfigVersion.cmake @ONLY)
if (NOT VTK_INSTALL_NO_DEVELOPMENT)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ParaViewConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/ParaViewConfigVersion.cmake
DESTINATION ${VTK_INSTALL_PACKAGE_DIR}
COMPONENT Development
)
install(
DIRECTORY "${ParaView_SOURCE_DIR}/CMake/"
DESTINATION ${VTK_INSTALL_PACKAGE_DIR}
COMPONENT Development
)
#we depend on a couple VTK CMake files that aren't installed but we need
#installed
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/VTK/CMake/TopologicalSort.cmake
${CMAKE_CURRENT_SOURCE_DIR}/VTK/CMake/vtkMakeInstantiator.h.in
${CMAKE_CURRENT_SOURCE_DIR}/VTK/CMake/vtkMakeInstantiator.cxx.in
DESTINATION ${VTK_INSTALL_PACKAGE_DIR}
COMPONENT Development
)
endif()
#-----------------------------------------------------------------------------
# Export all targets at once from the build tree in their final configuration.
# We export these again so that we add ParaView's targets to the list.
get_property(_vtk_targets GLOBAL PROPERTY VTK_TARGETS)
get_property(_vtk_compiletools_targets GLOBAL PROPERTY VTK_COMPILETOOLS_TARGETS)
set (_vtk_all_targets ${_vtk_targets} ${_vtk_compiletools_targets})
if (_vtk_all_targets)
list(REMOVE_DUPLICATES _vtk_all_targets)
export(TARGETS ${_vtk_all_targets} FILE
${ParaView_BINARY_DIR}/ParaViewTargets.cmake)
endif()
# Add a virtual target that can be used to build all compile tools.
add_custom_target(pvCompileTools)
if (_vtk_compiletools_targets)
list(REMOVE_DUPLICATES _vtk_compiletools_targets)
export(TARGETS ${_vtk_compiletools_targets}
FILE ${ParaView_BINARY_DIR}/ParaViewCompileToolsConfig.cmake)
add_dependencies(pvCompileTools
${_vtk_compiletools_targets}
vtkCompileTools)
endif()
unset(_vtk_targets)
unset(_vtk_compiletools_targets)
unset(_vtk_all_targets)
#-----------------------------------------------------------------------------
if (BUILD_EXAMPLES)
# Don't do parallel make when cross compiling.
# BuildExamples.cmake builds the examples as a separate project. This ensures
# that examples can be built by themselves as well as avoiding pollution of
# the ParaView target space with targets (and other things) from examples.
include(${CMAKE_CURRENT_SOURCE_DIR}/Examples/BuildExamples.cmake)
if (BUILD_TESTING AND PARAVIEW_ENABLE_PYTHON AND PARAVIEW_USE_MPI AND PARAVIEW_ENABLE_CATALYST)
set_property(
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}"
APPEND
PROPERTY
TEST_INCLUDE_FILE "${CMAKE_CURRENT_BINARY_DIR}/CatalystExamples.cmake")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CatalystExamples.cmake" "subdirs(${CMAKE_CURRENT_BINARY_DIR}/Examples/All/Catalyst/)")
ENDIF ()
endif()
#-----------------------------------------------------------------------------
if (PARAVIEW_BUILD_CATALYST_ADAPTORS AND NOT WIN32)
# BuildAdaptors.cmake builds the adaptors as a separate project. We mark is
# OPTIONAL for Catalyst packages that don't have the adaptors included.
include(${CMAKE_CURRENT_SOURCE_DIR}/CoProcessing/Adaptors/BuildAdaptors.cmake
OPTIONAL)
endif()
#-----------------------------------------------------------------------------
# Build doxygen documentation.
if (BUILD_DOCUMENTATION)
add_subdirectory(Utilities/Doxygen)
add_subdirectory(Utilities/Sphinx)
add_subdirectory(Documentation)
endif()
#-----------------------------------------------------------------------------
# Configure the CTestCustom.cmake file for exclusions.
configure_file("${ParaView_CMAKE_DIR}/CTestCustom.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake" @ONLY)
#-----------------------------------------------------------------------------
# Create target to download data from the ParaViewData group. This must come
# after all tests have been added that reference the group, so we put it last.
ExternalData_Add_Target(ParaViewData)
if(PARAVIEW_DATA_EXCLUDE_FROM_ALL)
set_property(TARGET ParaViewData PROPERTY EXCLUDE_FROM_ALL 1)
if(BUILD_TESTING)
message(WARNING "PARAVIEW_DATA_EXCLUDE_FROM_ALL is ON so test data "
"(needed because BUILD_TESTING is ON) may not be available "
"without manually building the 'ParaViewData' target.")
endif()
if(TARGET VTKData)
add_dependencies(ParaViewData VTKData)
endif()
endif()
set(is_git FALSE)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
set(is_git TRUE)
endif ()
if (NOT WIN32 AND is_git)
set(source_all)
if (PARAVIEW_SOURCE_TARBALL_TARGETS)
set(source_all ALL)
endif ()
add_custom_target(paraview-source ${source_all})
foreach (format tgz txz zip)
add_custom_target("paraview-source-${format}" ${source_all}
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/Utilities/Maintenance/create_tarballs.bash"
"--${format}"
WORKING_DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}"
COMMENT "Creating source tarball in ${format} format")
add_dependencies("paraview-source-${format}"
ParaViewData)
add_dependencies(paraview-source
"paraview-source-${format}")
endforeach ()
endif ()