#***************************************************************************
#*   Copyright (C) 2008 by S. MANKOWSKI / G. DE BURE support@mankowski.fr  *
#*                                                                         *
#*   This program is free software; you can redistribute it and/or modify  *
#*   it under the terms of the GNU General Public License as published by  *
#*   the Free Software Foundation; either version 2 of the License, or     *
#*   (at your option) any later version.                                   *
#*                                                                         *
#*   This program is distributed in the hope that it will be useful,       *
#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
#*   GNU General Public License for more details.                          *
#*                                                                         *
#*   You should have received a copy of the GNU General Public License     *
#*   along with this program.  If not, see <http://www.gnu.org/licenses/>  *
#***************************************************************************
MESSAGE( STATUS "..:: CMAKE ROOT ::..")

PROJECT(skrooge)

SET (QT_MIN_VERSION "5.3.0")

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
CMAKE_POLICY(SET CMP0028 OLD)

FIND_PACKAGE(ECM 0.0.10 REQUIRED NO_MODULE)
SET(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${skrooge_SOURCE_DIR}/cmake/modules)
INCLUDE(ECMInstallIcons)
INCLUDE(KDEInstallDirs)
INCLUDE(KDECompilerSettings)
INCLUDE(KDECMakeSettings)
INCLUDE(FeatureSummary)
INCLUDE(CheckCXXCompilerFlag)
INCLUDE(GenerateExportHeader)
INCLUDE(ECMSetupVersion)
INCLUDE(ECMGenerateHeaders)
INCLUDE(ECMPackageConfigHelpers)
INCLUDE(KDEFrameworkCompilerSettings)

FIND_PACKAGE(Qt5 ${QT_MIN_VERSION} NO_MODULE REQUIRED Core DBus Widgets WebKitWidgets Script Sql Test Designer PrintSupport Svg Xml Concurrent Qml QuickWidgets)
FIND_PACKAGE(Grantlee5 0.5 REQUIRED)

FIND_PACKAGE(KF5 5.0.0 REQUIRED COMPONENTS
  Archive               # Tier 1
  Config                # Tier 1
  CoreAddons            # Tier 1
  I18n                  # Tier 1
  ItemViews             # Tier 1
  WidgetsAddons         # Tier 1
  WindowSystem          # Tier 1
  Completion            # Tier 2
  DocTools              # Tier 2
  JobWidgets            # Tier 2
  ConfigWidgets         # Tier 3
  DesignerPlugin        # Tier 3
  IconThemes            # Tier 3
  KIO                   # Tier 3
  NewStuff              # Tier 3
  Parts                 # Tier 3
  Wallet                # Tier 3
  XmlGui                # Tier 3
)

OPTION(SKG_CIPHER "Build in sqlcipher mode" ON)

IF(SKG_CIPHER)
    FIND_PACKAGE(PkgConfig REQUIRED)
    PKG_CHECK_MODULES(SQLCIPHER REQUIRED sqlcipher)
    MESSAGE( STATUS "     Mode SQLCIPHER enabled")
    MESSAGE( STATUS "     SQLCIPHER INCLUDE   :  " ${SQLCIPHER_INCLUDE_DIRS})
    SET(SQLITE_LIBRARIES ${SQLCIPHER_LIBRARIES})
    SET(SQLITE_INCLUDE_DIR ${SQLCIPHER_INCLUDE_DIRS})
    ADD_DEFINITIONS(-DSKGCIPHER)
ELSE(SKG_CIPHER)
    FIND_PACKAGE(Sqlite 3.7.0 REQUIRED)
    MESSAGE( STATUS "     Mode SQLITE enabled")
    MESSAGE( STATUS "     SQLITE              : " ${SQLITE_INCLUDE_DIR})
ENDIF(SKG_CIPHER)

SET_PACKAGE_PROPERTIES(Sqlcipher PROPERTIES DESCRIPTION "Support for encryption"
                       URL "https://www.zetetic.net/sqlcipher/"
                       TYPE REQUIRED)
                       
SET(GRANTLEE_VERSION ${Grantlee5_VERSION_MAJOR}.${Grantlee5_VERSION_MINOR}.${Grantlee5_VERSION_PATCH})
MESSAGE( STATUS "     GRANTLEE VERSION    : " ${GRANTLEE_VERSION})

