add_subdirectory(beziercurve)
add_subdirectory(colorcorrection)
add_subdirectory(kiss_fft)
add_subdirectory(mimetypes)
add_subdirectory(onmonitoritems)
add_subdirectory(rotoscoping)
add_subdirectory(widgets)
add_subdirectory(databackup)

macro_optional_find_package(Nepomuk)
macro_optional_find_package(QJSON)

include_directories(
  ${KDE4_INCLUDE_DIR}
  ${KDE4_INCLUDE_DIR}/KDE
  ${QT_INCLUDES}
  ${LIBMLT_INCLUDE_DIR}
  ${LIBMLTPLUS_INCLUDE_DIR}
  ${QDBUS_INCLUDE_DIRS}
  ${CMAKE_SOURCE_DIR}
  ${CMAKE_BINARY_DIR}
  ${CMAKE_SOURCE_DIR}/src/audioscopes
  ${CMAKE_SOURCE_DIR}/src/beziercurve
  ${CMAKE_SOURCE_DIR}/src/colorcorrection
  ${CMAKE_SOURCE_DIR}/src/kiss_fft
  ${CMAKE_SOURCE_DIR}/src/onmonitoritems
  ${CMAKE_SOURCE_DIR}/src/onmonitoritems/rotoscoping
  ${CMAKE_SOURCE_DIR}/src/widgets
)


if(Nepomuk_FOUND)
  include_directories(NEPOMUK_INCLUDES)
  set(optional_libs ${NEPOMUK_LIBRARIES})
  add_definitions(-DNEPOMUK)
endif(Nepomuk_FOUND)

if(QJSON_FOUND)
  include_directories(QJSON_INCLUDE_DIR)
  set(optional_libs ${optional_libs} ${QJSON_LIBRARIES})
  add_definitions(-DQJSON)
else(QJSON_FOUND)
  message(STATUS "Install QJson to use the rotoscoping filter")
endif(QJSON_FOUND)

if(Q_WS_X11)
  include_directories(${X11_Xlib_INCLUDE_PATH})
endif(Q_WS_X11)

if(APPLE)
  find_package(OpenGL)
  set(QT_USE_QTOPENGL TRUE)
else(APPLE)
  macro_optional_find_package(OpenGL)
endif(APPLE)


link_libraries(
  ${LIBMLT_LIBRARY}
  ${LIBMLTPLUS_LIBRARY}
  ${optional_libs}
)

kde4_add_ui_files(kdenlive_UI
  widgets/timeline_ui.ui
  widgets/recmonitor_ui.ui
  widgets/colorclip_ui.ui
  widgets/slideshowclip_ui.ui
  widgets/configmisc_ui.ui
  widgets/configenv_ui.ui
  widgets/configtimeline_ui.ui
  widgets/configsdl_ui.ui
  widgets/configcapture_ui.ui
  widgets/configtranscode_ui.ui
  widgets/configproject_ui.ui
  widgets/effectlist_ui.ui
  widgets/effectstack_ui.ui
  widgets/profiledialog_ui.ui
  widgets/projectsettings_ui.ui
  widgets/keyframewidget_ui.ui
  widgets/listval_ui.ui
  widgets/wipeval_ui.ui
  widgets/boolval_ui.ui
  widgets/titlewidget_ui.ui
  widgets/unicodedialog_ui.ui
  widgets/timelinebuttons_ui.ui
  widgets/renderwidget_ui.ui
  widgets/saveprofile_ui.ui
  widgets/transitionsettings_ui.ui
  widgets/configjogshuttle_ui.ui
  widgets/trackheader_ui.ui
  widgets/clipproperties_ui.ui
  widgets/markerdialog_ui.ui
  widgets/keyframedialog_ui.ui
  widgets/clipdurationdialog_ui.ui
  widgets/managecaptures_ui.ui
  widgets/geometryval_ui.ui
  widgets/wizardstandard_ui.ui
  widgets/wizardextra_ui.ui
  widgets/wizardcapture_ui.ui
  widgets/wizardcheck_ui.ui
  widgets/wizardmltcheck_ui.ui
  widgets/spacerdialog_ui.ui
  widgets/addtrack_ui.ui
  widgets/dvdwizardvob_ui.ui
  widgets/dvdwizardmenu_ui.ui
  widgets/dvdwizardstatus_ui.ui
  widgets/dvdwizardchapters_ui.ui
  widgets/missingclips_ui.ui
  widgets/cliptranscode_ui.ui
  widgets/templateclip_ui.ui
  widgets/keyframeeditor_ui.ui
  widgets/tracksconfigdialog_ui.ui
  widgets/urlval_ui.ui
  widgets/vectorscope_ui.ui
  widgets/colorplaneexport_ui.ui
  widgets/waveform_ui.ui
  widgets/rgbparade_ui.ui
  widgets/histogram_ui.ui
  widgets/geometrywidget_ui.ui
  widgets/stopmotion_ui.ui
  widgets/audiospectrum_ui.ui
  widgets/spectrogram_ui.ui
  widgets/smconfig_ui.ui
  widgets/bezierspline_ui.ui
  widgets/monitoreditwidget_ui.ui
  widgets/archivewidget_ui.ui
  widgets/manageencodingprofile_ui.ui
  widgets/backupdialog_ui.ui
)

