diff --git a/cmake/FindJulia.cmake b/cmake/FindJulia.cmake new file mode 100644 --- /dev/null +++ b/cmake/FindJulia.cmake @@ -0,0 +1,70 @@ +if(JULIA_FOUND) + return() +endif() + +# Find julia executable +find_program(JULIA_EXECUTABLE julia DOC "Julia executable") + +if(NOT JULIA_EXECUTABLE) + return() +endif() + +# +# Julia version +# +execute_process( + COMMAND ${JULIA_EXECUTABLE} --version + OUTPUT_VARIABLE JULIA_VERSION_STRING + RESULT_VARIABLE RESULT +) +if(RESULT EQUAL 0) + string(REGEX REPLACE ".*([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" + JULIA_VERSION_STRING ${JULIA_VERSION_STRING}) +endif() + +# +# Julia includes +# +execute_process( + COMMAND ${JULIA_EXECUTABLE} -E "joinpath(match(r\"(.*)(bin)\",JULIA_HOME).captures[1],\"include\",\"julia\")" + OUTPUT_VARIABLE JULIA_INCLUDE_DIRS + # COMMAND ${JULIA_EXECUTABLE} -E "abspath(joinpath(JULIA_HOME, \"../..\", \"src\"))" + # OUTPUT_VARIABLE JULIA_INCLUDE_DIRS + RESULT_VARIABLE RESULT +) +if(RESULT EQUAL 0) + string(REGEX REPLACE "\"" "" JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS}) + set(JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS} + CACHE PATH "Location of Julia include files") +endif() + +# +# Julia library location +# +execute_process( + COMMAND ${JULIA_EXECUTABLE} -E "abspath(dirname(Sys.dlpath(\"libjulia\")))" + OUTPUT_VARIABLE JULIA_LIBRARY_DIR + RESULT_VARIABLE RESULT +) +if(RESULT EQUAL 0) + string(REGEX REPLACE "\"" "" JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR}) + string(STRIP ${JULIA_LIBRARY_DIR} JULIA_LIBRARY_DIR) + set(JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR} + CACHE PATH "Julia library directory") +endif() + +find_library( JULIA_LIBRARY + NAMES julia + PATHS ${JULIA_LIBRARY_DIR} +) + + + + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Julia + REQUIRED_VARS JULIA_LIBRARY JULIA_LIBRARY_DIR JULIA_INCLUDE_DIRS + VERSION_VAR JULIA_VERSION_STRING + FAIL_MESSAGE "Julia not found" +) diff --git a/src/backends/CMakeLists.txt b/src/backends/CMakeLists.txt --- a/src/backends/CMakeLists.txt +++ b/src/backends/CMakeLists.txt @@ -14,7 +14,11 @@ add_subdirectory(maxima) add_subdirectory(octave) add_subdirectory(scilab) -add_subdirectory(julia) + +find_package(Julia) +if (Julia_FOUND) + add_subdirectory(julia) +endif(Julia_FOUND) if(NOT WIN32) add_subdirectory(sage) diff --git a/src/backends/julia/juliaserver/CMakeLists.txt b/src/backends/julia/juliaserver/CMakeLists.txt --- a/src/backends/julia/juliaserver/CMakeLists.txt +++ b/src/backends/julia/juliaserver/CMakeLists.txt @@ -5,8 +5,9 @@ add_executable(cantor_juliaserver ${JuliaServer_SRCS}) +message("Bibliotecas do Julia ${JULIA_LIBRARY} ${Julia_INSTALL_DIR}") target_link_libraries(cantor_juliaserver - julia + ${JULIA_LIBRARY} Qt5::Widgets Qt5::DBus )