# SPDX-License-Identifier: LGPL-2.1-or-later

add_library(MeshPart SHARED)

if (SMESH_FOUND)
    add_definitions(-DHAVE_SMESH)
    if(SMESH_VERSION_MAJOR LESS_EQUAL 9 AND SMESH_VERSION_MINOR LESS 10 )
      add_definitions(-DHAVE_MEFISTO)
    endif()
endif(SMESH_FOUND)

if(BUILD_FEM_NETGEN)
    add_definitions(-DHAVE_NETGEN)
endif(BUILD_FEM_NETGEN)

target_include_directories(
    MeshPart
    PRIVATE
    ${CMAKE_BINARY_DIR}
    ${CMAKE_SOURCE_DIR}/src
    ${pybind11_INCLUDE_DIR}
)

target_include_directories(
    MeshPart
    SYSTEM
    PUBLIC
    ${SMESH_INCLUDE_DIR}
    ${VTK_INCLUDE_DIRS}
)

target_include_directories(
    MeshPart
    SYSTEM
    PRIVATE
    ${pybind11_INCLUDE_DIR}
)

target_link_directories(MeshPart PUBLIC ${SMESH_LIB_PATH})

set(MeshPart_LIBS
    Part
    Mesh
)

if (FREECAD_USE_EXTERNAL_SMESH)
   list(APPEND MeshPart_LIBS ${EXTERNAL_SMESH_LIBS})
else()
   if (BUILD_FEM_NETGEN)
       list(APPEND MeshPart_LIBS StdMeshers NETGENPlugin SMESH SMDS)
   elseif (BUILD_SMESH)
       list(APPEND MeshPart_LIBS StdMeshers SMESH SMDS)
   endif()
endif()


SET(MeshPart_SRCS
    AppMeshPart.cpp
    AppMeshPartPy.cpp
    CurveProjector.cpp
    CurveProjector.h
    MeshAlgos.cpp
    MeshAlgos.h
    Mesher.cpp
    Mesher.h
    PreCompiled.h
)

set(MeshPart_Scripts
    ../Init.py
)

if(FREECAD_USE_PCH)
    target_precompile_headers(MeshPart PRIVATE
            $<$<COMPILE_LANGUAGE:CXX>:"${CMAKE_CURRENT_LIST_DIR}/PreCompiled.h">
    )
endif(FREECAD_USE_PCH)

# Suppress -Wundefined-var-template
if (MINGW AND CMAKE_COMPILER_IS_CLANGXX)
    unset(_flag_found CACHE)
    check_cxx_compiler_flag("-Wno-undefined-var-template" _flag_found)
    if (_flag_found)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undefined-var-template")
    endif()
endif()

target_sources(MeshPart PRIVATE ${MeshPart_SRCS} ${MeshPart_Scripts})
target_link_libraries(MeshPart ${MeshPart_LIBS})

if (MSVC)
    target_compile_options(MeshPart PRIVATE /wd4275)
endif()

if (FREECAD_WARN_ERROR)
    target_compile_warn_error(MeshPart)
endif()


fc_target_copy_resource_flat(MeshPart
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_BINARY_DIR}/Mod/MeshPart
    ${MeshPart_Scripts}
)

SET_BIN_DIR(MeshPart MeshPart /Mod/MeshPart)
SET_PYTHON_PREFIX_SUFFIX(MeshPart)

INSTALL(TARGETS MeshPart DESTINATION ${CMAKE_INSTALL_LIBDIR})


################################ flat mesh ###############################
if (BUILD_FLAT_MESH)
    SET(FLATMESH_SRCS
        MeshFlattening.cpp
        MeshFlattening.h
        MeshFlatteningNurbs.h
        MeshFlatteningNurbs.cpp
        MeshFlatteningLscmRelax.h
        MeshFlatteningLscmRelax.cpp
        MeshFlatteningPy.cpp
    )


    add_library(flatmesh SHARED ${FLATMESH_SRCS})
    SET_PYTHON_PREFIX_SUFFIX(flatmesh)
    target_include_directories(flatmesh PRIVATE ${pybind11_INCLUDE_DIR})
    target_link_libraries(flatmesh ${Python3_LIBRARIES} ${MeshPart_LIBS})

    SET_BIN_DIR(flatmesh flatmesh /Mod/MeshPart)
    install(TARGETS flatmesh DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif(BUILD_FLAT_MESH)
############################################################################