set(kdenlive_SRCS
  ${kdenlive_SRCS}
  addclipcommand.cpp
  main.cpp
  mainwindow.cpp
  customruler.cpp
  smallruler.cpp
  projectlist.cpp
  projectitem.cpp
  monitor.cpp
  gentime.cpp
  renderer.cpp
  kdenlivedoc.cpp
  projectlistview.cpp
  trackview.cpp
  docclipbase.cpp
  timecode.cpp
  monitormanager.cpp
  headertrack.cpp
  customtrackview.cpp
  clipitem.cpp
  moveclipcommand.cpp
  resizeclipcommand.cpp
  razorclipcommand.cpp
  addtimelineclipcommand.cpp
  addmarkercommand.cpp
  kthumb.cpp
  clipmanager.cpp
  effectslist.cpp
  initeffects.cpp
  effectslistview.cpp
  addeffectcommand.cpp
  editeffectcommand.cpp
  moveeffectcommand.cpp
  effectstackview.cpp
  effectstackedit.cpp
  parameterplotter.cpp
  profilesdialog.cpp
  projectsettings.cpp
  kdenlivesettingsdialog.cpp
  complexparameter.cpp
  titlewidget.cpp
  unicodedialog.cpp
  graphicsscenerectmove.cpp
  effectslistwidget.cpp
  titledocument.cpp
  transition.cpp
  renderwidget.cpp
  abstractclipitem.cpp
  transitionsettings.cpp
  recmonitor.cpp
  addtransitioncommand.cpp
  edittransitioncommand.cpp
  addfoldercommand.cpp
  editfoldercommand.cpp
  clipproperties.cpp
  movetransitioncommand.cpp
  slideshowclip.cpp
  markerdialog.cpp
  guide.cpp
  editguidecommand.cpp
  statusbarmessagelabel.cpp
  editkeyframecommand.cpp
  clipdurationdialog.cpp
  managecapturesdialog.cpp
  changespeedcommand.cpp
  geometryval.cpp
  wizard.cpp
  customtrackscene.cpp
  abstractgroupitem.cpp
  keyframehelper.cpp
  editclipcommand.cpp
  insertspacecommand.cpp
  spacerdialog.cpp
  addtrackcommand.cpp
  movegroupcommand.cpp
  dvdwizardvob.cpp
  dvdwizardmenu.cpp
  dvdwizard.cpp
  locktrackcommand.cpp
  groupclipscommand.cpp
  splitaudiocommand.cpp
  changecliptypecommand.cpp
  documentchecker.cpp
  dvdwizardchapters.cpp
  documentvalidator.cpp
  cliptranscode.cpp
  keyframeedit.cpp
  positionedit.cpp
  trackdialog.cpp
  subprojectitem.cpp
  folderprojectitem.cpp
  addclipcutcommand.cpp
  editclipcutcommand.cpp
  KoSliderCombo.cpp
  kis_cubic_curve.cpp
  kis_curve_widget.cpp
  timecodedisplay.cpp
  tracksconfigdialog.cpp
  configtrackscommand.cpp
  abstractscopewidget.cpp
  audioscopes/abstractaudioscopewidget.cpp
  audioscopes/audiospectrum.cpp
  audioscopes/spectrogram.cpp
  audioscopes/ffttools.cpp
  rebuildgroupcommand.cpp
  colorscopes/abstractgfxscopewidget.cpp
  colorscopes/histogram.cpp
  colorscopes/rgbparade.cpp
  colorscopes/vectorscope.cpp
  colorscopes/waveform.cpp
  colorplaneexport.cpp
  colortools.cpp
  colorcorrection/histogramgenerator.cpp
  colorcorrection/rgbparadegenerator.cpp
  colorcorrection/vectorscopegenerator.cpp
  colorcorrection/waveformgenerator.cpp
  razorgroupcommand.cpp
  colorpickerwidget.cpp
  choosecolorwidget.cpp
  monitorscene.cpp
  geometrywidget.cpp
  doubleparameterwidget.cpp
  audiosignal.cpp
  blackmagic/include/DeckLinkAPIDispatch.cpp
  stopmotion/stopmotion.cpp
  blackmagic/devices.cpp
  onmonitoritems/onmonitorrectitem.cpp
  onmonitoritems/onmonitorcornersitem.cpp
  cornerswidget.cpp
  kiss_fft/_kiss_fft_guts.h
  kiss_fft/kiss_fft.c
  kiss_fft/tools/kiss_fftr.c
  beziercurve/beziersplineeditor.cpp
  beziercurve/beziersplinewidget.cpp
  beziercurve/bpoint.cpp
  beziercurve/cubicbezierspline.cpp
  dragvalue.cpp
  monitoreditwidget.cpp
  simplekeyframes/simpletimelinewidget.cpp
  simplekeyframes/simplekeyframewidget.cpp
  noteswidget.cpp
  archivewidget.cpp
  mltdevicecapture.cpp
  abstractmonitor.cpp
  encodingprofilesdialog.cpp
)

