Merge branch release-4-6
[alexxy/gromacs.git] / cmake / FindVMD.cmake
1 #  This file is part of Gromacs        Copyright (c) 1991-2008
2 #  David van der Spoel, Erik Lindahl, Berk Hess, University of Groningen.
3
4 # The module defines the following variables:
5 #   VMD_EXECUTABLE - path to vmd command
6 #   GMX_VMD_PLUGIN_PATH - path to vmd plugins
7
8 message(STATUS "Checking for suitable VMD version")
9 find_program(VMD_EXECUTABLE NAMES vmd PATH_SUFFIXES bin
10     DOC "VMD command")
11
12 #set search path in increasing priority:
13 # default path, vmd binary path, enviroment variable
14 set(VMD_PATHS "/usr/local/lib/vmd/plugins/*/molfile/")
15 if(VMD_EXECUTABLE)
16     file(STRINGS "${VMD_EXECUTABLE}" VMDDIR REGEX "^defaultvmddir=.*$")
17     string(REGEX REPLACE "(^.*=\"?|\"$)" "" VMDDIR "${VMDDIR}")
18     list(INSERT VMD_PATHS 0 "${VMDDIR}/plugins/*/molfile/")
19 endif()
20 if(NOT "$ENV{VMDDIR}" STREQUAL "")
21     list(INSERT VMD_PATHS 0 "$ENV{VMDDIR}/plugins/*/molfile/")
22 endif()
23
24 #xyz is just an example. Any other molfile plugin could be used.
25 #But some require extra link flags. VMD uses ".so" even on Windows.
26 find_library(VMDXYZPLUGIN NAME "xyzplugin.so"
27     PATHS ${VMD_PATHS})
28
29 if (VMDXYZPLUGIN)
30     try_run(TESTVMD TESTVMD_COMPILED ${CMAKE_BINARY_DIR}
31         "${CMAKE_SOURCE_DIR}/cmake/TestVMD.c"
32         CMAKE_FLAGS "-DLINK_LIBRARIES=${CMAKE_DL_LIBS}"
33             "-DINCLUDE_DIRECTORIES=${CMAKE_SOURCE_DIR}/src/gmxlib"
34         COMPILE_DEFINITIONS "-DGMX_USE_PLUGINS"
35         RUN_OUTPUT_VARIABLE TESTVMD_OUTPUT ARGS ${VMDXYZPLUGIN})
36 endif()
37
38 if(NOT TESTVMD EQUAL 0)
39     if (NOT VMDXYZPLUGIN)
40         message(STATUS "VMD plugins not found. Path to VMD can be set with VMDDIR.")
41     elseif(NOT TESTVMD_COMPILED)
42         message(STATUS "Could not compile VMD version check")
43     elseif(TESTVMD EQUAL 1)
44         message(STATUS "Could not load VMD plugin ${VMDXYZPLUGIN}: ${TESTVMD_OUTPUT}")
45     elseif(TESTVMD EQUAL 5)
46         message(STATUS "VMD plugin ${VMDXYZPLUGIN} too old. VMD 1.8.6 required.")
47     else()
48         message(STATUS "Could not identify VMD version of ${VMDXYZPLUGIN}. Error: ${TESTVMD}")
49     endif()
50     # This permits GROMACS to avoid hard-coding a fall-back path.
51     # Fall-back is useful in case VMD is installed later.
52     set(GMX_VMD_PLUGIN_PATH "/usr/local/lib/vmd/plugins/*/molfile"
53         CACHE PATH "Path to VMD plugins for molfile I/O" FORCE)
54 else()
55     get_filename_component(VMD_PLUGIN_PATH ${VMDXYZPLUGIN} PATH)
56     message(STATUS "VMD version of ${VMD_PLUGIN_PATH} is suitable")
57     set(GMX_VMD_PLUGIN_PATH ${VMD_PLUGIN_PATH}
58         CACHE PATH "Path to VMD plugins for molfile I/O" FORCE)
59 endif()
60 mark_as_advanced(GMX_VMD_PLUGIN_PATH)
61 #Nothing is rerun unless GMX_VMD_PLUGIN_PATH is set to NO. Clean-up all.
62 unset(VMDXYZPLUGIN CACHE)
63 unset(VMD_EXECUTABLE CACHE)
64 unset(TESTVMD CACHE)
65 unset(TESTVMD_COMPILED CACHE)
66 unset(VMD_PATHS)
67 unset(VMD_PLUGIN_PATH)
68 unset(VMDDIR)