diff --git a/cmake/FindJulia.cmake b/cmake/FindJulia.cmake new file mode 100644 index 00000000..29abf00a --- /dev/null +++ b/cmake/FindJulia.cmake @@ -0,0 +1,55 @@ +if(Julia_FOUND) + return() +endif() + +# Looking for Julia executable +find_program(Julia_EXECUTABLE julia DOC "Julia executable") +if(NOT Julia_EXECUTABLE) + return() +endif() + +# Getting Julia version +execute_process( + COMMAND ${Julia_EXECUTABLE} --version + OUTPUT_VARIABLE Julia_VERSION_STRING + RESULT_VARIABLE RETURN_CODE +) +if(RETURN_CODE EQUAL 0) + string( + REGEX REPLACE ".*([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" + Julia_VERSION_STRING ${Julia_VERSION_STRING} + ) +else() + return() +endif() + +# Julia includes +execute_process( + COMMAND ${Julia_EXECUTABLE} -E "JULIA_HOME" + OUTPUT_VARIABLE Julia_INCLUDE_DIRS + RESULT_VARIABLE RETURN_CODE +) +if(RETURN_CODE EQUAL 0) + set( + Julia_INCLUDE_DIRS + "${Julia_INCLUDE_DIRS}/../include/julia" + ) + string(REGEX REPLACE "(\"|\n)" "" Julia_INCLUDE_DIRS ${Julia_INCLUDE_DIRS}) + string(STRIP Julia_INCLUDE_DIRS ${Julia_INCLUDE_DIRS}) + set( + Julia_INCLUDE_DIRS ${Julia_INCLUDE_DIRS} + CACHE PATH "Location of Julia include files" + ) +else() + return() +endif() + +# Checking existance of main header. Some distos provide packages without actual includes +find_path(Julia_MAIN_HEADER julia.h HINTS ${Julia_INCLUDE_DIRS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Julia + REQUIRED_VARS Julia_EXECUTABLE Julia_MAIN_HEADER 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 index a5b14164..3fb5293e 100644 --- a/src/backends/CMakeLists.txt +++ b/src/backends/CMakeLists.txt @@ -1,92 +1,103 @@ function(add_backend name) kcoreaddons_add_plugin("cantor_${name}" SOURCES ${ARGN} JSON "${name}.json" INSTALL_NAMESPACE "cantor/backends") target_link_libraries("cantor_${name}" cantorlibs) endfunction() add_subdirectory(null) add_subdirectory(maxima) add_subdirectory(octave) add_subdirectory(scilab) -add_subdirectory(julia) if(NOT WIN32) add_subdirectory(sage) endif(NOT WIN32) set_package_properties(Analitza5 PROPERTIES DESCRIPTION "A library provided by KAlgebra." URL "http://edu.kde.org/kalgebra/" TYPE OPTIONAL PURPOSE "Backend to use KAlgebra with Cantor.") find_package(Analitza5) if(Analitza5_FOUND) add_subdirectory(kalgebra) endif(Analitza5_FOUND) set_package_properties(R PROPERTIES DESCRIPTION "A free software environment for statistical computing and graphics." URL "http://www.r-project.org/" TYPE OPTIONAL PURPOSE "Backend to use R with Cantor.") find_package(R) if(R_FOUND) add_subdirectory(R) endif(R_FOUND) set_package_properties(Qalculate PROPERTIES DESCRIPTION "A multi-purpose desktop calculator with support for customizable functions, units and arbitrary precision." URL "http://qalculate.sourceforge.net/" TYPE OPTIONAL PURPOSE "Backend to use Qalculate with Cantor.") find_package(Qalculate) if(QALCULATE_FOUND) add_subdirectory(qalculate) endif(QALCULATE_FOUND) set_package_properties(PythonLibs PROPERTIES DESCRIPTION "A powerful dynamic programming language." URL "https://www.python.org/" TYPE OPTIONAL PURPOSE "Backend to use Python 2 with Cantor.") # If PythonInterp has been found (which it is indirectly by KF5I18n), # find_package(PythonLibs) will prefer that version over whatever # version information you pass the find_package call. Set a special # variable to override that: set(Python_ADDITIONAL_VERSIONS 2.7) find_package(PythonLibs 2.7) set_package_properties(PythonLibs3 PROPERTIES DESCRIPTION "A powerful dynamic programming language." URL "https://www.python.org/" TYPE OPTIONAL PURPOSE "Backend to use Python 3 with Cantor.") find_package(PythonLibs3) if(PYTHONLIBS_FOUND OR PYTHONLIBS3_FOUND) add_subdirectory(python) endif(PYTHONLIBS_FOUND OR PYTHONLIBS3_FOUND) if(PYTHONLIBS_FOUND) add_subdirectory(python2) endif(PYTHONLIBS_FOUND) if(PYTHONLIBS3_FOUND) add_subdirectory(python3) endif(PYTHONLIBS3_FOUND) set_package_properties(LuaJIT PROPERTIES DESCRIPTION "A lightweight, extensible programming language (luajit implementation)." URL "http://www.lua.org/" TYPE OPTIONAL PURPOSE "Backend to use Lua (luajit2) with Cantor.") find_package(LuaJIT) if(LUAJIT_FOUND) add_subdirectory(lua) endif(LUAJIT_FOUND) + +set_package_properties( + Julia + PROPERTIES DESCRIPTION "Julia is a high-level, high-performance dynamic programming language for technical computing" + URL "http://julialang.org/" + TYPE OPTIONAL + PURPOSE "Backend to use Julia with Cantor.") + +find_package(Julia) +if(Julia_FOUND) + add_subdirectory(julia) +endif() diff --git a/src/backends/julia/juliaserver/CMakeLists.txt b/src/backends/julia/juliaserver/CMakeLists.txt index c6b67714..e4124326 100644 --- a/src/backends/julia/juliaserver/CMakeLists.txt +++ b/src/backends/julia/juliaserver/CMakeLists.txt @@ -1,14 +1,14 @@ set(JuliaServer_SRCS juliaserver.cpp main.cpp ) add_executable(cantor_juliaserver ${JuliaServer_SRCS}) target_link_libraries(cantor_juliaserver - julia + ${JULIA_LIBRARY} Qt5::Widgets Qt5::DBus ) install(TARGETS cantor_juliaserver ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})