SET(QGIS_APP_SRCS
  main.cpp
  qgisapp.cpp
  qgisappinterface.cpp
  qgsabout.cpp
  qgssponsors.cpp
  qgsaddattrdialog.cpp
  qgsaddjoindialog.cpp
  qgsannotationwidget.cpp
  qgsattributeactiondialog.cpp
  qgsattributedialog.cpp
  qgsattributetypedialog.cpp
  qgsattributetypeloaddialog.cpp
  qgsbookmarkitem.cpp
  qgsbookmarks.cpp
  qgsclipboard.cpp
  qgscontinuouscolordialog.cpp
  qgsconfigureshortcutsdialog.cpp
  qgscustomprojectiondialog.cpp
  qgsdbfilterproxymodel.cpp
  qgsdbtablemodel.cpp
  qgsformannotationdialog.cpp
  qgsdelattrdialog.cpp
  qgsdisplayangle.cpp
  qgsfieldcalculator.cpp
  qgsnewvectorlayerdialog.cpp
  qgsgraduatedsymboldialog.cpp
  qgsidentifyresults.cpp
  qgsfeatureaction.cpp
  qgslabeldialog.cpp
  qgslabelpropertydialog.cpp
  qgslabelengineconfigdialog.cpp
  qgslabelinggui.cpp
  qgslabelpreview.cpp
  qgsmaptooladdfeature.cpp
  qgsmaptooladdvertex.cpp
  qgsmaptooladdisland.cpp
  qgsmaptooladdring.cpp
  qgsmaptoolannotation.cpp
  qgsmaptoolcapture.cpp
  qgsmaptoolchangelabelproperties.cpp
  qgsmaptooldeletering.cpp
  qgsmaptooldeletepart.cpp
  qgsmaptooldeletevertex.cpp
  qgsmaptooledit.cpp
  qgsmaptoolformannotation.cpp
  qgsmaptoolidentify.cpp
  qgsmaptoollabel.cpp
  qgsmaptoolmeasureangle.cpp
  qgsmaptoolmovefeature.cpp
  qgsmaptoolmovelabel.cpp
  qgsmaptoolmovevertex.cpp
  qgsmaptoolnodetool.cpp
  qgsmaptoolreshape.cpp
  qgsmaptoolrotatelabel.cpp
  qgsmaptoolrotatepointsymbols.cpp
  qgsmaptoolselect.cpp
  qgsmaptoolselectrectangle.cpp
  qgsmaptoolselectfreehand.cpp
  qgsmaptoolselectpolygon.cpp
  qgsmaptoolselectradius.cpp
  qgsmaptoolselectutils.cpp
  qgsmaptoolsimplify.cpp
  qgsmaptoolsplitfeatures.cpp
  qgsmaptooltextannotation.cpp
  qgsmaptoolvertexedit.cpp
  qgsmeasuredialog.cpp
  qgsmeasuretool.cpp
  qgsmergeattributesdialog.cpp
  qgsnewhttpconnection.cpp
  qgsnumericsortlistviewitem.cpp
  qgsoptions.cpp
  qgspastetransformations.cpp
  qgspointrotationitem.cpp
  qgspluginitem.cpp
  qgspluginmanager.cpp
  qgspluginmetadata.cpp
  qgspluginregistry.cpp
  qgsprojectproperties.cpp
  qgsrastercalcdialog.cpp
  qgsrasterlayerproperties.cpp
  qgstextannotationdialog.cpp
  qgswmssourceselect.cpp
  qgsshortcutsmanager.cpp
  qgssinglesymboldialog.cpp
  qgssnappingdialog.cpp
  qgsundowidget.cpp
  qgstilescalewidget.cpp
  qgstipgui.cpp
  qgstipfactory.cpp
  qgsuniquevaluedialog.cpp
  qgsvectorlayerproperties.cpp
  qgsquerybuilder.cpp
  qgshighlight.cpp
  qgshandlebadlayers.cpp

  qgsmanageconnectionsdialog.cpp

  composer/qgsattributeselectiondialog.cpp
  composer/qgscomposer.cpp
  composer/qgscomposerarrowwidget.cpp
  composer/qgscomposeritemwidget.cpp
  composer/qgscomposerlabelwidget.cpp
  composer/qgscomposerpicturewidget.cpp
  composer/qgscomposermanager.cpp
  composer/qgscomposermapwidget.cpp
  composer/qgscomposerscalebarwidget.cpp
  composer/qgscomposershapewidget.cpp
  composer/qgscomposertablewidget.cpp
  composer/qgscomposerlegenditemdialog.cpp
  composer/qgscomposerlegendlayersdialog.cpp
  composer/qgscomposerlegendwidget.cpp
  composer/qgscompositionwidget.cpp
  composer/qgsitempositiondialog.cpp

  legend/qgslegendgroup.cpp
  legend/qgslegend.cpp
  legend/qgsapplegendinterface.cpp
  legend/qgslegenditem.cpp
  legend/qgslegendlayer.cpp
  legend/qgslegendpropertygroup.cpp
  legend/qgslegendpropertyitem.cpp
  legend/qgslegendsymbologygroup.cpp
  legend/qgslegendsymbologyitem.cpp
  legend/qgslegendvectorsymbologyitem.cpp

  ogr/qgsogrhelperfunctions.cpp
  ogr/qgsopenvectorlayerdialog.cpp
  ogr/qgsnewogrconnection.cpp
  ogr/qgsogrsublayersdialog.cpp
  ogr/qgsvectorlayersaveasdialog.cpp
  
  attributetable/qgsattributetabledialog.cpp
  attributetable/qgsattributetablemodel.cpp
  attributetable/qgsattributetablememorymodel.cpp
  attributetable/qgsattributetableview.cpp
  attributetable/qgsattributetablefiltermodel.cpp
  attributetable/qgsattributetableidcolumnpair.cpp
  attributetable/qgsattributetabledelegate.cpp

  gps/qgsgpsinformationwidget.cpp
  gps/qgsgpsmarker.cpp
) 


