cmake_minimum_required(VERSION 2.8)
project(jasmine)
find_package(Qt4 4.5 REQUIRED QtCore QtGui QtNetwork)
find_package(OpenMP)
add_definitions(${QT_DEFINITIONS})
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDE_DIR})
include(${QT_USE_FILE})
if(CMAKE_BUILD_TYPE STREQUAL Debug)
    message(STATUS "Debugging mode is being enabled. This is not recommended for normal use.")
    add_definitions(-DDEBUG)
    set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wall)
endif(CMAKE_BUILD_TYPE STREQUAL Debug)
#No mocs
set(main main.cxx settings.cxx)
set(validator
    validator/ipaddressvalidator.cxx
    )
set(ported_rmd6
    ported_rmd6/basis.cxx
    ported_rmd6/context.cxx
    ported_rmd6/rmd6.cxx
    ported_rmd6/rmd6_context.cxx
    )
set(structures
    structures/header.cxx
    settings.cxx
    )

#Mocs
set(network_h
    network/tcpnetwork.h
)
set(ui_h
    ui/about.h
    ui/editdelegate.h
    ui/jasmine_mainwindow.h
    ui/memberlist.h
    ui/settingdialog.h
    ui/rtfeditor.h
)
#set(file_h file/qtlockedfile.h)

#Ui files
set(ui
    ui/uifiles/about.ui
    ui/uifiles/jasmine_main.ui
    ui/uifiles/settings.ui
    )

#The implementation files
set(network_src
    network/tcpnetwork.cxx
    network/server.cxx
    network/client.cxx
)
set(ui_src
    ui/about.cxx
    ui/editdelegate.cxx
    ui/jasmine_mainwindow.cxx
    ui/memberlist.cxx
    ui/settingdialog.cxx
    ui/rtfeditor.cxx
)
set(file_impl file/qtlockedfile.cxx)
set(file_win32 file/qtlockedfile_win.cxx)
set(file_unix file/qtlockedfile_unix.cxx)

#resource files
set(res
	res/main.res
	)

qt4_wrap_cpp(network_moc ${network_h})
#qt4_wrap_cpp(file_moc ${file_h})
qt4_wrap_cpp(ui_moc ${ui_h})
qt4_wrap_ui(ui_moc ${ui})
qt4_add_resources(res_moc ${res})
if(WIN32)
    if(OPENMP_FOUND)
        add_executable(jasmine WIN32
            ${main} ${ui_moc} ${ui_src} ${network_moc}
            ${network_src} ${structures} ${res_moc}
            ${validator} ${ported_rmd6} ${file_win32}
            ${file_impl})
        set_property(TARGET jasmine PROPERTY COMPILE_FLAGS ${OpenMP_CXX_FLAGS} APPEND)
        target_link_libraries(jasmine gomp ${QT_LIBRARIES})
    else(OPENMP_FOUND)
        add_executable(jasmine WIN32
            ${main} ${ui_moc} ${ui_src} ${network_moc}
            ${network_src} ${structures} ${res_moc}
            ${validator} ${ported_rmd6} ${file_win32} ${file_impl})
        target_link_libraries(jasmine ${QT_LIBRARIES})
    endif(OPENMP_FOUND)
else(WIN32)
    add_library(qripemd160 SHARED ${ported_rmd6})
    add_library(validator SHARED ${validator})
    add_library(resource SHARED ${res_moc})
    add_library(structures SHARED ${structures})

    add_library(network SHARED ${network_moc} ${network_src})
    add_library(ui SHARED ${ui_moc} ${ui_src})
    add_library(file SHARED ${file_unix} ${file_impl})

    add_executable(jasmine ${main})

    target_link_libraries(qripemd160 ${QT_LIBRARIES})
    target_link_libraries(validator ${QT_LIBRARIES})
    target_link_libraries(resource ${QT_LIBRARIES})
    target_link_libraries(structures ${QT_LIBRARIES})
    target_link_libraries(file ${QT_LIBRARIES})

    target_link_libraries(structures qripemd160 ${QT_LIBRARIES})
    target_link_libraries(network structures validator file ${QT_LIBRARIES})
    target_link_libraries(ui resource network file ${QT_LIBRARIES})

    target_link_libraries(jasmine ui ${QT_LIBRARIES})
    if(OPENMP_FOUND)
        set_property(TARGET ui PROPERTY COMPILE_FLAGS ${OpenMP_CXX_FLAGS} APPEND)
        #set_property(TARGET network PROPERTY COMPLE_FLAGS ${OpenMP_CXX_FLAGS} APPEND)
        target_link_libraries(ui gomp)
    endif(OPENMP_FOUND)
endif(WIN32)
