# CMake script for PAPPSOms++ library
# Author: Olivier Langella
# Created: 03/03/2015

SET(pappsomspp_RCCS libpappsomsppresources.qrc)
# File list
SET(CPP_FILES
#	pappsomspp/test.cpp
	pappsomspp/utils.cpp
	pappsomspp/mass_range.cpp
	pappsomspp/amino_acid/aaBase.cpp
	pappsomspp/amino_acid/Aa.cpp
	pappsomspp/amino_acid/aamodification.cpp
 	pappsomspp/peptide/ion.cpp
 	pappsomspp/peptide/peptideinterface.cpp
	pappsomspp/peptide/peptide.cpp
	pappsomspp/peptide/peptidefragment.cpp
	pappsomspp/peptide/peptidefragmention.cpp
	pappsomspp/peptide/peptidefragmentionlistbase.cpp
	pappsomspp/peptide/peptidenaturalisotope.cpp
	pappsomspp/peptide/peptidenaturalisotopelist.cpp
	pappsomspp/peptide/peptidenaturalisotopeaverage.cpp
	pappsomspp/peptide/peptiderawfragmentmasses.cpp
	pappsomspp/peptide/peptidestrparser.cpp
	pappsomspp/protein/protein.cpp
	pappsomspp/protein/enzyme.cpp
	pappsomspp/protein/peptidesizefilter.cpp
	pappsomspp/protein/peptidebuilder.cpp
	pappsomspp/protein/peptidevariablemodificationbuilder.cpp
	pappsomspp/protein/peptidevariablemodificationreplacement.cpp
	pappsomspp/protein/peptidefixedmodificationbuilder.cpp
	pappsomspp/protein/peptidemodificatorbase.cpp
	pappsomspp/protein/peptidemodificatortee.cpp
	pappsomspp/protein/peptidexwildcard.cpp
	pappsomspp/protein/peptidemethioninremove.cpp
	pappsomspp/protein/peptidemodificatorpipeline.cpp
	pappsomspp/protein/peptidesemienzyme.cpp
	pappsomspp/spectrum/spectrum.cpp
	pappsomspp/spectrum/spectrumid.cpp
	pappsomspp/spectrum/qualifiedspectrum.cpp
	pappsomspp/msrun/msrunid.cpp
	pappsomspp/psm/morpheus/morpheusscore.cpp
	pappsomspp/psm/peakionmatch.cpp
	pappsomspp/psm/peakionisotopematch.cpp
	pappsomspp/psm/peptidespectrummatch.cpp
	pappsomspp/psm/peptideisotopespectrummatch.cpp
	pappsomspp/psm/xtandem/xtandemhyperscore.cpp
	pappsomspp/psm/xtandem/xtandemhyperscorebis.cpp
	pappsomspp/psm/xtandem/xtandemspectrumprocess.cpp
	pappsomspp/grouping/grpexperiment.cpp
	pappsomspp/grouping/grppeptide.cpp
	pappsomspp/grouping/grpprotein.cpp
	pappsomspp/grouping/grpgroup.cpp
	pappsomspp/grouping/grpsubgroup.cpp
	pappsomspp/grouping/grppeptideset.cpp
	pappsomspp/grouping/grpmappeptidetosubgroupset.cpp
	pappsomspp/grouping/grpsubgroupset.cpp
	pappsomspp/grouping/grpgroupingmonitor.cpp
	pappsomspp/xic/xic.cpp
	pappsomspp/xic/xicpeak.cpp
	pappsomspp/xic/qualifiedxic.cpp
	pappsomspp/xic/xicpeptideinterface.cpp
	pappsomspp/xic/xicpeptidefragmention.cpp
	pappsomspp/xic/xicpeptidefragmentionnaturalisotope.cpp
	pappsomspp/xic/filters/xicfilterspike.cpp
	pappsomspp/xic/filters/xicfiltersmoothing.cpp
	pappsomspp/xic/filters/xicfiltermax.cpp
	pappsomspp/xic/filters/xicfilterbackground.cpp
	pappsomspp/xic/detection/xicdetectionzivy.cpp
	pappsomspp/xic/detection/xicdetectionmoulon.cpp
	pappsomspp/fasta/fastareader.cpp
	pappsomspp/fasta/fastaoutputstream.cpp
	pappsomspp/obo/obopsimod.cpp
	pappsomspp/obo/filterobopsimodsink.cpp
	pappsomspp/obo/filterobopsimodtermaccession.cpp
	pappsomspp/obo/filterobopsimodtermlabel.cpp
	pappsomspp/obo/filterobopsimodtermdiffmono.cpp
	pappsomspp/obo/filterobopsimodtermname.cpp
  )

#set(CMAKE_INCLUDE_CURRENT_DIR ON)