SET (QGIS_APP_MOC_HDRS
  qgisapp.h
  qgisappinterface.h
  qgsabout.h
  qgsaddattrdialog.h
  qgsaddjoindialog.h
  qgsannotationwidget.h
  qgsattributeactiondialog.h
  qgsattributedialog.h
  qgsattributetypedialog.h
  qgsattributetypeloaddialog.h
  qgsbookmarks.h
  qgsconfigureshortcutsdialog.h
  qgscontinuouscolordialog.h
  qgscustomprojectiondialog.h
  qgsdbtablemodel.h
  qgsdelattrdialog.h
  qgsdisplayangle.h
  qgsfeatureaction.h
  qgsfieldcalculator.h
  qgsformannotationdialog.h
  qgsgraduatedsymboldialog.h
  qgsidentifyresults.h
  qgslabeldialog.h
  qgslabelengineconfigdialog.h
  qgslabelinggui.h
  qgslabelpropertydialog.h
  qgsmanageconnectionsdialog.h
  qgsmaptooladdfeature.h
  qgsmaptooladdisland.h
  qgsmaptooladdring.h
  qgsmaptooladdvertex.h
  qgsmaptoolchangelabelproperties.h
  qgsmaptooldeletepart.h
  qgsmaptooldeletering.h
  qgsmaptooldeletevertex.h
  qgsmaptoolidentify.h
  qgsmaptoolmeasureangle.h
  qgsmaptoolmovefeature.h
  qgsmaptoolmovelabel.h
  qgsmaptoolmovevertex.h
  qgsmaptoolnodetool.h
  qgsmaptoolreshape.h
  qgsmaptoolrotatelabel.h
  qgsmaptoolrotatepointsymbols.h
  qgsmaptoolselectfreehand.h
  qgsmaptoolselect.h
  qgsmaptoolselectpolygon.h
  qgsmaptoolselectradius.h
  qgsmaptoolselectrectangle.h
  qgsmaptoolsimplify.h
  qgsmaptoolsplitfeatures.h
  qgsmaptoolvertexedit.h
  qgsmeasuredialog.h
  qgsmeasuretool.h
  qgsmergeattributesdialog.h
  qgsnewhttpconnection.h
  qgsnewvectorlayerdialog.h
  qgsoptions.h
  qgspastetransformations.h
  qgspluginmanager.h
  qgsprojectproperties.h
  qgsquerybuilder.h
  qgsrastercalcdialog.h
  qgsrasterlayerproperties.h
  qgssinglesymboldialog.h
  qgssnappingdialog.h
  qgssponsors.h
  qgstextannotationdialog.h
  qgstilescalewidget.h
  qgstipgui.h
  qgstipfactory.h
  qgsundowidget.h
  qgsuniquevaluedialog.h
  qgsvectorlayerproperties.h
  qgswmssourceselect.h
  qgshandlebadlayers.h

  composer/qgsattributeselectiondialog.h
  composer/qgscomposer.h
  composer/qgscomposerarrowwidget.h
  composer/qgscomposeritemwidget.h
  composer/qgscomposerlabelwidget.h
  composer/qgscomposerlegendwidget.h
  composer/qgscomposermanager.h
  composer/qgscomposermapwidget.h
  composer/qgscomposerpicturewidget.h
  composer/qgscomposerscalebarwidget.h
  composer/qgscomposertablewidget.h
  composer/qgscomposershapewidget.h
  composer/qgscompositionwidget.h
  composer/qgsitempositiondialog.h

  legend/qgslegend.h
  legend/qgsapplegendinterface.h
  legend/qgslegendlayer.h
  
  ogr/qgsopenvectorlayerdialog.h
  ogr/qgsnewogrconnection.h
  ogr/qgsogrsublayersdialog.h
  ogr/qgsvectorlayersaveasdialog.h
  
  attributetable/qgsattributetableview.h
  attributetable/qgsattributetablemodel.h
  attributetable/qgsattributetablememorymodel.h
  attributetable/qgsattributetabledialog.h
  attributetable/qgsattributetabledelegate.h

  gps/qgsgpsinformationwidget.h
  )

