############################################################################
# CMakeLists.txt file for building BornAgain/GUI libraries and executable
############################################################################

message(STATUS "Configuring BornAgain GUI")

set(CMAKE_AUTOMOC ON)

set(lib BornAgainGUI)

# --- source and include files ---

file(GLOB_RECURSE source_files *.cpp)

set(resource_files gui.qrc)

# --- Qt configuration ---------

qt_add_resources(RC_SRCS ${resource_files})

# --- make the library ---------

add_library(${lib} SHARED ${source_files} ${RC_SRCS} ${include_files})
#set_target_properties(${lib} PROPERTIES PREFIX ${libprefix} SUFFIX ${libsuffix})

get_target_property(lib_dir ${lib} LIBRARY_OUTPUT_DIRECTORY)
set(BornAgain_LIBRARIES "$CACHE{BornAgain_LIBRARIES};${lib_dir}/${libprefix}${lib}${libsuffix}"
    CACHE INTERNAL "BornAgain libraries")

# switch OFF Qt debug output in any configuration except DEBUG
target_compile_definitions(${lib} PUBLIC $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG_OUTPUT>)

# -----------------------------------------------------------------------------
# runtime library paths
# -----------------------------------------------------------------------------
#   See our deployment paper (Nejati et al 2024) for explanation.

if(LINUX)
    # NOTE: RPATH must be set also in `App/CMakeLists.txt`
    set(link_flags "-Wl,--disable-new-dtags,-rpath,\$ORIGIN")
    set_target_properties(${lib} PROPERTIES LINK_FLAGS ${link_flags})
endif(LINUX)

if(BORNAGAIN_PYTHON)
    target_compile_definitions(${lib} PRIVATE -DBORNAGAIN_PYTHON)
endif()

# --- external dependences ---------

target_link_libraries(${lib}
    PUBLIC
    BornAgainSim
    BornAgainImg3D
    Qt6::Widgets
    Qt6::Core
    Qt6::Gui
    Qt6::OpenGLWidgets
    PRIVATE
    Qt6::PrintSupport
    qcustomplot
)
if(BORNAGAIN_PYTHON)
    target_link_libraries(${lib} PUBLIC BornAgainPyCore)
endif()
target_include_directories(${lib} PUBLIC
    ${CMAKE_SOURCE_DIR}
    ${CMAKE_SOURCE_DIR}/3rdparty/GUI/qcustomplot
)

if(WIN32)
    target_compile_definitions(${lib} PRIVATE -DBA_GUI_BUILD_DLL)
endif()

if(BA_CRASHHANDLER)
    target_compile_definitions(${lib} PRIVATE -DBA_CRASHHANDLER)
endif()

# --- installation ---------

set_target_properties(${lib} PROPERTIES
    PREFIX ${libprefix}
    SUFFIX ${libsuffix}
    OUTPUT_NAME ${lib}
    )

install(TARGETS ${lib}
    LIBRARY DESTINATION ${destination_lib} COMPONENT Libraries
    RUNTIME DESTINATION ${destination_lib} COMPONENT Libraries)
