184 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
		
		
			
		
	
	
			184 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# FindLibR.cmake
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Copyright (C) 2009-11 by RStudio, Inc.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This program is licensed to you under the terms of version 3 of the
							 | 
						||
| 
								 | 
							
								# GNU Affero General Public License. This program is distributed WITHOUT
							 | 
						||
| 
								 | 
							
								# ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
							 | 
						||
| 
								 | 
							
								# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
							 | 
						||
| 
								 | 
							
								# AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# LIBR_FOUND
							 | 
						||
| 
								 | 
							
								# LIBR_HOME
							 | 
						||
| 
								 | 
							
								# LIBR_INCLUDE_DIRS
							 | 
						||
| 
								 | 
							
								# LIBR_DOC_DIR
							 | 
						||
| 
								 | 
							
								# LIBR_LIBRARIES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# detection for OSX (look for R framework)
							 | 
						||
| 
								 | 
							
								if(APPLE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   find_library(LIBR_LIBRARIES R)
							 | 
						||
| 
								 | 
							
								   if(LIBR_LIBRARIES)
							 | 
						||
| 
								 | 
							
								      set(LIBR_HOME "${LIBR_LIBRARIES}/Resources" CACHE PATH "R home directory")
							 | 
						||
| 
								 | 
							
								      set(LIBR_INCLUDE_DIRS "${LIBR_HOME}/include" CACHE PATH "R include directory")
							 | 
						||
| 
								 | 
							
								      set(LIBR_DOC_DIR "${LIBR_HOME}/doc" CACHE PATH "R doc directory")
							 | 
						||
| 
								 | 
							
								      set(LIBR_EXECUTABLE "${LIBR_HOME}/R" CACHE PATH "R executable")
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# detection for UNIX & Win32
							 | 
						||
| 
								 | 
							
								else()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   # Find R executable and paths (UNIX)
							 | 
						||
| 
								 | 
							
								   if(UNIX)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # find executable
							 | 
						||
| 
								 | 
							
								      find_program(LIBR_EXECUTABLE R)
							 | 
						||
| 
								 | 
							
								      if(LIBR_EXECUTABLE-NOTFOUND)
							 | 
						||
| 
								 | 
							
								         message(STATUS "Unable to locate R executable")
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # ask R for the home path
							 | 
						||
| 
								 | 
							
								      if(NOT LIBR_HOME)
							 | 
						||
| 
								 | 
							
								         execute_process(
							 | 
						||
| 
								 | 
							
								            COMMAND ${LIBR_EXECUTABLE} "--slave" "--vanilla" "-e" "cat(R.home())"
							 | 
						||
| 
								 | 
							
								                      OUTPUT_VARIABLE LIBR_HOME
							 | 
						||
| 
								 | 
							
								         )
							 | 
						||
| 
								 | 
							
								         if(LIBR_HOME)
							 | 
						||
| 
								 | 
							
								           set(LIBR_HOME ${LIBR_HOME} CACHE PATH "R home directory")
							 | 
						||
| 
								 | 
							
								         endif()
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # ask R for the include dir
							 | 
						||
| 
								 | 
							
								      if(NOT LIBR_INCLUDE_DIRS)
							 | 
						||
| 
								 | 
							
								         execute_process(
							 | 
						||
| 
								 | 
							
								            COMMAND ${LIBR_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('include'))"
							 | 
						||
| 
								 | 
							
								            OUTPUT_VARIABLE LIBR_INCLUDE_DIRS
							 | 
						||
| 
								 | 
							
								         )
							 | 
						||
| 
								 | 
							
								         if(LIBR_INCLUDE_DIRS)
							 | 
						||
| 
								 | 
							
								           set(LIBR_INCLUDE_DIRS ${LIBR_INCLUDE_DIRS} CACHE PATH "R include directory")
							 | 
						||
| 
								 | 
							
								         endif()
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # ask R for the doc dir
							 | 
						||
| 
								 | 
							
								      if(NOT LIBR_DOC_DIR)
							 | 
						||
| 
								 | 
							
								         execute_process(
							 | 
						||
| 
								 | 
							
								            COMMAND ${LIBR_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('doc'))"
							 | 
						||
| 
								 | 
							
								            OUTPUT_VARIABLE LIBR_DOC_DIR
							 | 
						||
| 
								 | 
							
								         )
							 | 
						||
| 
								 | 
							
								         if(LIBR_DOC_DIR)
							 | 
						||
| 
								 | 
							
								           set(LIBR_DOC_DIR ${LIBR_DOC_DIR} CACHE PATH "R doc directory")
							 | 
						||
| 
								 | 
							
								         endif()
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # ask R for the lib dir
							 | 
						||
| 
								 | 
							
								      if(NOT LIBR_LIB_DIR)
							 | 
						||
| 
								 | 
							
								         execute_process(
							 | 
						||
| 
								 | 
							
								            COMMAND ${LIBR_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('lib'))"
							 | 
						||
| 
								 | 
							
								            OUTPUT_VARIABLE LIBR_LIB_DIR
							 | 
						||
| 
								 | 
							
								         )
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   # Find R executable and paths (Win32)
							 | 
						||
| 
								 | 
							
								   else()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # find the home path
							 | 
						||
| 
								 | 
							
								      if(NOT LIBR_HOME)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         # read home from the registry
							 | 
						||
| 
								 | 
							
								         get_filename_component(LIBR_HOME
							 | 
						||
| 
								 | 
							
								            "[HKEY_LOCAL_MACHINE\\SOFTWARE\\R-core\\R;InstallPath]"
							 | 
						||
| 
								 | 
							
								            ABSOLUTE CACHE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         # print message if not found
							 | 
						||
| 
								 | 
							
								         if(NOT LIBR_HOME)
							 | 
						||
| 
								 | 
							
								            message(STATUS "Unable to locate R home (not written to registry)")
							 | 
						||
| 
								 | 
							
								         endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # set other R paths based on home path
							 | 
						||
| 
								 | 
							
								      set(LIBR_INCLUDE_DIRS "${LIBR_HOME}/include" CACHE PATH "R include directory")
							 | 
						||
| 
								 | 
							
								      set(LIBR_DOC_DIR "${LIBR_HOME}/doc" CACHE PATH "R doc directory")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # set library hint path based on whether  we are doing a special session 64 build
							 | 
						||
| 
								 | 
							
								      if(LIBR_FIND_WINDOWS_64BIT)
							 | 
						||
| 
								 | 
							
								         set(LIBRARY_ARCH_HINT_PATH "${LIBR_HOME}/bin/x64")
							 | 
						||
| 
								 | 
							
								      else()
							 | 
						||
| 
								 | 
							
								         set(LIBRARY_ARCH_HINT_PATH "${LIBR_HOME}/bin/i386")
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   # look for the R executable
							 | 
						||
| 
								 | 
							
								   find_program(LIBR_EXECUTABLE R
							 | 
						||
| 
								 | 
							
								                HINTS ${LIBRARY_ARCH_HINT_PATH} ${LIBR_HOME}/bin)
							 | 
						||
| 
								 | 
							
								   if(LIBR_EXECUTABLE-NOTFOUND)
							 | 
						||
| 
								 | 
							
								      message(STATUS "Unable to locate R executable")
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   # look for the core R library
							 | 
						||
| 
								 | 
							
								   find_library(LIBR_CORE_LIBRARY NAMES R
							 | 
						||
| 
								 | 
							
								                HINTS ${LIBR_LIB_DIR} ${LIBRARY_ARCH_HINT_PATH} ${LIBR_HOME}/bin)
							 | 
						||
| 
								 | 
							
								   if(LIBR_CORE_LIBRARY)
							 | 
						||
| 
								 | 
							
								      set(LIBR_LIBRARIES ${LIBR_CORE_LIBRARY})
							 | 
						||
| 
								 | 
							
								   else()
							 | 
						||
| 
								 | 
							
								      message(STATUS "Could not find libR shared library.")
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   if(WIN32)
							 | 
						||
| 
								 | 
							
								      # look for lapack
							 | 
						||
| 
								 | 
							
								      find_library(LIBR_LAPACK_LIBRARY NAMES Rlapack
							 | 
						||
| 
								 | 
							
								                   HINTS ${LIBR_LIB_DIR} ${LIBRARY_ARCH_HINT_PATH} ${LIBR_HOME}/bin)
							 | 
						||
| 
								 | 
							
								      if(LIBR_LAPACK_LIBRARY)
							 | 
						||
| 
								 | 
							
								         set(LIBR_LIBRARIES ${LIBR_LIBRARIES} ${LIBR_LAPACK_LIBRARY})
							 | 
						||
| 
								 | 
							
								         if(UNIX)
							 | 
						||
| 
								 | 
							
								            set(LIBR_LIBRARIES ${LIBR_LIBRARIES} gfortran)
							 | 
						||
| 
								 | 
							
								         endif()
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # look for blas
							 | 
						||
| 
								 | 
							
								      find_library(LIBR_BLAS_LIBRARY NAMES Rblas
							 | 
						||
| 
								 | 
							
								                   HINTS ${LIBR_LIB_DIR} ${LIBRARY_ARCH_HINT_PATH} ${LIBR_HOME}/bin)
							 | 
						||
| 
								 | 
							
								      if(LIBR_BLAS_LIBRARY)
							 | 
						||
| 
								 | 
							
								         set(LIBR_LIBRARIES ${LIBR_LIBRARIES} ${LIBR_BLAS_LIBRARY})
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # look for rgraphapp
							 | 
						||
| 
								 | 
							
								      find_library(LIBR_GRAPHAPP_LIBRARY NAMES Rgraphapp
							 | 
						||
| 
								 | 
							
								                   HINTS ${LIBR_LIB_DIR} ${LIBRARY_ARCH_HINT_PATH} ${LIBR_HOME}/bin)
							 | 
						||
| 
								 | 
							
								      if(LIBR_GRAPHAPP_LIBRARY)
							 | 
						||
| 
								 | 
							
								         set(LIBR_LIBRARIES ${LIBR_LIBRARIES} ${LIBR_GRAPHAPP_LIBRARY})
							 | 
						||
| 
								 | 
							
								      endif()
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   # cache LIBR_LIBRARIES
							 | 
						||
| 
								 | 
							
								   if(LIBR_LIBRARIES)
							 | 
						||
| 
								 | 
							
								      set(LIBR_LIBRARIES ${LIBR_LIBRARIES} CACHE PATH "R runtime libraries")
							 | 
						||
| 
								 | 
							
								   endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# define find requirements
							 | 
						||
| 
								 | 
							
								include(FindPackageHandleStandardArgs)
							 | 
						||
| 
								 | 
							
								find_package_handle_standard_args(LibR DEFAULT_MSG
							 | 
						||
| 
								 | 
							
								   LIBR_HOME
							 | 
						||
| 
								 | 
							
								   LIBR_EXECUTABLE
							 | 
						||
| 
								 | 
							
								   LIBR_INCLUDE_DIRS
							 | 
						||
| 
								 | 
							
								   LIBR_LIBRARIES
							 | 
						||
| 
								 | 
							
								   LIBR_DOC_DIR
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if(LIBR_FOUND)
							 | 
						||
| 
								 | 
							
								   message(STATUS "Found R: ${LIBR_HOME}")
							 | 
						||
| 
								 | 
							
								endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# mark low-level variables from FIND_* calls as advanced
							 | 
						||
| 
								 | 
							
								mark_as_advanced(
							 | 
						||
| 
								 | 
							
								   LIBR_CORE_LIBRARY
							 | 
						||
| 
								 | 
							
								   LIBR_LAPACK_LIBRARY
							 | 
						||
| 
								 | 
							
								   LIBR_BLAS_LIBRARY
							 | 
						||
| 
								 | 
							
								)
							 |