project(QTPROPERTYBROWSER)

cmake_minimum_required(VERSION 2.6)

set(QT_MIN_VERSION "4.6.0")
FIND_PACKAGE(Qt4 REQUIRED)

if(NOT QT4_FOUND)
  message(SEND_ERROR "Failed to find Qt 4.6 or greater. This is needed for qtpropertybrowser tool, and therefore for CamiTK.")
endif()

include(${QT_USE_FILE})

# Is this tool is compiled inside or outside CAMITK (as a standalone)?
if (NOT CAMITK_SOURCE_DIR)
  # if this tool is compiled independantly from CamiTK
  set(QTPROPERTYBROWSER_STANDALONE ON CACHE BOOL "ON only if QTPROPERTYBROWSER compiled outside CAMITK")
  message(SEND_ERROR "Compilation of QTPROPERTYBROWSER outside CamiTK not implemented yet. Please contact authors")
endif()

set(qtpropertyeditor_SRCS
  src/qtpropertybrowser.cpp
  src/qtpropertymanager.cpp
  src/qteditorfactory.cpp
  src/qtvariantproperty.cpp
  src/qttreepropertybrowser.cpp
  src/qtbuttonpropertybrowser.cpp
  src/qtgroupboxpropertybrowser.cpp
  src/qtpropertybrowserutils.cpp
)

include_directories(${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}/src
  ${QTPROPERTYBROWSER_SOURCE_DIR}/src
  ${QT_INCLUDE_DIR}
)

qt4_generate_moc(
  src/qtpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtpropertymanager.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertymanager.cpp
)
qt4_generate_moc(
  src/qteditorfactory.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qteditorfactory.cpp
)
qt4_generate_moc(
  src/qtvariantproperty.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cpp
)
qt4_generate_moc(
  src/qttreepropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cpp
)
qt4_generate_moc(
  src/qtbuttonpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbuttonpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtgroupboxpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtgroupboxpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtpropertymanager.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qtpropertymanager.moc
)
qt4_generate_moc(
  src/qteditorfactory.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qteditorfactory.moc
)
qt4_generate_moc(
  src/qttreepropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qttreepropertybrowser.moc
)

set(
  qtpropertyeditor_HEADERS_ONLY_MOC
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertymanager.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qteditorfactory.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbuttonpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtgroupboxpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qtpropertymanager.moc
  ${CMAKE_CURRENT_BINARY_DIR}/qteditorfactory.moc
  ${CMAKE_CURRENT_BINARY_DIR}/qttreepropertybrowser.moc
)

set_source_files_properties(
  ${qtpropertyeditor_HEADERS_ONLY_MOC}
  PROPERTIES
    HEADER_FILE_ONLY true
)

qt4_generate_moc(
  src/qtpropertybrowserutils_p.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowserutils_p.cpp
)

set(
  qtpropertyeditor_HEADERS_MOC
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowserutils_p.cpp
)

set(
  qtpropertyeditor_MOC
  ${qtpropertyeditor_HEADERS_MOC}
  ${qtpropertyeditor_HEADERS_ONLY_MOC}
)

qt4_add_resources(
  qtpropertyeditor_RESOURCES
  src/qtpropertybrowser.qrc
)

qt4_add_resources(RESOURCE_SRCS src/qtpropertybrowser.qrc)

#${extension_SRCS}

set(SRCS   ${extension_MOC}
  ${qtpropertyeditor_MOC}
  ${qtpropertyeditor_SRCS}
  ${qtpropertyeditor_RESOURCES}
)

add_definitions(-DCOMPILE_QTPROPERTYBROWSER)

#-----------
# 64bits
#-----------
# this is needed on 64bits processor to avoid relocation R_X86_64_32 error
if( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
  add_definitions(-fPIC)
endif( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )

# prepare the library specific info (SONAME...)
set(QTPROPERTYBROWSER_LIBRARY_PROPERTIES ${QTPROPERTYBROWSER_LIBRARY_PROPERTIES}
    VERSION   "${CAMITK_VER_MAJ}.${CAMITK_VER_MIN}.${CAMITK_VER_PAT}"
    SOVERSION "${CAMITK_VER_MAJ}.${CAMITK_VER_MIN}"
)

add_library(qtpropertybrowser SHARED ${SRCS}) # better use static libs for distributing executables

# set the library specific info (SONAME...)
set_target_properties(qtpropertybrowser PROPERTIES ${QTPROPERTYBROWSER_LIBRARY_PROPERTIES} LINK_INTERFACE_LIBRARIES "")

target_link_libraries(qtpropertybrowser ${QT_LIBRARIES})

# take all the headers for installation
file(GLOB HEADERS_H "src/*.h")
file(GLOB HEADERS_UPPERCASE "src/Qt*")

#--------------
# installation
#--------------
export_headers(${HEADERS_H} ${HEADERS_UPPERCASE} COMPONENT qtpropertybrowser)

# lib installation
install(TARGETS qtpropertybrowser
	RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
        COMPONENT qtpropertybrowser
)