IF(WITH_INTERNAL_QWTPOLAR)
  SET(QGIS_APP_SRCS
    ${QGIS_APP_SRCS}
    gps/qwtpolar/qwt_polar_canvas.cpp  
    gps/qwtpolar/qwt_polar_curve.cpp
    gps/qwtpolar/qwt_polar_fitter.cpp  
    gps/qwtpolar/qwt_polar_grid.cpp   
    gps/qwtpolar/qwt_polar_itemdict.cpp  
    gps/qwtpolar/qwt_polar_item.cpp
    gps/qwtpolar/qwt_polar_layout.cpp    
    gps/qwtpolar/qwt_polar_magnifier.cpp
    gps/qwtpolar/qwt_polar_marker.cpp     
    gps/qwtpolar/qwt_polar_panner.cpp
    gps/qwtpolar/qwt_polar_plot.cpp 
    gps/qwtpolar/qwt_polar_point.cpp
    gps/qwtpolar/qwt_polar_spectrogram.cpp
  )

  SET (QGIS_APP_MOC_HDRS
    ${QGIS_APP_MOC_HDRS}
    gps/qwtpolar/qwt_polar_canvas.h  
    gps/qwtpolar/qwt_polar_magnifier.h
    gps/qwtpolar/qwt_polar_panner.h
    gps/qwtpolar/qwt_polar_plot.h 
  )

  SET(QWTPOLAR_INCLUDE_DIR gps/qwtpolar)
  SET(QWTPOLAR_LIBRARY "")
ENDIF(WITH_INTERNAL_QWTPOLAR)


IF (POSTGRES_FOUND)
  IF(HAVE_PGCONFIG)
    ADD_DEFINITIONS(-DHAVE_PGCONFIG=1)
  ENDIF(HAVE_PGCONFIG)

  SET (QGIS_APP_SRCS ${QGIS_APP_SRCS}
    postgres/qgspgsourceselect.cpp
    postgres/qgspgnewconnection.cpp
    )
  SET (QGIS_APP_MOC_HDRS ${QGIS_APP_MOC_HDRS}
    postgres/qgspgsourceselect.h
    postgres/qgspgnewconnection.h
    )
ENDIF (POSTGRES_FOUND)

IF (HAVE_SPATIALITE)
  SET (QGIS_APP_SRCS ${QGIS_APP_SRCS}
    spatialite/qgsspatialitesourceselect.cpp
    spatialite/qgsnewspatialitelayerdialog.cpp
    spatialite/qgsspatialitetablemodel.cpp
    )
  SET (QGIS_APP_MOC_HDRS ${QGIS_APP_MOC_HDRS}
    spatialite/qgsspatialitesourceselect.h
    spatialite/qgsnewspatialitelayerdialog.h
    spatialite/qgsspatialitetablemodel.h
    )
ENDIF (HAVE_SPATIALITE)


SET(IMAGE_RCCS ../../images/images.qrc)

QT4_ADD_RESOURCES(IMAGE_RCC_SRCS ${IMAGE_RCCS})

QT4_WRAP_CPP(QGIS_APP_MOC_SRCS ${QGIS_APP_MOC_HDRS})

IF (WIN32)
  IF (MSVC)
    SET (QGIS_APP_SRCS ${QGIS_APP_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/qgis_win32.rc)
  ELSE(MSVC)

    # Icon for windows MINGW
    # Note: can't include .rc directly to source files
    # as it's ignored when used MinGW

    IF (NOT WINDRES)
      FIND_PROGRAM(WINDRES windres)
      IF (NOT WINDRES)
        MESSAGE(FATAL_ERROR "windres not found - aborting")
      ENDIF (NOT WINDRES)
    ENDIF (NOT WINDRES)
    #############################################################
    # application icon
    # resource compilation for MinGW
    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/icon.o
      COMMAND ${WINDRES} -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/qgis_win32.rc 
      -o ${CMAKE_CURRENT_BINARY_DIR}/icon.o )
    SET(QGIS_APP_SRCS ${QGIS_APP_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/icon.o)
  ENDIF (MSVC)
ENDIF (WIN32)

IF(PEDANTIC)
  # disable deprecation warnings
  IF(NOT MSVC)
    SET_SOURCE_FILES_PROPERTIES(qgisappinterface.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated)
  ENDIF(NOT MSVC)
ENDIF(PEDANTIC)

INCLUDE_DIRECTORIES(
  ${CMAKE_CURRENT_SOURCE_DIR} composer legend attributetable
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}/../ui
  ${QWT_INCLUDE_DIR}
  ${QT_QTUITOOLS_INCLUDE_DIR}
  ../analysis/raster
  ../core
  ../core/gps ../core/gps/qextserialport
  ../core/composer ../core/raster ../core/renderer ../core/symbology ../core/symbology-ng
  ../gui ../gui/symbology-ng
  ../plugins
  ../python
  gps
  )

