set(QT_DONT_USE_QTGUI TRUE)
set(QT_USE_QTNETWORK TRUE)

include(${QT_USE_FILE})

set(rinputd_SRCS
    main.cpp
    InputDevice.cpp
    Server.cpp
)

set(rinputd_MOC_HDRS
    InputDevice.h
    Server.h
)

if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(rinputd_SRCS ${rinputd_SRCS} LinuxInputDevice.cpp)
    set(rinputd_MOC_HDRS ${rinputd_MOC_HDRS} LinuxInputDevice.h)
elseif (APPLE)
    set(rinputd_SRCS ${rinputd_SRCS} MacBroadcaster.mm MacInputDevice.mm MacAuthThread.mm)
    set(rinputd_MOC_HDRS ${rinputd_MOC_HDRS} MacBroadcaster.h MacInputDevice.h MacAuthThread.h)

    find_library(CORE_AUDIO_FRAMEWORK CoreAudio)
    find_library(SECURITY_FRAMEWORK Security)
    find_library(SYSTEM_CONFIGURATION_FRAMEWORK SystemConfiguration)
    find_library(FOUNDATION_FRAMEWORK Foundation)
    find_library(APP_KIT_FRAMEWORK AppKit)
    set(EXTRA_LIBS ${CORE_AUDIO_FRAMEWORK} ${SECURITY_FRAMEWORK} ${SYSTEM_CONFIGURATION_FRAMEWORK} ${FOUNDATION_FRAMEWORK} ${APP_KIT_FRAMEWORK})
endif ()

if (USE_AVAHI)
    set(rinputd_SRCS ${rinputd_SRCS} AvahiBroadcaster.cpp)
    set(rinputd_MOC_HDRS ${rinputd_MOC_HDRS} AvahiBroadcaster.h)
    include_directories(${AVAHI_CLIENT_INCLUDE_DIRS} ${AVAHI_QT4_INCLUDE_DIRS})
    link_directories(${AVAHI_CLIENT_LIBRARY_DIRS} ${AVAHI_QT4_LIBRARY_DIRS})
endif ()

qt4_automoc(${rinputd_SRCS})
qt4_wrap_cpp(rinputd_MOC_SRCS ${rinputd_MOC_HDRS})

include_directories(${rinput_SOURCE_DIR}/common)
link_directories(${rinput_SOURCE_DIR}/common)

if (APPLE)
    add_executable(rinputd MACOSX_BUNDLE ${rinputd_SRCS} ${rinputd_MOC_HDRS} ${rinputd_MOC_SRCS})
    target_link_libraries(rinputd common ${QT_LIBRARIES} ${EXTRA_LIBS})

    set(BUNDLE_PATH "${CMAKE_CURRENT_BINARY_DIR}/rinputd.app")
    set(FRAMEWORKS_PATH "${BUNDLE_PATH}/Contents/Frameworks")
    set(INSTALL_PATH "/Library/Remote Input/rinputd.app")

    if (${CMAKE_GENERATOR} MATCHES "Xcode")
        add_custom_command(TARGET rinputd POST_BUILD
            COMMAND rm -rf "${BUNDLE_PATH}"
            COMMAND cp -R "${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION)/rinputd.app" "${CMAKE_CURRENT_BINARY_DIR}/"
        VERBATIM)
    endif ()

    add_custom_target(package ALL
        COMMAND rm -rf "${FRAMEWORKS_PATH}"
        COMMAND mkdir -p "${FRAMEWORKS_PATH}"
        COMMAND cp -R "${QT_QTNETWORK_LIBRARY_RELEASE}" "${FRAMEWORKS_PATH}/"
        COMMAND cp -R "${QT_QTCORE_LIBRARY_RELEASE}" "${FRAMEWORKS_PATH}/"
        COMMAND rm -rf "${FRAMEWORKS_PATH}/QtCore.framework/{,Versions/4/}Headers"
        COMMAND rm -rf "${FRAMEWORKS_PATH}/QtNetwork.framework/{,Versions/4/}Headers"
        COMMAND find "${FRAMEWORKS_PATH}" -name "*_debug*" -print0 | xargs -0 rm
	COMMAND install_name_tool -id "${INSTALL_PATH}/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork" "${FRAMEWORKS_PATH}/QtNetwork.framework/Versions/4/QtNetwork"
	COMMAND install_name_tool -id "${INSTALL_PATH}/Contents/Frameworks/QtCore.framework/Versions/4/QtCore" "${FRAMEWORKS_PATH}/QtCore.framework/Versions/4/QtCore"
	COMMAND install_name_tool -change "QtNetwork.framework/Versions/4/QtNetwork" "${INSTALL_PATH}/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork" ${BUNDLE_PATH}/Contents/MacOS/rinputd
	COMMAND install_name_tool -change "QtCore.framework/Versions/4/QtCore" "${INSTALL_PATH}/Contents/Frameworks/QtCore.framework/Versions/4/QtCore" "${BUNDLE_PATH}/Contents/MacOS/rinputd"
	COMMAND install_name_tool -change "QtCore.framework/Versions/4/QtCore" "${INSTALL_PATH}/Contents/Frameworks/QtCore.framework/Versions/4/QtCore" "${BUNDLE_PATH}/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork"
        COMMAND packagemaker --doc "${CMAKE_SOURCE_DIR}/mac/Remote Input Server.pmdoc" -o "${CMAKE_CURRENT_BINARY_DIR}/Remote Input Server.pkg"
    VERBATIM)
    add_dependencies(package rinputd rinputd-man)
else ()
    add_executable(rinputd ${rinputd_SRCS} ${rinputd_MOC_SRCS})
    target_link_libraries(rinputd common ${QT_LIBRARIES} ${EXTRA_LIBS} sasl2)
endif ()

if (USE_AVAHI)
    target_link_libraries(rinputd ${AVAHI_CLIENT_LIBRARIES} ${AVAHI_QT4_LIBRARIES})
endif ()

add_custom_target(rinputd-man ALL gzip -c --best ${rinput_SOURCE_DIR}/rinputd/rinputd.8 > rinputd.8.gz)

if (NOT APPLE)
    install(TARGETS rinputd RUNTIME DESTINATION sbin COMPONENT rinputd)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rinputd.8.gz DESTINATION share/man/man8 COMPONENT man)
    install(DIRECTORY DESTINATION /etc/rinput)
endif ()
