add_library(zipdirfs_options_obj OBJECT Options.cpp)
add_library(zipdirfs_statereporter_obj OBJECT StateReporter.cpp)

add_subdirectory(ZipDirFs)

set(ZIPDIRFS_OBJECT_TARGETS
        zipdirfs_options_obj
        zipdirfs_statereporter_obj
        zipdirfs_components_obj
        zipdirfs_containers_obj
        zipdirfs_containers_obj_test
        zipdirfs_fuse_obj
        zipdirfs_utilities_obj
        zipdirfs_zip_obj
        zipdirfs_zip_base_obj
)

foreach(object_target IN LISTS ZIPDIRFS_OBJECT_TARGETS)
    target_compile_options(${object_target} PRIVATE -Wall -fexceptions)
    target_compile_options(${object_target}
            PRIVATE
            ${FUSE_CFLAGS_OTHER}
            ${FUSEKIT_CFLAGS_OTHER}
            ${LIBZIP_CFLAGS_OTHER}
    )
    target_include_directories(${object_target}
            PRIVATE
            ${PROJECT_SOURCE_DIR}/include
            ${FUSE_INCLUDE_DIRS}
            ${FUSEKIT_INCLUDE_DIRS}
            ${LIBZIP_INCLUDE_DIRS}
    )
endforeach()

add_library(zipdirfs_core STATIC
        $<TARGET_OBJECTS:zipdirfs_options_obj>
        $<TARGET_OBJECTS:zipdirfs_statereporter_obj>
        $<TARGET_OBJECTS:zipdirfs_components_obj>
        $<TARGET_OBJECTS:zipdirfs_containers_obj>
        $<TARGET_OBJECTS:zipdirfs_fuse_obj>
        $<TARGET_OBJECTS:zipdirfs_utilities_obj>
        $<TARGET_OBJECTS:zipdirfs_zip_obj>
        $<TARGET_OBJECTS:zipdirfs_zip_base_obj>
)

target_compile_options(zipdirfs_core PRIVATE -Wall -fexceptions)

target_include_directories(zipdirfs_core
        PUBLIC
        ${PROJECT_SOURCE_DIR}/include
        PRIVATE
        ${FUSE_INCLUDE_DIRS}
        ${FUSEKIT_INCLUDE_DIRS}
        ${LIBZIP_INCLUDE_DIRS}
)

target_link_libraries(zipdirfs_core
        PUBLIC
        ${LIBZIP_LIBRARIES}
)

target_link_options(zipdirfs_core PRIVATE ${FUSEKIT_LDFLAGS_OTHER} ${LIBZIP_LDFLAGS_OTHER})

add_executable(zipdirfs Main.cpp)
target_compile_options(zipdirfs PRIVATE -Wall -fexceptions)
target_compile_options(zipdirfs PRIVATE ${FUSE_CFLAGS_OTHER} ${FUSEKIT_CFLAGS_OTHER} ${LIBZIP_CFLAGS_OTHER})
target_include_directories(zipdirfs PRIVATE ${PROJECT_BINARY_DIR})
target_link_libraries(zipdirfs PRIVATE zipdirfs_core ${FUSE_LIBRARIES})
target_link_options(zipdirfs PRIVATE ${FUSE_LDFLAGS_OTHER})
install(TARGETS zipdirfs RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

configure_file(${PROJECT_SOURCE_DIR}/include/config.h ${PROJECT_BINARY_DIR}/config.h)