IF (HAVE_SPATIALITE)
  IF (WITH_INTERNAL_SPATIALITE)
    INCLUDE_DIRECTORIES(../core/spatialite/headers)
    INCLUDE_DIRECTORIES(../core/spatialite/headers/spatialite)
  ELSE (WITH_INTERNAL_SPATIALITE)
    INCLUDE_DIRECTORIES(${SPATIALITE_INCLUDE_DIR})
    INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR})
    ADD_DEFINITIONS(-DEXTERNAL_SPATIALITE)
  ENDIF (WITH_INTERNAL_SPATIALITE)
ENDIF (HAVE_SPATIALITE)

INCLUDE_DIRECTORIES(
  ${PROJ_INCLUDE_DIR}
  ${GEOS_INCLUDE_DIR}
  ${GDAL_INCLUDE_DIR}
  ${QWTPOLAR_INCLUDE_DIR}
)

IF (POSTGRES_FOUND)
  INCLUDE_DIRECTORIES(${POSTGRES_INCLUDE_DIR})
ENDIF (POSTGRES_FOUND)

#############

IF (WIN32)
  # 'WIN32' removes console, which is Bad when debugging
  IF (CMAKE_BUILD_TYPE MATCHES Debug)
    ADD_EXECUTABLE(${QGIS_APP_NAME} ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS})
  ELSE (CMAKE_BUILD_TYPE MATCHES Debug)
    ADD_EXECUTABLE(${QGIS_APP_NAME} WIN32 ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS})
  ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
ELSE (WIN32)
  ADD_EXECUTABLE(${QGIS_APP_NAME} ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS})
ENDIF (WIN32)

TARGET_LINK_LIBRARIES(${QGIS_APP_NAME}
  ${QWT_LIBRARY}
  ${QT_QTSQL_LIBRARY}
  ${QT_QTUITOOLS_LIBRARY}
  #should only be needed for win
  ${QT_QTMAIN_LIBRARY} 
  ${QWTPOLAR_LIBRARY}
  qgis_core
  qgis_gui
  qgis_analysis
)

IF( WIN32 )
  ADD_DEFINITIONS(-DQWT_DLL)
ENDIF( WIN32 ) 

IF(NOT WITH_INTERNAL_SPATIALITE)
  TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} ${SQLITE_LIBRARY})
ENDIF(NOT WITH_INTERNAL_SPATIALITE)

IF (${QTVERSION} STRLESS "4.3.0")
  TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} ${QT_QT3SUPPORT_LIBRARY} )
ENDIF (${QTVERSION} STRLESS "4.3.0")

IF (APPLE)
  TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} ${APP_SERVICES_LIBRARY} )
ENDIF (APPLE)

SET_TARGET_PROPERTIES(${QGIS_APP_NAME} PROPERTIES
  INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
  INSTALL_RPATH_USE_LINK_PATH true
  )

IF (POSTGRES_FOUND)
  TARGET_LINK_LIBRARIES (${QGIS_APP_NAME} ${POSTGRES_LIBRARY})
ENDIF (POSTGRES_FOUND)

IF (SPATIALITE_FOUND)
  TARGET_LINK_LIBRARIES (${QGIS_APP_NAME} ${SPATIALITE_LIBRARY})
ENDIF (SPATIALITE_FOUND)

IF (APPLE)
  # For Mac OS X, the executable must be at the root of the bundle's executable folder
  INSTALL(TARGETS ${QGIS_APP_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
ELSE (APPLE)
  INSTALL(TARGETS ${QGIS_APP_NAME} RUNTIME DESTINATION ${QGIS_BIN_DIR})
ENDIF (APPLE)

IF(MSVC)
  INSTALL(FILES qgis.ico DESTINATION ${CMAKE_INSTALL_PREFIX}/icons)
ENDIF(MSVC)

########## Install headers for developers to use against qgis libs
#commented out since app classes don't go into any lib there is little point
#INSTALL(FILES ${CMAKE_BINARY_DIR}/src/ui/ui_qgsmeasurebase.h DESTINATION ${QGIS_INCLUDE_DIR})
#INSTALL(FILES ${QGIS_APP_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