IF (USEQT5)
  #qt5-default qtbase5-dev

  #IF (UNIX)
    FIND_PACKAGE( Qt5Core REQUIRED )
    FIND_PACKAGE( Qt5Concurrent REQUIRED )
    FIND_PACKAGE( Qt5Gui REQUIRED )
  #ENDIF (UNIX)
  
  MESSAGE ("Qt5Core_LIBRARIES ${Qt5Core_LIBRARIES}")
  MESSAGE ("QT_CORE_LIB ${QT_CORE_LIB}")
  
  #MESSAGE ("Qt5::Core ${Qt5::Core}")

  # generate rules for building source files from the resources
  QT5_ADD_RESOURCES(pappsomspp_RCC_SRCS ${pappsomspp_RCCS})
  # generate rules for building source files that moc generates
  #QT5_WRAP_CPP(QtApp_MOC_SRCS ${QtApp_MOCS})

  # Build the static lib
  ADD_LIBRARY(pappsomspp-static-qt5 STATIC ${CPP_FILES} ${pappsomspp_RCC_SRCS})
  target_include_directories (pappsomspp-static-qt5 PUBLIC ${Qt5Core_INCLUDES} ${Qt5Concurrent_INCLUDES} ${Qt5Gui_INCLUDES})
    
    SET_TARGET_PROPERTIES(pappsomspp-static-qt5
      PROPERTIES OUTPUT_NAME pappsomspp-qt5
      CLEAN_DIRECT_OUTPUT 1
      CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS} ${Qt5Concurrent_EXECUTABLE_COMPILE_FLAGS} ${Qt5Gui_EXECUTABLE_COMPILE_FLAGS}"
    )
  TARGET_LINK_LIBRARIES(pappsomspp-static-qt5 ${LIBS} ${Qt5Core_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ${Qt5Gui_LIBRARIES})

  # Build the shared lib
  IF (NOT MINGW)
    ADD_LIBRARY(pappsomspp-shared-qt5 SHARED ${CPP_FILES} ${pappsomspp_RCC_SRCS})
    target_include_directories (pappsomspp-shared-qt5 PUBLIC ${Qt5Core_INCLUDES} ${Qt5Concurrent_INCLUDES} ${Qt5Gui_INCLUDES})
    SET_TARGET_PROPERTIES(pappsomspp-shared-qt5
      PROPERTIES OUTPUT_NAME pappsomspp-qt5
      CLEAN_DIRECT_OUTPUT 1
      VERSION ${PAPPSOMSPP_VERSION}
      SOVERSION ${PAPPSOMSPP_VERSION_MAJOR}
      CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS} ${Qt5Concurrent_EXECUTABLE_COMPILE_FLAGS} ${Qt5Gui_EXECUTABLE_COMPILE_FLAGS}"
      )
    TARGET_LINK_LIBRARIES(pappsomspp-shared-qt5 ${LIBS} ${Qt5Core_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ${Qt5Gui_LIBRARIES})
    # Install libs
    INSTALL(TARGETS pappsomspp-static-qt5 pappsomspp-shared-qt5 DESTINATION lib${LIB_SUFFIX})
  ENDIF (NOT MINGW)

ENDIF(USEQT5)


IF (USEQT4)
  #libqt4-dev
  FIND_PACKAGE( Qt4 COMPONENTS QTCORE QTGUI REQUIRED )
  
  MESSAGE ("QT_DEFINITIONS ${QT_DEFINITIONS}" )
  MESSAGE ("QT_INCLUDE_DIR ${QT_INCLUDE_DIR}" )
  MESSAGE ("QT_QTCORE_INCLUDE_DIR ${QT_QTCORE_INCLUDE_DIR}" )
  

  # generate rules for building source files from the resources
  QT4_ADD_RESOURCES(pappsomspp_RCC_SRCS_QT4 ${pappsomspp_RCCS})
  # generate rules for building source files that moc generates
  #QT4_WRAP_CPP(QtApp_MOC_SRCS ${QtApp_MOCS})

  # Build the static lib
  ADD_LIBRARY(pappsomspp-static-qt4 STATIC ${CPP_FILES} ${pappsomspp_RCC_SRCS_QT4})
  target_include_directories (pappsomspp-static-qt4 PUBLIC ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR})
  SET_TARGET_PROPERTIES(pappsomspp-static-qt4
    PROPERTIES OUTPUT_NAME pappsomspp-qt4
    CLEAN_DIRECT_OUTPUT 1
    #COMPILE_DEFINITIONS " ${QT_DEFINITIONS}"
    #INCLUDE_DIRECTORIES "${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}"
    )
  TARGET_LINK_LIBRARIES(pappsomspp-static-qt4 ${LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})

  # Build the shared lib
  ADD_LIBRARY(pappsomspp-shared-qt4 SHARED ${CPP_FILES} ${pappsomspp_RCC_SRCS_QT4})
  target_include_directories (pappsomspp-shared-qt4 PUBLIC ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR})
  SET_TARGET_PROPERTIES(pappsomspp-shared-qt4
    PROPERTIES OUTPUT_NAME pappsomspp-qt4
    CLEAN_DIRECT_OUTPUT 1
    VERSION ${PAPPSOMSPP_VERSION}
    SOVERSION ${PAPPSOMSPP_VERSION_MAJOR}
    #COMPILE_DEFINITIONS " ${QT_DEFINITIONS}"
    #INCLUDE_DIRECTORIES "${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}"
    )
  TARGET_LINK_LIBRARIES(pappsomspp-shared-qt4 ${LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})

  # Install libs
  INSTALL(TARGETS pappsomspp-static-qt4 pappsomspp-shared-qt4 DESTINATION lib${LIB_SUFFIX})

ENDIF(USEQT4)


# Install headers
INSTALL(DIRECTORY pappsomspp/ DESTINATION include/pappsomspp FILES_MATCHING PATTERN "*.h")

IF (CMAKE_SYSTEM_NAME MATCHES "Windows")
    add_subdirectory("testwin64")
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
