Show
Ignore:
Timestamp:
07/02/09 22:16:09 (15 years ago)
Author:
smidl
Message:

Build system restructuring

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/system/FindMatlab.cmake

    r357 r406  
    1 # - this module looks for Matlab 
     1# - This module looks for Matlab and associated development libraries 
    22# Defines: 
    33#  MATLAB_INCLUDE_DIR: include path for mex.h, engine.h 
    4 #  MATLAB_LIBRARIES:   required libraries: libmex, etc 
    5 #  MATLAB_MAT_LIBRARY: path to libmat.lib 
    6 #  MATLAB_MEX_LIBRARY: path to libmex.lib 
    7 #  MATLAB_MX_LIBRARY:  path to libmx.lib 
    8 #  MATLAB_ENG_LIBRARY: path to libeng.lib 
     4#  MATLAB_LIBRARIES:        required libraries: libmex, etc 
     5#  MATLAB_MEX_LIBRARY:      path to libmex.lib 
     6#  MATLAB_MX_LIBRARY:       path to libmx.lib 
     7#  MATLAB_ENG_LIBRARY:      path to libeng.lib 
     8#  MATLAB_MEX_VERSION_FILE: path to mexversion.rc or mexversion.c 
     9#  MATLAB_MEX_SUFFIX:       filename suffix for mex-files (e.g. '.mexglx' or '.mexw64') 
     10 
     11# This version modified by RW Penney, November 2008 
     12# $Revision: 27 $, $Date: 2008-12-22 11:47:45 +0000 (Mon, 22 Dec 2008) $ 
    913 
    1014 
    1115SET(MATLAB_FOUND 0) 
     16 
    1217IF(WIN32) 
    13   IF(${CMAKE_GENERATOR} MATCHES "Visual Studio .*" OR ${CMAKE_GENERATOR} MATCHES "NMake Makefiles") 
    14     SET(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/lib/win32/microsoft/") 
    15   ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio .*" OR ${CMAKE_GENERATOR} MATCHES "NMake Makefiles") 
    16       IF(${CMAKE_GENERATOR} MATCHES "Borland") 
    17         # Same here, there are also: bcc50 and bcc51 directories 
    18         SET(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/lib/win32/microsoft/bcc54") 
    19       ELSE(${CMAKE_GENERATOR} MATCHES "Borland") 
    20         MESSAGE(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}") 
    21       ENDIF(${CMAKE_GENERATOR} MATCHES "Borland") 
    22   ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio .*" OR ${CMAKE_GENERATOR} MATCHES "NMake Makefiles") 
    23   FIND_LIBRARY(MATLAB_MEX_LIBRARY 
    24     libmex 
    25     ${MATLAB_ROOT} 
    26     ) 
    27   FIND_LIBRARY(MATLAB_MX_LIBRARY 
    28     libmx 
    29     ${MATLAB_ROOT} 
    30     ) 
    31   FIND_LIBRARY(MATLAB_ENG_LIBRARY 
    32     libeng 
    33     ${MATLAB_ROOT} 
    34     ) 
    35   FIND_LIBRARY(MATLAB_MAT_LIBRARY 
    36     libmat 
    37     ${MATLAB_ROOT} 
    38     ) 
    3918 
    40   FIND_PATH(MATLAB_INCLUDE_DIR 
    41     "mex.h" 
    42     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/include" 
    43     ) 
    44 ELSE( WIN32 ) 
     19  FILE(GLOB _auto_matlab_prefixes "C:/Program Files/MATLAB*/R20*") 
     20 
     21  IF(CMAKE_SIZEOF_VOID_P EQUAL 4) 
     22    # Regular x86 
     23    SET(MATLAB_MEX_SUFFIX mexw32) 
     24    SET(_extern_arch "win32") 
     25  ELSE(CMAKE_SIZEOF_VOID_P EQUAL 4) 
     26    SET(MATLAB_MEX_SUFFIX mexw64) 
     27    SET(_extern_arch "win64") 
     28  ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4) 
     29 
     30  # Search for available compilers: 
     31  # (This would be neater using 'ELSEIF', but that isn't available until cmake-2.4.4) 
     32  IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") 
     33    SET(_matlab_path_suffixes "extern/lib/${_extern_arch}/microsoft/msvc60" 
     34        "extern/lib/${_extern_arch}/microsoft") 
     35  ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") 
     36  IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") 
     37    SET(_matlab_path_suffixes "extern/lib/${_extern_arch}/microsoft/msvc70" 
     38        "extern/lib/${_extern_arch}/microsoft") 
     39  ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") 
     40  IF(${CMAKE_GENERATOR} MATCHES "Visual Studio [891]*") 
     41    SET(_matlab_path_suffixes "extern/lib/${_extern_arch}/microsoft/msvc71" 
     42        "extern/lib/${_extern_arch}/microsoft") 
     43  ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio [891]*") 
     44  IF(${CMAKE_GENERATOR} MATCHES "Borland") 
     45    SET(_matlab_path_suffixes "extern/lib/win32/microsoft/bcc54") 
     46  ENDIF(${CMAKE_GENERATOR} MATCHES "Borland") 
     47  IF(NOT _matlab_path_suffixes) 
     48    MESSAGE(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}") 
     49  ENDIF(NOT _matlab_path_suffixes) 
     50 
     51  SET(_libmex_name "libmex") 
     52  SET(_libmx_name "libmx") 
     53  SET(_libeng_name "libeng") 
     54 
     55ELSE(WIN32) 
     56 
    4557  IF(NOT MATLAB_ROOT) 
    4658    IF($ENV{MATLAB_ROOT}) 
    4759      SET(MATLAB_ROOT $ENV{MATLAB_ROOT}) 
    4860    ELSE($ENV{MATLAB_ROOT}) 
    49       SET(MATLAB_ROOT /opt/matlab) 
     61      SET(MATLAB_ROOT "$ENV{HOME}/bin/matlab*") 
    5062    ENDIF($ENV{MATLAB_ROOT})     
    5163  ENDIF(NOT MATLAB_ROOT) 
     64 
     65  FILE(GLOB _auto_matlab_prefixes "/usr/local/matlab*" "/opt/matlab*" ${MATLAB_ROOT}) 
     66 
    5267  IF(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    5368    # Regular x86 
    54     SET(MATLAB_SYS 
    55       ${MATLAB_ROOT}/bin/glnx86 
    56       ) 
     69    SET(_matlab_path_suffixes "bin/glnx86") 
     70    SET(MATLAB_MEX_SUFFIX mexglx) 
    5771  ELSE(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    58     # AMD64: 
    59     SET(MATLAB_SYS 
    60       ${MATLAB_ROOT}/bin/glnxa64 
    61       ) 
     72    SET(_matlab_path_suffixes "bin/glnxa64") 
     73    SET(MATLAB_MEX_SUFFIX mexa64) 
    6274  ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    63   FIND_LIBRARY(MATLAB_MEX_LIBRARY 
    64     mex 
    65     ${MATLAB_SYS} 
    66     ) 
    67   FIND_LIBRARY(MATLAB_MX_LIBRARY 
    68     mx 
    69     ${MATLAB_SYS} 
    70     ) 
    71   FIND_LIBRARY(MATLAB_MAT_LIBRARY 
    72     mat 
    73     ${MATLAB_SYS} 
    74     ) 
    75   FIND_LIBRARY(MATLAB_ENG_LIBRARY 
    76     eng 
    77     ${MATLAB_SYS} 
    78     ) 
    79   FIND_PATH(MATLAB_INCLUDE_DIR 
    80     "mex.h" 
    81     ${MATLAB_ROOT}/extern/include 
    82     ) 
     75 
     76  SET(_libmex_name "mex") 
     77  SET(_libmx_name "mx") 
     78  SET(_libeng_name "eng") 
    8379 
    8480ENDIF(WIN32) 
    8581 
    86 # This is common to UNIX and Win32: 
     82 
     83SET(_matlab_path_prefixes 
     84  ${MATLAB_PATH_PREFIXES} 
     85  ${_auto_matlab_prefixes} 
     86  ${MATLAB_ROOT} 
     87) 
     88 
     89# Search for include-files & libraries using architecture-dependent paths: 
     90FOREACH(_matlab_prefix ${_matlab_path_prefixes}) 
     91  MESSAGE("searching ${_matlab_prefix}") 
     92  IF(NOT MATLAB_INCLUDE_DIR) 
     93    FIND_PATH(MATLAB_INCLUDE_DIR "mex.h" 
     94      ${_matlab_prefix}/extern/include) 
     95 
     96    IF(MATLAB_INCLUDE_DIR) 
     97      SET(MATLAB_ROOT ${_matlab_prefix} 
     98        CACHE PATH "Matlab installation directory") 
     99      IF(WIN32) 
     100        SET(MATLAB_MEX_VERSIONFILE "${_matlab_prefix}/extern/include/mexversion.rc") 
     101      ELSE(WIN32) 
     102        SET(MATLAB_MEX_VERSIONFILE "${_matlab_prefix}/extern/src/mexversion.c") 
     103      ENDIF(WIN32) 
     104    ENDIF(MATLAB_INCLUDE_DIR) 
     105  ENDIF(NOT MATLAB_INCLUDE_DIR) 
     106 
     107  FOREACH(_matlab_path_suffix ${_matlab_path_suffixes}) 
     108    SET(_matlab_libdir ${_matlab_prefix}/${_matlab_path_suffix}) 
     109    MESSAGE("Searching ${_matlab_prefix} ... ${_matlab_libdir}") 
     110    IF(NOT MATLAB_MEX_LIBRARY) 
     111      FIND_LIBRARY(MATLAB_MEX_LIBRARY ${_libmex_name} ${_matlab_libdir}) 
     112      FIND_LIBRARY(MATLAB_MX_LIBRARY ${_libmx_name} ${_matlab_libdir}) 
     113      FIND_LIBRARY(MATLAB_ENG_LIBRARY ${_libeng_name} ${_matlab_libdir}) 
     114    ENDIF(NOT MATLAB_MEX_LIBRARY) 
     115  ENDFOREACH(_matlab_path_suffix) 
     116ENDFOREACH(_matlab_prefix) 
     117 
    87118SET(MATLAB_LIBRARIES 
    88119  ${MATLAB_MEX_LIBRARY} 
     
    91122) 
    92123 
    93 IF(MATLAB_INCLUDE_DIR  
    94     AND MATLAB_MEX_LIBRARY  
    95     AND MATLAB_MAT_LIBRARY 
    96     AND MATLAB_ENG_LIBRARY 
    97     AND MATLAB_MX_LIBRARY) 
    98   SET(MATLAB_LIBRARIES ${MATLAB_MX_LIBRARY} ${MATLAB_MEX_LIBRARY} ${MATLAB_ENG_LIBRARY} ${MATLAB_MAT_LIBRARY}) 
    99 ENDIF(MATLAB_INCLUDE_DIR  
    100     AND MATLAB_MEX_LIBRARY  
    101     AND MATLAB_MAT_LIBRARY 
    102     AND MATLAB_ENG_LIBRARY 
    103     AND MATLAB_MX_LIBRARY) 
     124IF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) 
     125  SET(MATLAB_FOUND 1) 
     126  MESSAGE(STATUS "Found Matlab arch ${MATLAB_MEX_SUFFIX} at ${MATLAB_INCLUDE_DIR}") 
     127ELSE(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) 
     128  MESSAGE(STATUS "Matlab not found") 
     129ENDIF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) 
    104130 
    105131MARK_AS_ADVANCED( 
     132  MATLAB_LIBRARIES 
    106133  MATLAB_MEX_LIBRARY 
    107134  MATLAB_MX_LIBRARY 
    108135  MATLAB_ENG_LIBRARY 
    109136  MATLAB_INCLUDE_DIR 
    110   MATLAB_ROOT 
     137  MATLAB_MEX_SUFFIX 
     138  MATLAB_MEX_VERSIONFILE 
     139  MATLAB_FOUND 
    111140) 
    112141 
    113 INCLUDE(FindPackageHandleStandardArgs) 
    114 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Matlab  
    115     MATLAB_INCLUDE_DIR  
    116     MATLAB_MEX_LIBRARY  
    117     MATLAB_MAT_LIBRARY 
    118     MATLAB_ENG_LIBRARY 
    119     MATLAB_MX_LIBRARY ) 
    120  
     142# vim: set ts=2 sw=2 et: