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

message(STATUS "Configuring BornAgain GUI")

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

set(lib BornAgainGUI)

# --- source and include files ---

file(GLOB_RECURSE include_files View/Mask/ISceneAdaptor.h) # no clue why this is needed
file(GLOB_RECURSE source_files *.cpp)
file(GLOB_RECURSE forms_files *.ui)

set(resource_files
    gui.qrc
    View/SampleDesigner/SampleDesigner.qrc
    View/Mask/MaskWidgets.qrc
)

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

qt_add_resources(RC_SRCS ${resource_files})

# --- definitions ------

if(BA_CRASHHANDLER)
    add_definitions(-DBA_CRASHHANDLER)
endif()

if(WIN32)
    string(APPEND CMAKE_CXX_FLAGS " -DBA_GUI_BUILD_DLL")
endif()

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

add_library(${lib} SHARED ${source_files} ${RC_SRCS} ${include_files} ${form_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>)

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
)

# --- 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)