SET(SKG_VERSION "2.4.0")
SET(SKG_BETA "BETA")
SET(SOVERSION 2)

IF (CMAKE_BUILD_TYPE)
ELSE (CMAKE_BUILD_TYPE)
	SET(CMAKE_BUILD_TYPE profile)
#"release": optimized for speed, no debug symbols or debug messages
#"relwithdebinfo": optimized for speed, debug symbols for backtraces
#"debug": optimized, but debuggable
#"debugfull": no optimizations, full debug support
#"profile": adds coverage flags to debugfull
#"none": the build flags are manually set using the CMAKE_CXX_FLAGS option.
ENDIF (CMAKE_BUILD_TYPE)

FIND_PROGRAM(SKG_BASH bash)
MARK_AS_ADVANCED(SKG_BASH)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
OPTION(SKG_BUILD_TEST "Build the test" ON)
MESSAGE( STATUS "     PROJECT_SOURCE_DIR  : " ${PROJECT_SOURCE_DIR} )
MESSAGE( STATUS "     PROJECT_BINARY_DIR  : " ${PROJECT_BINARY_DIR} )
MESSAGE( STATUS "     CMAKE_BUILD_TYPE    : " ${CMAKE_BUILD_TYPE} )
MESSAGE( STATUS "     CMAKE_MODULE_PATH   : " ${CMAKE_MODULE_PATH} )
MESSAGE( STATUS "     CMAKE_INSTALL_PREFIX: " ${CMAKE_INSTALL_PREFIX} )
MESSAGE( STATUS "     SKG_BUILD_TEST      : " ${SKG_BUILD_TEST} )
MESSAGE( STATUS "     QT_PLUGIN_INSTALL_DIR : " ${QT_PLUGIN_INSTALL_DIR})

#IF(CMAKE_BUILD_TYPE MATCHES "profile")
#  MESSAGE( STATUS "     TRACES              : All traces activated")
  #add_definitions(-DSKGFULLTRACES)
#ELSE(CMAKE_BUILD_TYPE MATCHES "profile")
#  IF(CMAKE_BUILD_TYPE MATCHES "debug" OR SKG_BETA MATCHES "BETA")
    MESSAGE( STATUS "     TRACES              : Some traces activated")
#  ELSE(CMAKE_BUILD_TYPE MATCHES "debug" OR SKG_BETA MATCHES "BETA")
#    MESSAGE( STATUS "     TRACES              : All traces disabled")
#    add_definitions(-DSKGNOTRACES)
#  ENDIF(CMAKE_BUILD_TYPE MATCHES "debug" OR SKG_BETA MATCHES "BETA")
#ENDIF(CMAKE_BUILD_TYPE MATCHES "profile")

# FIX: Qt was built with -reduce-relocations
IF(Qt5_POSITION_INDEPENDENT_CODE)
  SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
ENDIF(Qt5_POSITION_INDEPENDENT_CODE)

ADD_DEFINITIONS(-DSKGVERSION=${SKG_VERSION}${SKG_BETA})
REMOVE_DEFINITIONS(-DQT_NO_CAST_FROM_ASCII)

#Correction bug 207249 vvvv
#SET(CMAKE_CXX_FLAGS "-Wall" )
IF(CMAKE_COMPILER_IS_GNUCXX)
    # SET(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
    CHECK_CXX_COMPILER_FLAG("-Wlogical-op" WLOGICALOP)
    IF(WLOGICALOP)
        SET(CMAKE_CXX_FLAGS "-Wlogical-op ${CMAKE_CXX_FLAGS}")
    ENDIF(WLOGICALOP)
    
    CHECK_CXX_COMPILER_FLAG("-Wnoexcept" WNOEXCEPT)
    IF(WNOEXCEPT)
        SET(CMAKE_CXX_FLAGS "-Wnoexcept ${CMAKE_CXX_FLAGS}")
    ENDIF(WNOEXCEPT)    

    SET(CMAKE_CXX_FLAGS "-std=c++0x -pedantic -Wall -Wextra -Wno-variadic-macros -Wparentheses -Wmissing-braces -Wcast-align -Wcast-qual -Wformat=2 -Winit-self -Wmissing-include-dirs -Woverloaded-virtual -Wsign-promo -Wstrict-null-sentinel -Wundef -Wno-unused ${CMAKE_CXX_FLAGS}")
    #  SET(CMAKE_CXX_FLAGS " -Wstrict-overflow=5  -Wshadow  -Wctor-dtor-privacy  -Wshadow -Wold-style-cast -Wswitch-default -Wredundant-decls ${CMAKE_CXX_FLAGS}")
    #MESSAGE(STATUS "     CMAKE_CXX_FLAGS : ${CMAKE_CXX_FLAGS}")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