add_definitions(${KDE4_DEFINITIONS})

if(CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD")
  add_definitions(-DQ_OS_KFREEBSD)
endif(CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD")

if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR NO_JOGSHUTTLE)
  add_definitions(-DNO_JOGSHUTTLE)
else(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR NO_JOGSHUTTLE)
  set(kdenlive_SRCS jogshuttle.cpp jogaction.cpp jogshuttleconfig.cpp ${kdenlive_SRCS})
endif(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR NO_JOGSHUTTLE)

if(APPLE OR OPENGL_FOUND)
  add_definitions(-DUSE_OPEN_GL)
  set(kdenlive_SRCS videoglwidget.cpp ${kdenlive_SRCS})
endif(APPLE OR OPENGL_FOUND)

if(NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD")
  set(kdenlive_SRCS
    ${kdenlive_SRCS}
    v4l/v4lcapture.cpp
    v4l/src.c
  )
endif(NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD")

if(QJSON_FOUND)
  set(kdenlive_SRCS
    ${kdenlive_SRCS}
    onmonitoritems/rotoscoping/bpointitem.cpp
    onmonitoritems/rotoscoping/nearestpoint.cpp
    onmonitoritems/rotoscoping/splineitem.cpp
    rotoscoping/rotowidget.cpp
  )
endif(QJSON_FOUND)

# Add libdl
find_library(DL_LIB NAMES ${CMAKE_DL_LIBS})
message(STATUS "using dl library: ${DL_LIB}")

kde4_add_kcfg_files(kdenlive_SRCS kdenlivesettings.kcfgc)
qt4_add_dbus_adaptor(kdenlive_SRCS org.kdenlive.MainWindow.xml mainwindow.h MainWindow)
qt4_add_resources(kdenlive_SRCS widgets/resources.qrc)
kde4_add_executable(kdenlive ${kdenlive_SRCS} ${kdenlive_UI})

if(${KDE_VERSION} VERSION_LESS 4.3.80)
  set(KNEWSTUFF_LIBS ${KDE4_KNEWSTUFF2_LIBS})
else(${KDE_VERSION} VERSION_LESS 4.3.80)
  set(KNEWSTUFF_LIBS ${KDE4_KNEWSTUFF3_LIBS})
endif(${KDE_VERSION} VERSION_LESS 4.3.80)

target_link_libraries(kdenlive
  ${KDE4_KDEUI_LIBS}
  ${KDE4_KIO_LIBS}
  ${KNEWSTUFF_LIBS}
  ${LIBMLTPLUS_LIBRARY}
  ${LIBMLT_LIBRARY}
  ${optional_libs}
  ${KDE4_KNOTIFYCONFIG_LIBRARY}
  ${KDE4_KROSSUI_LIBS}
  ${CMAKE_DL_LIBS}
  ${CMAKE_THREAD_LIBS_INIT}
  ${QT_QTSCRIPT_LIBRARY}
)

if(Q_WS_X11)
  target_link_libraries(kdenlive ${X11_LIBRARIES})
endif(Q_WS_X11)

if(APPLE)
  find_package(SDL REQUIRED)
  target_link_libraries(kdenlive ${SDL_LIBRARY})
  target_link_libraries(kdenlive ${QT_QTOPENGL_LIBRARY})
  target_link_libraries(kdenlive ${OPENGL_LIBRARIES})
else(APPLE)
  add_definitions(-DHAVE_V4L2)
  if(OPENGL_FOUND)
    target_link_libraries(kdenlive ${QT_QTOPENGL_LIBRARY})
    target_link_libraries(kdenlive ${OPENGL_LIBRARIES})
  endif(OPENGL_FOUND)
endif(APPLE)

install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR})
install(FILES kdenliveui.rc kdenlive.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdenlive)
install(FILES kdenlivesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR})
install(FILES kdenlive.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
kde4_install_icons(${ICON_INSTALL_DIR})
install(FILES kdenlive_titles.knsrc kdenlive_wipes.knsrc kdenlive_renderprofiles.knsrc kdenlive_projectprofiles.knsrc kdenlivetranscodingrc DESTINATION ${CONFIG_INSTALL_DIR})
