cmake_minimum_required(VERSION 2.6)
# based on kdelibs/kjs/CMakeLists.txt
project(qtix)

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(-m32 SUPPORTS_M32)

if (SUPPORTS_M32)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 ")
endif(SUPPORTS_M32)

IF(WIN32)
    MESSAGE(WARNING " Win32 build. Tricky workarounds enabled")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-cygwin")
    SET(QT_QMAKE_EXECUTABLE ./qmake-wrap.sh)
    SET(QT_MOC_EXECUTABLE ./moc-wrap.sh)
    EXECUTE_PROCESS(COMMAND cygpath -m ${CMAKE_CURRENT_SOURCE_DIR}/ OUTPUT_VARIABLE QIDL_DIR)
ELSE(WIN32)
  SET(QIDL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/)
ENDIF(WIN32)

# handy default option from the FAQ...
IF(NOT CMAKE_BUILD_TYPE)
  SET(CMAKE_BUILD_TYPE Debug CACHE STRING
      "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
      FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)

set(Qt4_FIND_REQUIRED 1)
include(FindQt4)

find_library(I9 NAMES i9 PATHS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})

if(I9)
    set(I9_FOUND TRUE)
    MESSAGE("Found libi9, will build examples")
else(I9)
    MESSAGE(WARNING " libi9 not found. Won't build examples.")
    MESSAGE(WARNING " copy it here, and remove CMakeCache.txt to try again.")
endif(I9)

include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})


########### makebindings ###############
set(makebindings_SRCS
    generator/types.cpp
    generator/codeprinter.cpp
    generator/driver.cpp
    generator/lexer.cpp
    generator/parser.cpp
    generator/bindgen.cpp
   )
ADD_EXECUTABLE(makebindings ${makebindings_SRCS})

# and the custom command
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bindqt.h ${CMAKE_CURRENT_BINARY_DIR}/bindqt.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/qt.ixi
  COMMAND ${CMAKE_CURRENT_BINARY_DIR}/makebindings ${QIDL_DIR}
  DEPENDS makebindings ${CMAKE_CURRENT_SOURCE_DIR}/qt.idl
          ${CMAKE_CURRENT_SOURCE_DIR}/bindqt.h.in
          ${CMAKE_CURRENT_SOURCE_DIR}/bindqt.cpp.in
          ${CMAKE_CURRENT_SOURCE_DIR}/qt.ixi.in
)

########### next target ###############

set (QtIX_MOC_HEADERS ixqslot.h)
qt4_wrap_cpp (QtIX_MOC_OUTFILES ${QtIX_MOC_HEADERS})
set(QtIX_LIB_SRCS
    ${CMAKE_CURRENT_BINARY_DIR}/bindqt.cpp
    gcpin.cpp
    ixqobjectholder.cpp
    ixqwrapperfactory.cpp
    ixqproxywidgets.cpp
    ixqslot.cpp
    )


add_library(QtIX STATIC ${QtIX_LIB_SRCS} ${QtIX_MOC_OUTFILES})

########### next target ###############

if (I9_FOUND)
    ADD_EXECUTABLE(onewidget tests/onewidget.cpp)
    TARGET_LINK_LIBRARIES(onewidget QtIX ${I9} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})

    ADD_EXECUTABLE(layouts tests/layouts.cpp)
    TARGET_LINK_LIBRARIES(layouts QtIX ${I9} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})

    ADD_EXECUTABLE(widgetevents tests/widgetevents.cpp)
    TARGET_LINK_LIBRARIES(widgetevents QtIX ${I9} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})

    ADD_EXECUTABLE(animate tests/animate.cpp)
    TARGET_LINK_LIBRARIES(animate QtIX ${I9} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})

    ADD_EXECUTABLE(animate-fancy tests/animate-fancy.cpp)
    TARGET_LINK_LIBRARIES(animate-fancy QtIX ${I9} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
endif(I9_FOUND)