#Correction bug 207249 ^^^^

#Default installation path
SET(CMAKE_INSTALL_PREFIX ${BUILD_DIR})

# Win32 specific configuration
IF(WIN32)
    ADD_DEFINITIONS(-DSKG_PLATFORM_WIN32)
    IF(CMAKE_COMPILER_IS_GNUCXX)
	SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-runtime-pseudo-reloc -Wl,--export-all-symbols" CACHE STRING "" FORCE)
    ENDIF(CMAKE_COMPILER_IS_GNUCXX)
    
    IF (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
        ADD_DEFINITIONS( -DQT_DEBUG )
    ENDIF (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)    
ELSE(WIN32)
#To solve Bug 209912:"ldd -u <library>""
#does not work on MACOS, must be done manually		SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed" CACHE STRING "" FORCE)
ENDIF(WIN32)
MESSAGE(STATUS "     CMAKE_SHARED_LINKER_FLAGS : ${CMAKE_SHARED_LINKER_FLAGS}")

#ADD_SUBDIRECTORY
IF(SKG_CIPHER)
    ADD_SUBDIRECTORY(skgsqlcipher) 
ENDIF(SKG_CIPHER)
ADD_SUBDIRECTORY(skgbasemodeler)
ADD_SUBDIRECTORY(skgbankmodeler)
ADD_SUBDIRECTORY(skgbasegui)
ADD_SUBDIRECTORY(skgbankgui)

ADD_SUBDIRECTORY(plugins)
ADD_SUBDIRECTORY(images)

IF(SKG_BUILD_TEST AND NOT WIN32)
    ADD_SUBDIRECTORY(tests)
ENDIF(SKG_BUILD_TEST AND NOT WIN32)

#Main application
ADD_SUBDIRECTORY(skrooge)
ADD_SUBDIRECTORY(skroogeconvert)
#TODO(STEPHANE MANKOWSKI) KF5 ADD_SUBDIRECTORY(skroogeakonadi)

CONFIGURE_FILE(scripts/addNewPlugin.sh.in scripts/addNewPlugin.sh @ONLY)
CONFIGURE_FILE(scripts/addNewImportPlugin.sh.in scripts/addNewImportPlugin.sh @ONLY)

#DOXYGEN
ADD_CUSTOM_TARGET(apidox "doxygen" "${PROJECT_SOURCE_DIR}/Doxyfile")

#ASTYLE
CONFIGURE_FILE(scripts/astyle.sh.in scripts/astyle.sh @ONLY)
ADD_CUSTOM_TARGET(astyle "scripts/astyle.sh")

#GENERATE ICONS
CONFIGURE_FILE(scripts/generateIcons.sh.in scripts/generateIcons.sh @ONLY)

#GENERATE SPLASH SCREEN
CONFIGURE_FILE(scripts/generateSplash.sh.in scripts/generateSplash.sh @ONLY)
ADD_CUSTOM_TARGET(splash "scripts/generateSplash.sh")

#STATIC CODE CHECKS
CONFIGURE_FILE(scripts/codecheck.sh.in scripts/codecheck.sh @ONLY)
ADD_CUSTOM_TARGET(codecheck "scripts/codecheck.sh")

CONFIGURE_FILE(CTestCustom.cmake CTestCustom.cmake @ONLY)

#FULL
CONFIGURE_FILE(scripts/full.sh scripts/full.sh @ONLY)
ADD_CUSTOM_TARGET(full "scripts/full.sh")

FEATURE_SUMMARY(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)

find_package(KF5I18n CONFIG REQUIRED)
ki18n_install(po)

include(ECMOptionalAddSubdirectory)
ecm_optional_add_subdirectory(doc)
