diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b964c6269..a9e68dc1aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,6 +115,10 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LIBPACK_CHECKFILE_CLBUNDLER OR FREECAD_LIB # SetupCoin3D can overwrite find_package(Boost) output so keep this after. SetupBoost() + + if(BUILD_BIM) + SetupLark() + endif() endif() if(BUILD_VR) diff --git a/cMake/FindLARK.cmake b/cMake/FindLARK.cmake new file mode 100644 index 0000000000..766b9219e0 --- /dev/null +++ b/cMake/FindLARK.cmake @@ -0,0 +1,53 @@ +# - Find the lark library +# This module finds if lark is installed, and sets the following variables +# indicating where it is. +# +# LARK_FOUND - was lark found +# LARK_VERSION - the version of lark found as a string +# LARK_VERSION_MAJOR - the major version number of lark +# LARK_VERSION_MINOR - the minor version number of lark +# LARK_VERSION_PATCH - the patch version number of lark + +include(FindPackageHandleStandardArgs) + +if(Python3_EXECUTABLE) + message(STATUS "FindLark: Using Python3_EXECUTABLE = ${Python3_EXECUTABLE}") + + # try to import lark into Python interpreter + execute_process( + COMMAND "${Python3_EXECUTABLE}" "-c" + "import lark; print(lark.__version__)" + RESULT_VARIABLE _LARK_SEARCH_SUCCESS + OUTPUT_VARIABLE LARK_VERSION + ERROR_VARIABLE _LARK_ERROR_VALUE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + message(DEBUG "FindLark: Result = ${_LARK_SEARCH_SUCCESS}") + message(DEBUG "FindLark: Version = ${LARK_VERSION}") + message(DEBUG "FindLark: Error = ${_LARK_ERROR_VALUE}") + + if(_LARK_SEARCH_SUCCESS MATCHES 0) + # extract version components + string(REGEX REPLACE "\\." ";" _LARK_VERSION_LIST ${LARK_VERSION}) + list(LENGTH _LARK_VERSION_LIST _LARK_VERSION_LIST_LEN) + if(_LARK_VERSION_LIST_LEN GREATER_EQUAL 1) + list(GET _LARK_VERSION_LIST 0 LARK_VERSION_MAJOR) + endif() + if(_LARK_VERSION_LIST_LEN GREATER_EQUAL 2) + list(GET _LARK_VERSION_LIST 1 LARK_VERSION_MINOR) + endif() + if(_LARK_VERSION_LIST_LEN GREATER_EQUAL 3) + list(GET _LARK_VERSION_LIST 2 LARK_VERSION_PATCH) + endif() + else() + message(STATUS "The BIM workbench requires the lark python package / module to be installed") + endif() +else() + message(STATUS "FindLark: Python3_EXECUTABLE not set") +endif() + +find_package_handle_standard_args(LARK + REQUIRED_VARS LARK_VERSION + VERSION_VAR LARK_VERSION +) diff --git a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake index 5d50f6b02f..3551e10b47 100644 --- a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake +++ b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake @@ -221,6 +221,9 @@ macro(PrintFinalReport) conditional(fmt fmt_FOUND "Sources downloaded to ${fmt_SOURCE_DIR}" "${fmt_VERSION}") conditional(yaml-cpp yaml-cpp_FOUND "not found" "${yaml-cpp_VERSION}") conditional(Vtk VTK_FOUND "not found" ${VTK_VERSION}) + if(BUILD_BIM) + conditional(Lark LARK_FOUND "not found" "${LARK_VERSION}") + endif() section_end() diff --git a/cMake/FreeCAD_Helpers/SetupLark.cmake b/cMake/FreeCAD_Helpers/SetupLark.cmake new file mode 100644 index 0000000000..c96aed99a3 --- /dev/null +++ b/cMake/FreeCAD_Helpers/SetupLark.cmake @@ -0,0 +1,7 @@ +macro(SetupLark) + # ------------------------------ Lark ------------------------------ + + find_package(LARK MODULE REQUIRED) + message(STATUS "Found Lark: version ${LARK_VERSION}") + +endmacro()