-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 2.8)
# Keep CMake suitably quiet on Cygwin
set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
# machine with no git.
#
# NOTE: when releasing the "-dev" suffix needs to be stripped off!
-set(PROJECT_VERSION "4.5.5-dev")
+set(PROJECT_VERSION "4.6-dev")
set(CUSTOM_VERSION_STRING ""
CACHE STRING "Custom version string (if empty, use hard-coded default)")
mark_as_advanced(CUSTOM_VERSION_STRING)
set(SOVERSION 6)
# It is a bit irritating, but this has to be set separately for now!
SET(CPACK_PACKAGE_VERSION_MAJOR "4")
-SET(CPACK_PACKAGE_VERSION_MINOR "5")
-SET(CPACK_PACKAGE_VERSION_PATCH "5")
+SET(CPACK_PACKAGE_VERSION_MINOR "6")
+#SET(CPACK_PACKAGE_VERSION_PATCH "0")
# Cmake modules/macros are in a subdirectory to keep this file cleaner
# Fix stupid flags on Windows
########################################################################
SET(SHARED_LIBS_DEFAULT ON)
-IF( MSVC )
+IF( WIN32 AND NOT CYGWIN)
+ option(GMX_PREFER_STATIC_LIBS "When finding libraries prefer static system libraries (MT instead of MD)!" ON)
+ mark_as_advanced(GMX_PREFER_STATIC_LIBS)
+ SET(SHARED_LIBS_DEFAULT OFF) #is currently not working on Windows
+
+ IF (GMX_PREFER_STATIC_LIBS)
+ #Only setting Debug and Release flags. Others configurations current not used.
STRING(REPLACE /MD /MT CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
SET(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} CACHE STRING "" FORCE)
STRING(REPLACE /MD /MT CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
- SET(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} CACHE STRING "" FORCE)
- SET(SHARED_LIBS_DEFAULT OFF)
-ENDIF()
-
-IF( WIN32 AND NOT CYGWIN AND CMAKE_C_COMPILER_ID MATCHES "Intel" )
- STRING(REPLACE /GZ /RTC1 CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
- SET(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} CACHE STRING "" FORCE)
+ SET(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} CACHE STRING "" FORCE)
+ STRING(REPLACE /MD /MT CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
+ SET(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} CACHE STRING "" FORCE)
+ STRING(REPLACE /MD /MT CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
+ SET(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} CACHE STRING "" FORCE)
+ ENDIF()
+
+ #Workaround for cmake bug 13174. Replace deprecated options.
+ IF( CMAKE_C_COMPILER_ID MATCHES "Intel" )
STRING(REPLACE /GZ /RTC1 CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
- SET(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} CACHE STRING "" FORCE)
- SET(SHARED_LIBS_DEFAULT OFF)
+ SET(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} CACHE STRING "" FORCE)
+ ENDIF()
+ IF( CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
+ STRING(REPLACE /GZ /RTC1 CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
+ STRING(REPLACE /GX /EHsc CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
+ SET(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} CACHE STRING "" FORCE)
+
+ STRING(REPLACE /GX /EHsc CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
+ SET(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} CACHE STRING "" FORCE)
+ ENDIF()
ENDIF()
-set(GMX_EXTRA_LIBRARIES)
-
-
-
-######################################################################
-# compiler tests
-# these need ot be done early (before further tests).
-#####################################################################
-
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-
-include(gmxCFlags)
-gmx_c_flags()
-
########################################################################
# User input options #
########################################################################
option(GMX_DOUBLE "Use double precision (much slower, use only if you really need it)" OFF)
option(GMX_MPI "Build a parallel (message-passing) version of GROMACS" OFF)
-option(GMX_THREADS "Build a parallel (thread-based) version of GROMACS (cannot be combined with MPI yet)" ON)
+option(GMX_THREAD_MPI "Build a thread-MPI-based multithreaded version of GROMACS (not compatible with MPI)" ON)
option(GMX_SOFTWARE_INVSQRT "Use GROMACS software 1/sqrt" ON)
mark_as_advanced(GMX_SOFTWARE_INVSQRT)
option(GMX_POWERPC_INVSQRT "Use PowerPC hardware 1/sqrt" OFF)
CACHE STRING "Accelerated kernels. Pick one of: auto, none, SSE, BlueGene, Power6, ia64, altivec, fortran")
set(GMX_FFT_LIBRARY "fftw3"
- CACHE STRING "FFT library choices: fftw3,fftw2,mkl,fftpack[built-in]")
+ CACHE STRING "FFT library choices: fftw3,mkl,fftpack[built-in]")
option(GMX_DISABLE_FFTW_MEASURE
"Do not optimize FFTW setups (not needed with SSE)" OFF)
mark_as_advanced(GMX_DISABLE_FFTW_MEASURE)
option(BUILD_SHARED_LIBS "Enable shared libraries (can be problematic with MPI, Windows)" ${SHARED_LIBS_DEFAULT})
option(GMX_MPI_IN_PLACE "Enable MPI_IN_PLACE for MPIs that have it defined" ON)
mark_as_advanced(GMX_MPI_IN_PLACE)
-option(GMX_DLOPEN "Compile with dlopen, needed to read VMD supported file formats" ON)
-mark_as_advanced(GMX_DLOPEN)
+option(GMX_LOAD_PLUGINS "Compile with plugin support, needed to read VMD supported file formats" ON)
+mark_as_advanced(GMX_LOAD_PLUGINS)
option(GMX_IA32_ASM "Add SSE assembly files for IA32" OFF)
option(GMX_X86_64_ASM "Add SSE assembly files for X86_64" OFF)
mark_as_advanced(GMX_X86_64_ASM)
+option(GMX_OPENMP "Enable OpenMP-based mutithreading. " ON)
+
option(USE_VERSION_H "Generate development version string/information" ON)
mark_as_advanced(USE_VERSION_H)
mark_as_advanced(GMX_PREFER_STATIC_LIBS)
endif()
+
+######################################################################
+# compiler tests
+# these need ot be done early (before further tests).
+#####################################################################
+
+# cmake/Check{C,CXX}CompilerFlag.cmake are lifted from CMake git next
+# branch (proposed for v2.8.9) to be able to detect invalid options
+# with the Intel Compilers.
+# Remove these files from the source tree when a CMake version that
+# includes the features in question becomes required.
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
+include(gmxCFlags)
+gmx_c_flags()
+
+
########################################################################
# Set up binary and library suffixing
########################################################################
set (GMX_LIBS_SUFFIX "_gpu")
endif(GMX_OPENMM)
mark_as_advanced(FORCE GMX_BINARY_SUFFIX GMX_LIBS_SUFFIX)
- message(STATUS "Using default binary suffix: \"${GMX_BINARY_SUFFIX}\"")
- message(STATUS "Using default library suffix: \"${GMX_LIBS_SUFFIX}\"")
+ if (NOT SUFFIX_QUIETLY)
+ message(STATUS "Using default binary suffix: \"${GMX_BINARY_SUFFIX}\"")
+ message(STATUS "Using default library suffix: \"${GMX_LIBS_SUFFIX}\"")
+ endif (NOT SUFFIX_QUIETLY)
else(GMX_DEFAULT_SUFFIX)
mark_as_advanced(CLEAR GMX_BINARY_SUFFIX GMX_LIBS_SUFFIX)
- message(STATUS "Using manually set binary suffix: \"${GMX_BINARY_SUFFIX}\"")
- message(STATUS "Using manually set library suffix: \"${GMX_LIBS_SUFFIX}\"")
+ if (NOT SUFFIX_QUIETLY)
+ message(STATUS "Using manually set binary suffix: \"${GMX_BINARY_SUFFIX}\"")
+ message(STATUS "Using manually set library suffix: \"${GMX_LIBS_SUFFIX}\"")
+ endif (NOT SUFFIX_QUIETLY)
endif(GMX_DEFAULT_SUFFIX)
+set(SUFFIX_QUIETLY TRUE CACHE INTERNAL "")
set(PKG_CFLAGS "")
if(GMX_DOUBLE)
########################################################################
#Process MPI settings
########################################################################
-include(CheckCSourceCompiles) # for gmxTestMPI_IN_PLACE
-if(GMX_MPI)
- if(GMX_THREADS)
- #message(FATAL_ERROR "Thread-based parallelization conflicts with MPI.")
- set(GMX_THREADS OFF CACHE BOOL
- "Thread-based parallelization conflicts with MPI." FORCE)
- endif(GMX_THREADS)
- find_package(MPI)
- if(MPI_FOUND)
- set(GROMACS_C_FLAGS ${GROMACS_FLAGS} ${MPI_COMPILE_FLAGS})
- set(GROMACS_LINKER_FLAGS ${GROMACS_LINKER_FLAGS} ${MPI_LINK_FLAGS})
-
- include_directories(${MPI_INCLUDE_PATH})
- list(APPEND GMX_EXTRA_LIBRARIES ${MPI_LIBRARIES})
- if(GMX_FAHCORE)
- add_definitions( -DMPI ) #for FAHCORE
- endif(GMX_FAHCORE)
- include(gmxTestMPI_IN_PLACE)
- if (GMX_MPI_IN_PLACE)
- gmx_test_mpi_in_place(MPI_IN_PLACE_EXISTS)
- endif (GMX_MPI_IN_PLACE)
-
- # test for unsuitable versions of OpenMPI
- exec_program(${MPIEXEC}
- ARGS --version
- OUTPUT_VARIABLE MPI_TYPE
- RETURN_VALUE MPI_EXEC_RETURN)
- if(MPI_EXEC_RETURN EQUAL 0)
- if(MPI_TYPE MATCHES "Open MPI|OpenRTE")
- string(REGEX MATCH "[0-9]+\\.[0-9]*\\.?[0-9]*" MPI_VERSION ${MPI_TYPE})
- if(MPI_VERSION VERSION_LESS "1.4.1")
- MESSAGE(WARNING "
- There are known problems with OpenMPI version < 1.4.1.
- Please consider updating your OpenMPI.")
- endif(MPI_VERSION VERSION_LESS "1.4.1")
- unset(MPI_VERSION)
- else(MPI_TYPE MATCHES "Open MPI|OpenRTE")
- # This is not OpenMPI, so give the old generic warning message
- MESSAGE(WARNING "
- There are known problems with some MPI implementations:
- MVAPICH2 version <= 1.4.1
- Please consider updating your MPI if applicable.")
- endif(MPI_TYPE MATCHES "Open MPI|OpenRTE")
- unset(MPI_TYPE)
- endif(MPI_EXEC_RETURN EQUAL 0)
- else(MPI_FOUND)
- message(FATAL_ERROR "MPI support requested, but no MPI compiler found.")
- endif(MPI_FOUND)
- include(gmxTestCatamount)
- gmx_test_catamount(GMX_CRAY_XT3)
- if(GMX_CRAY_XT3)
- set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_CRAY_XT3")
- set(GMX_NO_SYSTEM 1)
- set(GMX_NO_NICE 1)
- endif(GMX_CRAY_XT3)
- set(GMX_LIB_MPI 1)
- set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_LIB_MPI")
-endif(GMX_MPI)
-
+include(gmxManageMPI)
#######################################################################
# Check for options incompatible with OpenMM build #
#######################################################################
if(GMX_OPENMM)
- cmake_minimum_required(VERSION 2.6.4)
# we'll use the built-in fft to avoid unnecessary dependencies
string(TOUPPER ${GMX_FFT_LIBRARY} GMX_FFT_LIBRARY)
if(NOT ${GMX_FFT_LIBRARY} STREQUAL "FFTPACK")
if(GMX_MPI)
message(FATAL_ERROR "The OpenMM build is not compatible with MPI!")
endif(GMX_MPI)
- if(GMX_THREADS)
- message(STATUS "Threads are not compatible with OpenMM build, disabled!")
- set(GMX_THREADS OFF CACHE BOOL
- "Threads are not compatible with OpenMM build, disabled!" FORCE)
- endif(GMX_THREADS)
+ if(GMX_THREAD_MPI)
+ message(STATUS "Thread-MPI not compatible with OpenMM, disabled!")
+ set(GMX_THREAD_MPI OFF CACHE BOOL
+ "Thread-MPI not compatible with OpenMM build, disabled!" FORCE)
+ endif(GMX_THREAD_MPI)
+ if(GMX_OPENMP)
+ message(STATUS "OpenMP multithreading not compatible with OpenMM, disabled")
+ set(GMX_OPENMP OFF CACHE BOOL
+ "OpenMP multithreading not compatible with OpenMM, disabled!" FORCE)
+ endif()
if(GMX_SOFTWARE_INVSQRT)
set(GMX_SOFTWARE_INVSQRT OFF CACHE STRING
"The OpenMM build does not need GROMACS software 1/sqrt!" FORCE)
endif()
# mark as advanced the unused variables
mark_as_advanced(FORCE GMX_ACCELERATION GMX_MPI GMX_FFT_LIBRARY
- GMX_QMMM_PROGRAM GMX_THREADS GMX_DOUBLE)
+ GMX_QMMM_PROGRAM GMX_THREAD_MPI GMX_DOUBLE)
else(GMX_OPENMM)
mark_as_advanced(CLEAR GMX_ACCELERATION GMX_MPI GMX_FFT_LIBRARY
- GMX_QMMM_PROGRAM GMX_THREADS GMX_DOUBLE)
+ GMX_QMMM_PROGRAM GMX_THREAD_MPI GMX_DOUBLE)
endif(GMX_OPENMM)
check_function_exists(fileno HAVE_FILENO)
check_function_exists(_commit HAVE__COMMIT)
check_function_exists(lstat HAVE_LSTAT)
+check_function_exists(sigaction HAVE_SIGACTION)
include(CheckLibraryExists)
check_library_exists(m sqrt "" HAVE_LIBM)
endif(X11_FOUND)
endif(GMX_X11)
-if(GMX_THREADS)
- set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_THREADS")
+if(GMX_THREAD_MPI)
+ set(PKG_CFLAGS "${PKG_CFLAGS} -DGMX_THREAD_MPI")
include(ThreadMPI)
set(THREAD_MPI_LIB thread_mpi)
set(GMX_MPI 1)
string(TOUPPER ${GMX_FFT_LIBRARY} ${GMX_FFT_LIBRARY})
- if(${GMX_FFT_LIBRARY} STREQUAL "FFTW2")
- message(FATAL_ERROR "FFTW2 can't be used with threads. Try fftw3 or mkl.")
- endif()
-endif(GMX_THREADS)
+endif(GMX_THREAD_MPI)
if(GMX_OPENMM)
set(CUDA_BUILD_EMULATION OFF)
find_package(OpenMM)
endif(GMX_OPENMM)
+if(GMX_OPENMP)
+ find_package(OpenMP REQUIRED)
+ set(GROMACS_C_FLAGS "${OpenMP_C_FLAGS} ${GROMACS_C_FLAGS}")
+ set(GROMACS_CXX_FLAGS "${OpenMP_CXX_FLAGS} ${GROMACS_CXX_FLAGS}")
+ add_definitions(-DGMX_OPENMP)
+endif()
+
if(APPLE)
find_library(ACCELERATE_FRAMEWORK Accelerate)
list(APPEND GMX_EXTRA_LIBRARIES ${ACCELERATE_FRAMEWORK})
set(GMX_CYGWIN 1)
endif(CYGWIN)
+if(WIN32 AND NOT CYGWIN)
+ set(GMX_NATIVE_WINDOWS 1)
+endif()
+
# only bother with finding git and using version.h if the source is a git repo
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
if(USE_VERSION_H)
- # We need at least git v1.5.1 be able to parse git's date output. If not
+ # We need at least git v1.5.3 be able to parse git's date output. If not
- # fund or the version is too small, we can't generate version information.
- find_package(Git 1.5.3)
- # this should at some point become VERSION_LESS
- if(NOT Git_FOUND OR Git_VERSION STRLESS "1.5.3")
- message("No compatible git version found, won't be able to generate proper development version information.")
- set(USE_VERSION_H OFF)
+ # found or the version is too small, we can't generate version information.
+ find_package(Git)
+
+ # Find out the git version
+ if(GIT_FOUND AND NOT GIT_VERSION)
+ execute_process(COMMAND ${GIT_EXECUTABLE} "--version"
+ OUTPUT_VARIABLE _exec_out
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REGEX REPLACE "git version (.*)" "\\1" GIT_VERSION ${_exec_out})
+ set(GIT_VERSION ${GIT_VERSION} CACHE STRING "Git version")
+ mark_as_advanced(GIT_VERSION)
+ endif()
+
- if(NOT GIT_FOUND OR GIT_VERSION VERSION_LESS "1.5.1")
++ if(NOT GIT_FOUND OR GIT_VERSION VERSION_LESS "1.5.3")
+ message("No compatible git version found, won't be able to generate proper development version information.")
+ set(USE_VERSION_H OFF)
endif()
endif()
else()
set(USE_VERSION_H OFF)
endif()
-if (GMX_DLOPEN)
- list(APPEND GMX_EXTRA_LIBRARIES ${CMAKE_DL_LIBS})
- set(PKG_DL_LIBS "-l${CMAKE_DL_LIBS}")
-else(GMX_DLOPEN)
- set(PKG_DL_LIBS)
-endif (GMX_DLOPEN)
-
########################################################################
# Generate development version info for cache
########################################################################
add_definitions( -DHAVE_CONFIG_H )
include_directories(${CMAKE_BINARY_DIR}/src)
+include_directories(${CMAKE_BINARY_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/include)
include(gmxCheckBuildUserTime)
check_function_exists(fseeko HAVE_FSEEKO)
include(gmxTestSignal)
-gmx_test_retsigtype(RETSIGTYPE)
gmx_test_sigusr1(HAVE_SIGUSR1)
include(gmxTestInline)
set(GMX_SOFTWARE_INVSQRT OFF CACHE BOOL "Do not use software reciprocal square root on BlueGene" FORCE)
set(GMX_POWERPC_INVSQRT ON CACHE BOOL "Use hardware reciprocal square root on BlueGene" FORCE)
set(GMX_X11 OFF CACHE BOOL "X11 not compatible with BlueGene, disabled!" FORCE)
- set(GMX_THREADS OFF CACHE BOOL "Threads not compatible with BlueGene, disabled!" FORCE)
+ set(GMX_THREAD_MPI OFF CACHE BOOL "Thread-MPI not compatible with BlueGene, disabled!" FORCE)
set(GMX_MPI ON CACHE BOOL "Use MPI on BlueGene" FORCE)
elseif(${GMX_ACCELERATION} STREQUAL "POWER6")
set(GMX_POWER6 1)
endif(${GMX_ACCELERATION} STREQUAL "NONE")
if(GMX_FORTRAN OR GMX_POWER6)
- if (GMX_THREADS)
- message(FATAL_ERROR "FORTRAN/POWER6 is incompatible with threads and only provides a speed-up on certain IBM compilers. Disable FORTRAN (or threads if you really want to use FORTRAN kernels).")
- endif(GMX_THREADS)
+ if (GMX_THREAD_MPI)
+ message(FATAL_ERROR "FORTRAN/POWER6 is incompatible with thread-MPI and only provides a speed-up on certain IBM compilers. Disable FORTRAN (or threads if you really want to use FORTRAN kernels).")
+ endif(GMX_THREAD_MPI)
enable_language(Fortran)
include(FortranCInterface)
discover_fortran_mangling(prefix isupper suffix extra_under_score found)
set(PKG_FFT "")
set(PKG_FFT_LIBS "")
if(${GMX_FFT_LIBRARY} STREQUAL "FFTW3")
-# MESSAGE(STATUS "Using external FFT library - fftw3")
if(GMX_DOUBLE)
- find_package(FFTW3 REQUIRED)
- include_directories(${FFTW3_INCLUDE_DIR})
- set(FFT_LIBRARIES ${FFTW3_LIBRARIES})
- set(PKG_FFT "fftw3")
+ find_package(FFTW 3 COMPONENTS fftw)
else(GMX_DOUBLE)
- find_package(FFTW3F REQUIRED)
- include_directories(${FFTW3F_INCLUDE_DIR})
- set(FFT_LIBRARIES ${FFTW3F_LIBRARIES})
- set(PKG_FFT "fftw3f")
+ find_package(FFTW 3 COMPONENTS fftwf)
endif(GMX_DOUBLE)
-
- if(NOT FFTW3_FOUND AND NOT FFTW3F_FOUND)
- MESSAGE(FATAL_ERROR "Cannot find fftw3 (with correct precision). Fix it, choose another FFT library, or use the Gromacs built-in fftpack (slower)!")
- endif(NOT FFTW3_FOUND AND NOT FFTW3F_FOUND)
+ if(NOT FFTW_FOUND)
+ MESSAGE(FATAL_ERROR "Cannot find FFTW3 (with correct precision - libfftw3f for single precision GROMACS or libfftw3 for double precision GROMACS). Fix it, choose another FFT library, or use the Gromacs built-in fftpack (slower)!")
+ endif(NOT FFTW_FOUND)
+ include_directories(${FFTW_INCLUDE_DIRS})
+ set(FFT_LIBRARIES ${FFTW_LIBRARIES})
+ set(PKG_FFT "${FFTW_PKG}")
set(GMX_FFT_FFTW3 1)
-elseif(${GMX_FFT_LIBRARY} STREQUAL "FFTW2")
-# MESSAGE(STATUS "Using external FFT library - fftw2")
- if(GMX_DOUBLE)
- find_package(FFTW2 REQUIRED)
- else(GMX_DOUBLE)
- find_package(FFTW2F REQUIRED)
- endif(GMX_DOUBLE)
+ if (${GMX_ACCELERATION} STREQUAL "SSE" AND NOT FFTW_HAVE_SSE)
+ message(WARNING "The fftw library found is compiled without SSE support, which makes it slow. Consider recompiling it or contact your admin")
+ endif (${GMX_ACCELERATION} STREQUAL "SSE" AND NOT FFTW_HAVE_SSE)
- if(NOT FFTW2_FOUND)
- MESSAGE(FATAL_ERROR "Cannot find fftw2 (with correct precision). Fix it, choose another FFT library, or use the Gromacs built-in fftpack (slower)!")
- endif(NOT FFTW2_FOUND)
- include_directories(${FFTW2_INCLUDE_DIR})
- set(FFT_LIBRARIES ${FFTW2_LIBRARIES})
- set(PKG_FFT_LIBS ${FFTW2_LIBRARIES})
-
- if("${FFTW2_LIBRARIES}" MATCHES "dfftw")
- set(FFTW2_NAME_DFFTW 1)
- elseif("${FFTW2_LIBRARIES}" MATCHES "sfftw")
- set(FFTW2_NAME_SFFTW 1)
- else("${FFTW2_LIBRARIES}" MATCHES "dfftw")
- set(FFTW2_NAME_FFTW 1)
- endif("${FFTW2_LIBRARIES}" MATCHES "dfftw")
-
- set(GMX_FFT_FFTW2 1)
elseif(${GMX_FFT_LIBRARY} STREQUAL "MKL")
# MESSAGE(STATUS "Using external FFT library - Intel MKL")
find_package(MKL REQUIRED)
MESSAGE(STATUS "Using internal FFT library - fftpack")
set(GMX_FFT_FFTPACK 1)
else(${GMX_FFT_LIBRARY} STREQUAL "FFTW3")
- MESSAGE(FATAL_ERROR "Invalid FFT library setting: ${GMX_FFT_LIBRARY}. Choose one of: fftw3, fftw2, mkl, acml, fftpack")
+ MESSAGE(FATAL_ERROR "Invalid FFT library setting: ${GMX_FFT_LIBRARY}. Choose one of: fftw3, mkl, fftpack")
endif(${GMX_FFT_LIBRARY} STREQUAL "FFTW3")
# MKL has BLAS/LAPACK routines
mark_as_advanced(GMX_EXTERNAL_LAPACK)
mark_as_advanced(GMX_EXTERNAL_BLAS)
+set(GMX_USE_PLUGINS OFF CACHE INTERNAL "Whether GROMACS will really try to compile support for VMD plugins")
+set(GMX_VMD_PLUGIN_PATH)
+mark_as_advanced(GMX_VMD_PLUGIN_PATH)
+
+if(GMX_LOAD_PLUGINS)
+ if(CYGWIN OR NOT WIN32)
+ # Native Windows does not have, nor need dlopen
+ # Note that WIN32 is set with Cygwin, but Cygwin needs dlopen to use plug-ins
+ include(gmxTestdlopen)
+ gmx_test_dlopen(HAVE_DLOPEN)
+ endif()
+
+ find_package(VMD)
+
+ # Test for unsuitable versions of VMD
+
+ if(VMD_FOUND AND NOT GMX_VMD_PLUGIN_PATH)
+ message(STATUS "Checking for suitable VMD version")
+ exec_program(${VMD_EXECUTABLE}
+ ARGS --help
+ OUTPUT_VARIABLE VMD_HELP
+ RETURN_VALUE VMD_EXEC_RETURN)
+
+ if(VMD_EXEC_RETURN EQUAL 0)
+ # This is the accepted idiom for subexpression matching, unfortunately
+ string(REGEX REPLACE ".*VMD for .*, version ([0-9]+\\.[0-9]*\\.?[0-9]*).*" "\\1" VMD_VERSION ${VMD_HELP})
+ string(REGEX REPLACE ".*VMD for (.*), version .*" "\\1" VMD_ARCH ${VMD_HELP})
+
+ if(VMD_VERSION VERSION_LESS "1.8")
+ MESSAGE(WARNING "Found VMD version ${VMD_VERSION}, but GROMACS needs at least 1.8")
+ unset(VMD_EXECUTABLE)
+ set(VMD_FOUND FALSE)
+ else()
+ message(STATUS "VMD version ${VMD_VERSION} is suitable")
+ if(DEFINED ENV{VMDDIR})
+ # This permits GROMACS to avoid hard-coding a fall-back
+ # path that it can tell right now would be useless.
+ set(GMX_VMD_PLUGIN_PATH "$ENV{VMDDIR}/plugins/${VMD_ARCH}/molfile" CACHE PATH "Path to VMD plugins for molfile I/O")
+ else()
+ set(GMX_VMD_PLUGIN_PATH "/usr/local/lib/vmd/plugins/*/molfile" CACHE PATH "Path to VMD plugins for molfile I/O")
+ endif()
+ endif()
+
+ # clean up
+ unset(VMD_HELP)
+ unset(VMD_VERSION)
+ unset(VMD_ARCH)
+ endif()
+ endif()
+
+ # so, should we use plug-ins?
+ if((WIN32 AND NOT CYGWIN) OR (HAVE_DLOPEN AND BUILD_SHARED_LIBS))
+ if (NOT VMD_QUIETLY)
+ MESSAGE(STATUS "Found the ability to use plug-ins when building shared libaries, so will compile to use plug-ins (e.g. to read VMD-supported file formats).")
+ endif(NOT VMD_QUIETLY)
+ set(GMX_USE_PLUGINS ON)
+ list(APPEND GMX_EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) # magic cross-platform pre-set variable for dlopen library
+ set(PKG_DL_LIBS "-l${CMAKE_DL_LIBS}")
+ else()
+ set(PKG_DL_LIBS)
+ endif()
+endif(GMX_LOAD_PLUGINS)
+set(VMD_QUIETLY TRUE CACHE INTERNAL "")
+
# Math and thread libraries must often come after all others when linking...
if(HAVE_LIBM)
list(APPEND GMX_EXTRA_LIBRARIES m)
# Generate Gromacs development build version information.
#
- # The script generates version information for a build from a development
- # source tree based on git repository information.
+ # The script generates version information for a build from a development
+ # source tree based on git repository information.
# It is assumed that by default the script is run in cmake script mode.
- # If *not* called in script mode but used in generating cache variables,
+ # If *not* called in script mode but used in generating cache variables,
# GEN_VERSION_INFO_INTERNAL has to be set ON.
#
- # The following variables have to be previously defined:
+ # The following variables have to be previously defined:
-# Git_EXECUTABLE - path to git binary
-# Git_VERSION - git version (if not defined it's assumed that >=1.5.3)
+# GIT_EXECUTABLE - path to git binary
+# GIT_VERSION - git version (if not defined it's assumed that >=1.5.3)
- # PROJECT_VERSION - hard-coded version string, should have the following structure:
- # VERSION[-dev-SUFFIX] where the VERSION can have any form and the suffix
+ # PROJECT_VERSION - hard-coded version string, should have the following structure:
+ # VERSION[-dev-SUFFIX] where the VERSION can have any form and the suffix
# is optional but should start with -dev
# PROJECT_SOURCE_DIR - top level source directory (which has to be in git)
- # VERSION_C_CMAKEIN - path to the version.c.cmakein file
+ # VERSION_C_CMAKEIN - path to the version.c.cmakein file
# VERSION_C_OUT - path to the version.c output file
#
- # Output:
- # i) Script mode: version.c configured from the input version.c.cmakein using
- # the variables listed below.
+ # Output:
+ # i) Script mode: version.c configured from the input version.c.cmakein using
+ # the variables listed below.
# ii) Cache variable mode: the varables below are set in cache.
#
- # GMX_PROJECT_VERSION_STR - version string
- # GMX_GIT_HEAD_HASH - git hash of current local HEAD
- # GMX_GIT_REMOTE_HASH - git hash of the first ancestor commit from the
- # main Gromacs repository
- #
- # Szilard Pall (pszilard@cbr.su.se)
+ # GMX_PROJECT_VERSION_STR - version string
+ # GMX_GIT_HEAD_HASH - git hash of current local HEAD
+ # GMX_GIT_REMOTE_HASH - git hash of the first ancestor commit from the
+ # main Gromacs repository
+ #
+ # Szilard Pall (pszilard@cbr.su.se)
- if(${PROJECT_VERSION} STREQUAL "")
+ if("${PROJECT_VERSION}" STREQUAL "")
message(FATAL_ERROR "PROJECT_VERSION undefined!")
endif()
set(VER ${PROJECT_VERSION})
- # if we're generating variables for cache unset the variables
+ # if we're generating variables for cache unset the variables
if(GEN_VERSION_INFO_INTERNAL)
set(GMX_PROJECT_VERSION_STR)
set(GMX_GIT_HEAD_HASH)
set(GMX_GIT_REMOTE_HASH)
endif()
- # bail if the source tree is not in a git repository
+ # bail if the source tree is not in a git repository
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/.git")
- message(FATAL_ERROR " Project source directory ${PROJECT_SOURCE_DIR} not in git")
+ message(FATAL_ERROR "Project source directory ${PROJECT_SOURCE_DIR} not in git")
endif()
- # if git executable xists and it's compatible version
- # build the development version string
+ # if git executable exists and it's compatible version
+ # build the development version string
# this should at some point become VERSION_LESS
- if(EXISTS ${GIT_EXECUTABLE} AND NOT ${GIT_VERSION} STRLESS "1.5.1")
-if(EXISTS "${Git_EXECUTABLE}" AND NOT Git_VERSION STRLESS "1.5.3")
- # refresh git index
- execute_process(COMMAND ${Git_EXECUTABLE} update-index -q --refresh
++if(EXISTS "${GIT_EXECUTABLE}" AND NOT GIT_VERSION STRLESS "1.5.3")
+ # refresh git index
+ execute_process(COMMAND ${GIT_EXECUTABLE} update-index -q --refresh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
TIMEOUT 5
OUTPUT_QUIET
ERROR_VARIABLE EXEC_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE
- )
+ )
- # get the full hash of the current HEAD
+ # get the full hash of the current HEAD
- execute_process(COMMAND ${Git_EXECUTABLE} rev-parse HEAD
+ execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE GMX_GIT_HEAD_HASH
+ OUTPUT_VARIABLE HEAD_HASH
ERROR_VARIABLE EXEC_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
+ set(GMX_GIT_HEAD_HASH ${HEAD_HASH})
# extract the shortened hash (7 char)
- string(SUBSTRING ${GMX_GIT_HEAD_HASH} 0 5 HEAD_HASH_SHORT)
- execute_process(COMMAND ${Git_EXECUTABLE} rev-parse --short HEAD
++ execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE HEAD_HASH_SHORT
+ ERROR_VARIABLE EXEC_ERR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
# if there are local uncommitted changes, the build gets labeled "dirty"
- execute_process(COMMAND ${Git_EXECUTABLE} diff-index --name-only HEAD
+ execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE SRC_LOCAL_CHANGES
ERROR_VARIABLE EXEC_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- if(NOT ${SRC_LOCAL_CHANGES} STREQUAL "")
+ )
+ if(NOT "${SRC_LOCAL_CHANGES}" STREQUAL "")
set(DIRTY_STR "-dirty")
set(GMX_GIT_HEAD_HASH "${GMX_GIT_HEAD_HASH} (dirty)")
endif()
- # if git is older then 1.5.3 we need to extract the RFC2822 style date
- # and massage it, otherwise the ISO 8601 format is more trusworthy
- # this should at some point become VERSION_LESS
- if (NOT GIT_VERSION STREQUAL "" AND GIT_VERSION STRLESS "1.5.3")
- execute_process(COMMAND ${GIT_EXECUTABLE} rev-list -n1 "--pretty=format:%cD" HEAD
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE HEAD_DATE
- ERROR_VARIABLE EXEC_ERR
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- # date format: day, D Mmm YYYY -> YYYY-MM-DD
- # if the day is single sigit need to insert a "0"
- string(REGEX REPLACE ".*(, )([0-9] )(.*)" "\\10\\2\\3"
- HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE ".*, ([0-9][0-9]) ([A-Z][a-z]+) ([0-9]+).*" "\\3\\2\\1"
- HEAD_DATE ${HEAD_DATE})
- string(TOUPPER ${HEAD_DATE} HEAD_DATE)
- string(REGEX REPLACE "JAN" "01" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "FEB" "02" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "MAR" "03" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "APR" "04" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "MAY" "05" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "JUN" "06" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "JUL" "07" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "AUG" "08" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "SEP" "09" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "OCT" "10" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "NOV" "11" HEAD_DATE ${HEAD_DATE})
- string(REGEX REPLACE "DEC" "12" HEAD_DATE ${HEAD_DATE})
- else()
- # get the date of the HEAD commit
- execute_process(COMMAND ${GIT_EXECUTABLE} rev-list -n1 "--pretty=format:%ci" HEAD
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE HEAD_DATE
- ERROR_VARIABLE EXEC_ERR
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- string(REGEX REPLACE "\n| " ";" HEAD_DATE ${HEAD_DATE})
- list(GET HEAD_DATE 2 HEAD_DATE)
- string(REGEX REPLACE "-" "" HEAD_DATE ${HEAD_DATE})
- endif()
+ # get the date of the HEAD commit
- execute_process(COMMAND ${Git_EXECUTABLE} rev-list -n1 "--pretty=format:%ci" HEAD
++ execute_process(COMMAND ${GIT_EXECUTABLE} rev-list -n1 "--pretty=format:%ci" HEAD
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE HEAD_DATE
+ ERROR_VARIABLE EXEC_ERR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ string(REGEX REPLACE "\n| " ";" HEAD_DATE "${HEAD_DATE}")
+ list(GET HEAD_DATE 2 HEAD_DATE)
+ string(REGEX REPLACE "-" "" HEAD_DATE "${HEAD_DATE}")
# compile the version string suffix
- set(VERSION_STR_SUFFIX "${HEAD_DATE}-${HEAD_HASH_SHORT}${DIRTY_STR}")
-
- # find the name of the remote which is located on the official gromacs git server
- execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp
- "remote\\..*\\.url" "git\\.gromacs\\.org[:|/]gromacs"
+ set(VERSION_STR_SUFFIX "${HEAD_DATE}-${HEAD_HASH_SHORT}${DIRTY_STR}")
+
+ # find the names of remotes that are located on the official gromacs
+ # git/gerrit servers
- execute_process(COMMAND ${Git_EXECUTABLE} config --get-regexp
++ execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp
+ "remote\\..*\\.url" "\\.gromacs\\.org[:/].*gromacs(\\.git)?$"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE GMX_REMOTE
+ OUTPUT_VARIABLE GMX_REMOTES
ERROR_VARIABLE EXEC_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
- # if there's a remote from the gromacs git, try to find ancestor commits of the
- # current HEAD from this remote; otherwise, label the buld "unknown"
- if(GMX_REMOTE STREQUAL "")
+ # if there are remotes from the gromacs git servers, try to find ancestor
+ # commits of the current HEAD from this remote;
+ # otherwise, label the build "unknown"
+ if("${GMX_REMOTES}" STREQUAL "")
set(VERSION_STR_SUFFIX "${VERSION_STR_SUFFIX}-unknown")
- set(GMX_GIT_REMOTE_HASH "unknown")
- else()
- string(REGEX REPLACE "remote\\.(.*)\\.url.*" "\\1" GMX_REMOTE ${GMX_REMOTE})
- # find the first ancestor in the list provided by rev-list (not
- # necessarily the last though) which is in GMX_REMOTE, extract the
- # hash and the number of commits HEAD is ahead with
- execute_process(COMMAND ${GIT_EXECUTABLE} rev-list --max-count=100 HEAD
+ set(GMX_GIT_REMOTE_HASH "unknown")
+ else()
+ string(REPLACE "\n" ";" GMX_REMOTES ${GMX_REMOTES})
+ # construct a command pipeline that produces a reverse-time-ordered
+ # list of commits and their annotated names in GMX_REMOTES
+ # the max-count limit is there to put an upper bound on the execution time
- set(BASEREVCOMMAND "COMMAND ${Git_EXECUTABLE} rev-list --max-count=1000 HEAD")
++ set(BASEREVCOMMAND "COMMAND ${GIT_EXECUTABLE} rev-list --max-count=1000 HEAD")
+ foreach(REMOTE ${GMX_REMOTES})
+ string(REGEX REPLACE "remote\\.(.*)\\.url.*" "\\1" REMOTE ${REMOTE})
- set(BASEREVCOMMAND "${BASEREVCOMMAND} COMMAND ${Git_EXECUTABLE} name-rev --stdin --refs=refs/remotes/${REMOTE}/*")
++ set(BASEREVCOMMAND "${BASEREVCOMMAND} COMMAND ${GIT_EXECUTABLE} name-rev --stdin --refs=refs/remotes/${REMOTE}/*")
+ endforeach(REMOTE)
+ # this is necessary for CMake to properly split the variable into
+ # parameters for execute_process().
+ string(REPLACE " " ";" BASEREVCOMMAND ${BASEREVCOMMAND})
+ # find the first ancestor in the list provided by rev-list (not
+ # necessarily the last though) which is in GMX_REMOTE, extract the
+ # hash and the number of commits HEAD is ahead with
+ execute_process(${BASEREVCOMMAND}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE ANCESTOR_LIST
)
- string(REGEX REPLACE "\n" ";" ANCESTOR_LIST ${ANCESTOR_LIST})
+ string(REGEX REPLACE "\n" ";" ANCESTOR_LIST "${ANCESTOR_LIST}")
set(AHEAD 0)
set(GMX_GIT_REMOTE_HASH "")
- foreach(OBJ ${ANCESTOR_LIST})
- execute_process(COMMAND ${GIT_EXECUTABLE} name-rev --refs=refs/remotes/${GMX_REMOTE}/* ${OBJ}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE HASH_AND_REVNAME
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- string(REGEX REPLACE "\n" "" HASH_AND_REVNAME ${HASH_AND_REVNAME})
- string(REGEX REPLACE " " ";" HASH_AND_REVNAME ${HASH_AND_REVNAME})
- list(GET HASH_AND_REVNAME 0 GMX_GIT_REMOTE_HASH)
- list(GET HASH_AND_REVNAME 1 REVNAME)
+ foreach(ANCESTOR ${ANCESTOR_LIST})
+ string(REPLACE "\n" "" HASH_AND_REVNAMES "${ANCESTOR}")
+ string(REPLACE " " ";" HASH_AND_REVNAMES "${HASH_AND_REVNAMES}")
+ list(LENGTH HASH_AND_REVNAMES COUNT)
# stop and set the hash if we have a hit, otherwise loop and count
# how far ahead is the local repo
- if(${REVNAME} MATCHES "remotes/${GMX_REMOTE}/.*")
- set(GMX_GIT_REMOTE_HASH
- "${GMX_GIT_REMOTE_HASH} (${AHEAD} newer local commits)")
+ if(COUNT GREATER 1)
+ LIST(GET HASH_AND_REVNAMES 0 GMX_GIT_REMOTE_HASH)
break()
- else()
- math(EXPR AHEAD ${AHEAD}+1)
endif()
- endforeach(OBJ)
- # mark the build "local" if didn't find any commits that are from
+ math(EXPR AHEAD ${AHEAD}+1)
+ endforeach(ANCESTOR)
+ # mark the build "local" if didn't find any commits that are from
# remotes/${GMX_REMOTE}/*
- if(${GMX_GIT_REMOTE_HASH} STREQUAL "")
+ if("${GMX_GIT_REMOTE_HASH}" STREQUAL "")
set(GMX_GIT_REMOTE_HASH "unknown")
- set(VERSION_STR_SUFFIX "${VERSION_STR_SUFFIX}-local")
+ set(VERSION_STR_SUFFIX "${VERSION_STR_SUFFIX}-local")
+ # don't print the remote hash if there are no local commits
+ elseif("${GMX_GIT_REMOTE_HASH}" STREQUAL "${HEAD_HASH}")
+ set(GMX_GIT_REMOTE_HASH "")
+ else()
+ set(GMX_GIT_REMOTE_HASH "${GMX_GIT_REMOTE_HASH} (${AHEAD} newer local commits)")
endif()
endif()
- # compile final version string, if there is already a -dev suffix in VER
+ # compile final version string, if there is already a -dev suffix in VER
# remove everything after this and replace it with the generated suffix
- string(REGEX REPLACE "(.*)-dev.*" "\\1" VER ${VER})
+ string(REGEX REPLACE "(.*)-dev.*" "\\1" VER "${VER}")
set(GMX_PROJECT_VERSION_STR "${VER}-dev-${VERSION_STR_SUFFIX}")
else()
- # the version has to be defined - if not we're not using version.h/.c and set
+ # the version has to be defined - if not we're not using version.h/.c and set
# the GIT related information to "unknown"
- message(WARNING " Source tree seems to be a repository, but no compatible git is available, using hard-coded version string")
+ message(WARNING "Source tree seems to be a repository, but no compatible git is available, using hard-coded version string")
set(GMX_PROJECT_VERSION_STR "${PROJECT_VERSION}")
set(GMX_GIT_HEAD_HASH "unknown")
set(GMX_GIT_REMOTE_HASH "unknown")
endif()
# if we're generating cache variables set these
- # otherwise it's assumed that it's called in script mode to generate version.c
+ # otherwise it's assumed that it's called in script mode to generate version.c
if(GEN_VERSION_INFO_INTERNAL)
- set(GMX_PROJECT_VERSION_STR ${GMX_PROJECT_VERSION_STR}
+ set(GMX_PROJECT_VERSION_STR ${GMX_PROJECT_VERSION_STR}
CACHE STRING "Gromacs version string" FORCE)
- set(GMX_GIT_HEAD_HASH ${GMX_GIT_HEAD_HASH}${DIRTY_STR}
+ set(GMX_GIT_HEAD_HASH ${GMX_GIT_HEAD_HASH}${DIRTY_STR}
CACHE STRING "Current git HEAD commit object" FORCE)
- set(GMX_GIT_REMOTE_HASH ${GMX_GIT_REMOTE_HASH}
+ set(GMX_GIT_REMOTE_HASH ${GMX_GIT_REMOTE_HASH}
CACHE STRING "Commmit object of the nearest ancestor present in the Gromacs git repository" FORCE)
mark_as_advanced(GMX_GIT_HEAD_HASH GMX_GIT_REMOTE_HASH)
else()
- if(${VERSION_C_CMAKEIN} STREQUAL "")
+ if("${VERSION_C_CMAKEIN}" STREQUAL "")
message(FATAL_ERROR "Missing input parameter VERSION_C_CMAKEIN!")
endif()
- if(${VERSION_C_OUT} STREQUAL "")
+ if("${VERSION_C_OUT}" STREQUAL "")
message(FATAL_ERROR "Missing input parameter VERSION_C_OUT!")
endif()
# generate version.c
- configure_file(${VERSION_C_CMAKEIN} ${VERSION_C_OUT})
+ configure_file(${VERSION_C_CMAKEIN} ${VERSION_C_OUT})
endif()