cmake_minimum_required(VERSION 3.0) project(VITE CXX C) ### The current version number set (VITE_VERSION_MAJOR 1) set (VITE_VERSION_MINOR 2) set (VITE_VERSION_PATCH 0) find_package(Git) if(GIT_FOUND) execute_process(COMMAND ${GIT_EXECUTABLE} show --no-patch --format="%h %aI" OUTPUT_VARIABLE VITE_WC_INFO ERROR_VARIABLE Git_info_error RESULT_VARIABLE Git_info_result OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT ${Git_info_result} EQUAL 0) set(VITE_WC_REVISION "") set(VITE_WC_DATE "") else() string(REGEX REPLACE "^\"(.*) (.*)\"$" "\\1" VITE_WC_REVISION "${VITE_WC_INFO}") string(REGEX REPLACE "^\"(.*) (.*)\"$" "\\2" VITE_WC_DATE "${VITE_WC_INFO}") endif() endif() if (NOT ${VITE_WC_REVISION} STREQUAL "") set (VITE_VERSION "r${VITE_WC_REVISION}") else() set (VITE_VERSION "${VITE_VERSION_MAJOR}.${VITE_VERSION_MINOR}.${VITE_VERSION_PATCH}") endif() if (NOT ${VITE_WC_DATE} STREQUAL "") set (VITE_DATE "\"${VITE_WC_DATE}\"") else() if(UNIX) set(_vite_SAVED_LC_ALL "$ENV{LC_ALL}") set(ENV{LC_ALL} C) set(_vite_SAVED_TZ "$ENV{TZ}") set(ENV{TZ} "") if (NOT $ENV{SOURCE_DATE_EPOCH} STREQUAL "") execute_process(COMMAND date -d @$ENV{SOURCE_DATE_EPOCH} +"%B %Y" OUTPUT_VARIABLE VITE_DATE ERROR_VARIABLE vite_date_error RESULT_VARIABLE vite_date_result OUTPUT_STRIP_TRAILING_WHITESPACE ) else() execute_process(COMMAND date +"%B %Y" OUTPUT_VARIABLE VITE_DATE ERROR_VARIABLE vite_date_error RESULT_VARIABLE vite_date_result OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() # restore the previous LC_ALL set(ENV{LC_ALL} ${_vite_SAVED_LC_ALL}) # restore the previous TZ set(ENV{TZ} ${_vite_SAVED_TZ}) else() set(VITE_DATE "") endif() endif() message(STATUS "Current revision is ${VITE_VERSION} from ${VITE_DATE}") if(COMMAND CMAKE_POLICY) # CMP0003: add the link paths to the link command as with cmake 2.4 cmake_policy(SET CMP0003 NEW) endif(COMMAND CMAKE_POLICY) ### Misc options option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(BUILD_64bits "Build 64 bits mode" ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are None, Debug, Release, RelWithDebInfo and MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE) # cmake modules setup set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") include (CMakeDetermineSystem) include (CheckCCompilerFlag) include (CheckFunctionExists) include (CheckSymbolExists) include (CheckIncludeFile) include (CheckIncludeFileCXX) include (CheckIncludeFiles) include (CheckLibraryExists) include (CMakeDependentOption) ### Required Packages # Try to find Qt5 : http://forum.openscenegraph.org/viewtopic.php?t=11431 option(USE_QT5 "Use QT5 instead of QT4" ON) if (USE_QT5) set(CMAKE_AUTOMOC ON) #set(CMAKE_AUTORCC ON) #set(CMAKE_AUTOUIC ON) if(CMAKE_VERSION VERSION_LESS "3.7.0") set(CMAKE_INCLUDE_CURRENT_DIR ON) endif() find_package(Qt5 COMPONENTS Widgets Core Xml OpenGL Charts Svg UiTools QUIET ) else(USE_QT5) # Try Qt4 set(CMAKE_AUTOMOC ON) find_package(Qt4 COMPONENTS QtCore QtGui QtXml REQUIRED) set(QT_USE_QTUITOOLS ON) set(QT_USE_QTOPENGL ON) include(${QT_USE_FILE}) endif(USE_QT5) set( OpenGL_GL_PREFERENCE LEGACY ) find_package(OpenGL) #find_package(GLU) ### Optimization options option(VITE_ENABLE_SERIALIZATION "Enable the support of Boost Serialization." OFF) option(VITE_ENABLE_VBO "Enable the support of VBO." ON) option(VITE_ENABLE_MT_PARSERS "Enable multi-threading in parsers." OFF) ### Debug options option(VITE_DBG_MEMORY_USAGE "Enable statistic on memory usage." OFF) cmake_dependent_option(VITE_DBG_MEMORY_TRACE "Enable trace generation of memory usage (requires MEMORY_USAGE)." OFF "VITE_DBG_MEMORY_USAGE" OFF) ### Trace format options option(VITE_ENABLE_OTF "Enable the support of OTF file format." OFF) option(VITE_ENABLE_OTF2 "Enable the support of OTF2 file format." OFF) option(VITE_ENABLE_TAU "Enable the support of TAU file format." OFF) # timeval, timespec, realtime clocks, etc include(CheckStructHasMember) check_struct_has_member("struct timespec" tv_nsec time.h HAVE_TIMESPEC_TV_NSEC) if( NOT HAVE_TIMESPEC_TV_NSEC ) add_definitions(-D_GNU_SOURCE) check_struct_has_member("struct timespec" tv_nsec time.h HAVE_TIMESPEC_TV_NSEC) endif( NOT HAVE_TIMESPEC_TV_NSEC ) check_library_exists(rt clock_gettime "" HAVE_CLOCK_GETTIME) if( HAVE_CLOCK_GETTIME ) set(EXTRA_LIBS "${EXTRA_LIBS};rt") endif( HAVE_CLOCK_GETTIME ) # stdlib, stdio, string, getopt, etc check_include_files(stdarg.h HAVE_STDARG_H) check_function_exists(va_copy HAVE_VA_COPY) if (NOT HAVE_VA_COPY) check_function_exists(__va_copy HAVE_UNDERSCORE_VA_COPY) endif (NOT HAVE_VA_COPY) check_function_exists(asprintf HAVE_ASPRINTF) check_function_exists(vasprintf HAVE_VASPRINTF) check_include_files(getopt.h HAVE_GETOPT_H) check_include_files(unistd.h HAVE_UNISTD_H) check_function_exists(getopt_long HAVE_GETOPT_LONG) check_include_files(errno.h HAVE_ERRNO_H) check_include_files(stddef.h HAVE_STDDEF_H) check_function_exists(getrusage HAVE_GETRUSAGE) check_include_files(limits.h HAVE_LIMITS_H) check_include_files(string.h HAVE_STRING_H) # # Find optional packages # # Search for Boost # Components : filesystem, iostreams, programoptions, python, regex, # serialization, signals, system, thread, wave if(VITE_ENABLE_SERIALIZATION) find_package( Boost COMPONENTS serialization thread iostreams system) endif(VITE_ENABLE_SERIALIZATION) if(VITE_ENABLE_VBO) find_package(GLEW REQUIRED) include_directories(${GLEW_INCLUDE_PATH}) if (GLM_INC) include_directories(${GLM_INC}) list(APPEND CMAKE_REQUIRED_INCLUDES ${GLM_INC}) endif() check_include_file_cxx(glm/glm.hpp HAVE_GLM_H) if (NOT HAVE_GLM_H) message(FATAL_ERROR "libglm-dev package is required, you might specify the include directory where to find glm/glm.hpp through -DGLM_INC=/path/to/glm") endif() endif(VITE_ENABLE_VBO) if(VITE_ENABLE_OTF) find_package(OTF) endif(VITE_ENABLE_OTF) if(VITE_ENABLE_OTF2) find_package(OTF2) endif(VITE_ENABLE_OTF2) if(VITE_ENABLE_TAU) find_package(TAU) endif(VITE_ENABLE_TAU) if(VITE_ENABLE_MT_PARSERS) add_definitions(-DMT_PARSING) endif() if(VITE_DBG_MEMORY_USAGE) add_definitions(-DMEMORY_USAGE) endif() if(VITE_DBG_MEMORY_TRACE) add_definitions(-DMEMORY_TRACE) endif() # Configuration header configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/src/common/ViteConfig.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/src/common/ViteConfig.hpp") add_subdirectory(src) add_subdirectory(plugins) include(CPackLists.txt)