1if(JULIA_FOUND) 2 return() 3endif() 4 5# Find julia executable 6find_program(JULIA_EXECUTABLE julia DOC "Julia executable") 7 8if(NOT JULIA_EXECUTABLE) 9 return() 10endif() 11 12 13 14 15# 16# Julia version 17# 18execute_process( 19 COMMAND ${JULIA_EXECUTABLE} --version 20 OUTPUT_VARIABLE JULIA_VERSION_STRING 21 RESULT_VARIABLE RESULT 22) 23if(RESULT EQUAL 0) 24 string(REGEX REPLACE ".*([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" 25 JULIA_VERSION_STRING ${JULIA_VERSION_STRING}) 26endif() 27 28 29 30 31# 32# Julia includes 33# 34if(${JULIA_VERSION_STRING} VERSION_LESS 0.7.0) 35 set(JULIA_BINDIR "JULIA_HOME") 36else() 37 set(JULIA_BINDIR "Sys.BINDIR") 38endif() 39 40execute_process( 41 COMMAND ${JULIA_EXECUTABLE} -E "joinpath(match(r\"(.*)(bin)\",${JULIA_BINDIR}).captures[1],\"include\",\"julia\")" 42 OUTPUT_VARIABLE JULIA_INCLUDE_DIRS 43 # COMMAND ${JULIA_EXECUTABLE} -E "abspath(joinpath(JULIA_HOME, \"../..\", \"src\"))" 44 # OUTPUT_VARIABLE JULIA_INCLUDE_DIRS 45 RESULT_VARIABLE RESULT 46) 47if(RESULT EQUAL 0) 48 string(REGEX REPLACE "\"" "" JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS}) 49 set(JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS} 50 CACHE PATH "Location of Julia include files") 51endif() 52 53string(CONCAT JULIA_INCLUDE_TEST_FILE ${JULIA_INCLUDE_DIRS} "/julia_version.h") 54string(REGEX REPLACE "\n" "" JULIA_INCLUDE_TEST_FILE ${JULIA_INCLUDE_TEST_FILE}) 55IF (NOT EXISTS ${JULIA_INCLUDE_TEST_FILE}) 56 message(STATUS "Julia found, but include files are missing") 57 return() 58endif() 59 60 61# 62# Julia library location 63# 64if(${JULIA_VERSION_STRING} VERSION_LESS 0.7.0) 65 set(JULIA_LIBDL_COMMAND "abspath(dirname(Libdl.dlpath(\"libjulia\")))") 66else() 67 set(JULIA_LIBDL_COMMAND "using Libdl\; abspath(dirname(Libdl.dlpath(\"libjulia\")))") 68endif() 69 70execute_process( 71 COMMAND ${JULIA_EXECUTABLE} -E ${JULIA_LIBDL_COMMAND} 72 OUTPUT_VARIABLE JULIA_LIBRARY_DIR 73 RESULT_VARIABLE RESULT 74) 75 76if(RESULT EQUAL 0) 77 string(REGEX REPLACE "\"" "" JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR}) 78 string(STRIP ${JULIA_LIBRARY_DIR} JULIA_LIBRARY_DIR) 79 set(JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR} 80 CACHE PATH "Julia library directory") 81endif() 82 83if(NOT ${JULIA_VERSION_STRING} VERSION_LESS 1.6.0) 84 set(JULIA_INTERNAL_LIBDL_COMMAND "using Libdl\; abspath(dirname(Libdl.dlpath(\"libjulia-internal\")))") 85 execute_process( 86 COMMAND ${JULIA_EXECUTABLE} -E ${JULIA_INTERNAL_LIBDL_COMMAND} 87 OUTPUT_VARIABLE JULIA_INTERNAL_LIBRARY_DIR 88 RESULT_VARIABLE RESULT 89 ) 90 91 if(RESULT EQUAL 0) 92 string(REGEX REPLACE "\"" "" JULIA_INTERNAL_LIBRARY_DIR ${JULIA_INTERNAL_LIBRARY_DIR}) 93 string(STRIP ${JULIA_INTERNAL_LIBRARY_DIR} JULIA_INTERNAL_LIBRARY_DIR) 94 set(JULIA_INTERNAL_LIBRARY_DIR ${JULIA_INTERNAL_LIBRARY_DIR} 95 CACHE PATH "Julia internal library directory") 96 endif() 97endif() 98 99find_library( JULIA_LIBRARY 100 NAMES julia 101 PATHS ${JULIA_LIBRARY_DIR} 102) 103 104if(NOT ${JULIA_VERSION_STRING} VERSION_LESS 1.6.0) 105 find_library( JULIA_INTERNAL_LIBRARY 106 NAMES julia-internal 107 PATHS ${JULIA_INTERNAL_LIBRARY_DIR} 108 ) 109endif() 110 111if(${JULIA_VERSION_STRING} VERSION_LESS 1.6.0) 112 find_package_handle_standard_args( 113 Julia 114 REQUIRED_VARS JULIA_LIBRARY JULIA_INCLUDE_DIRS 115 VERSION_VAR JULIA_VERSION_STRING 116 FAIL_MESSAGE "Julia not found" 117 ) 118else() 119 find_package_handle_standard_args( 120 Julia 121 REQUIRED_VARS JULIA_LIBRARY JULIA_INTERNAL_LIBRARY JULIA_INCLUDE_DIRS 122 VERSION_VAR JULIA_VERSION_STRING 123 FAIL_MESSAGE "Julia not found" 124 ) 125endif() 126