###########################################
#                                         #
#  (C) 2016 Alexander Golubev             #
#  fatzer2 (AT) gmail.com                 #
#                                         #
#  Improvements and feedback are welcome  #
#                                         #
#  This file is released under GPL >= 2   #
#                                         #
###########################################


cmake_minimum_required( VERSION 3.1 )


##### general package setup

project( tdegames )


##### include essential cmake modules

include( FindPkgConfig )
include( CheckIncludeFile )
include( CheckLibraryExists )
include( CheckSymbolExists )
include( CheckCXXSourceCompiles )


##### include our cmake modules

include( TDEMacros )


##### set version number ########################

tde_set_project_version( )


##### setup install paths

include( TDESetupPaths )
tde_setup_paths( )


##### optional stuff

option( WITH_ALL_OPTIONS    "Enable all optional support" OFF )
option( WITH_GCC_VISIBILITY "Enable fvisibility and fvisibility-inlines-hidden" ${WITH_ALL_OPTIONS} )
option( WITH_ARTS           "Enable aRts support"                               ${WITH_ALL_OPTIONS} )

######################## options comments #############################
#                                                                     #
#  WITH_ARTS affects kbounce if disabled the game will have no sound  #
#                                                                     #
#  ARTS is required to build kolf and kasteroids                      #
#                                                                     #
#######################################################################


##### user requested modules 

option( BUILD_ALL          "Build all"           OFF )
option( BUILD_LIBTDEGAMES  "Build libtdegames"   ${BUILD_ALL} )
option( BUILD_ATLANTIK     "Build atlantik"      ${BUILD_ALL} )
option( BUILD_DOC          "Build documentation" ${BUILD_ALL} )
option( BUILD_KASTEROIDS   "Build kasteroids"    ${BUILD_ALL} )
option( BUILD_KATOMIC      "Build katomic"       ${BUILD_ALL} )
option( BUILD_KBACKGAMMON  "Build kbackgammon"   ${BUILD_ALL} )
option( BUILD_KBATTLESHIP  "Build kbattleship"   ${BUILD_ALL} )
option( BUILD_KBLACKBOX    "Build kblackbox"     ${BUILD_ALL} )
option( BUILD_KBOUNCE      "Build kbounce"       ${BUILD_ALL} )
option( BUILD_KENOLABA     "Build kenolaba"      ${BUILD_ALL} )
option( BUILD_KFOULEGGS    "Build kfouleggs"     ${BUILD_ALL} )
option( BUILD_KGOLDRUNNER  "Build kgoldrunner"   ${BUILD_ALL} )
option( BUILD_KJUMPINGCUBE "Build kjumpingcube"  ${BUILD_ALL} )
option( BUILD_KLICKETY     "Build klickety"      ${BUILD_ALL} )
option( BUILD_KLINES       "Build klines"        ${BUILD_ALL} )
option( BUILD_KMAHJONGG    "Build kmahjongg"     ${BUILD_ALL} )
option( BUILD_KMINES       "Build kmines"        ${BUILD_ALL} )
option( BUILD_KNETWALK     "Build knetwalk"      ${BUILD_ALL} )
option( BUILD_KOLF         "Build kolf"          ${BUILD_ALL} )
option( BUILD_KONQUEST     "Build konquest"      ${BUILD_ALL} )
option( BUILD_KPAT         "Build kpat"          ${BUILD_ALL} )
option( BUILD_KPOKER       "Build kpoker"        ${BUILD_ALL} )
option( BUILD_KREVERSI     "Build kreversi"      ${BUILD_ALL} )
option( BUILD_KSAME        "Build ksame"         ${BUILD_ALL} )
option( BUILD_KSHISEN      "Build kshisen"       ${BUILD_ALL} )
option( BUILD_KSIRTET      "Build ksirtet"       ${BUILD_ALL} )
option( BUILD_KSMILETRIS   "Build ksmiletris"    ${BUILD_ALL} )
option( BUILD_KSNAKE       "Build ksnake"        ${BUILD_ALL} )
option( BUILD_KSOKOBAN     "Build ksokoban"      ${BUILD_ALL} )
option( BUILD_KSPACEDUEL   "Build kspaceduel"    ${BUILD_ALL} )
option( BUILD_KTRON        "Build ktron"         ${BUILD_ALL} )
option( BUILD_KTUBERLING   "Build ktuberling"    ${BUILD_ALL} )
option( BUILD_LSKAT        "Build lskat"         ${BUILD_ALL} )
option( BUILD_TWIN4        "Build twin4"         ${BUILD_ALL} )
option( BUILD_TDEFIFTEEN   "Build tdefifteen"    ${BUILD_ALL} )


##### configure checks

include( ConfigureChecks.cmake )


###### global compiler settings

add_definitions( -DHAVE_CONFIG_H )

set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TQT_CXX_FLAGS}" )
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined" )

if( WITH_TEST )
  enable_testing()
endif( WITH_TEST )


##### add apidox targets

if( "${CMAKE_VERSION}" VERSION_LESS "3.1" )
  set( CMAKE_ENV "env" )
else()
  set( CMAKE_ENV "${CMAKE_COMMAND};-E;env" )
endif()

add_custom_target( apidox
  COMMAND ${CMAKE_ENV}
    "TQTDOCDIR=/usr/share/tqt3/doc/html"
    "DOXDATA=${HTML_INSTALL_DIR}/en/common"
    ${CMAKE_SOURCE_DIR}/admin/doxygen.sh
    --no-modulename
    ${CMAKE_SOURCE_DIR}
  COMMAND
    find ${CMAKE_BINARY_DIR}/apidocs -name '*.html' |
    xargs -r sed -i 's|${CMAKE_BINARY_DIR}/apidocs|${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs|g'
  COMMAND
    find ${CMAKE_BINARY_DIR}/apidocs -name '*.tag' |
    xargs -r sed -i 's|${CMAKE_SOURCE_DIR}/|${PROJECT_NAME}/|g'
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

add_custom_target( install-apidox
  COMMAND ${CMAKE_COMMAND} -E echo Apidox installed in ${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs
)

install( CODE "
  if( EXISTS ${CMAKE_BINARY_DIR}/apidocs )
    file(
      INSTALL ${CMAKE_BINARY_DIR}/apidocs/
      DESTINATION ${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs
      PATTERN doxygen_sqlite3.db EXCLUDE
      PATTERN installdox-slow EXCLUDE
    )
  endif()"
)


##### tdegames directories

tde_conditional_add_subdirectory( BUILD_LIBTDEGAMES  libtdegames  )
tde_conditional_add_subdirectory( BUILD_ATLANTIK     atlantik     )
tde_conditional_add_subdirectory( BUILD_DOC          doc          )
tde_conditional_add_subdirectory( BUILD_KASTEROIDS   kasteroids   )
tde_conditional_add_subdirectory( BUILD_KATOMIC      katomic      )
tde_conditional_add_subdirectory( BUILD_KBACKGAMMON  kbackgammon  )
tde_conditional_add_subdirectory( BUILD_KBATTLESHIP  kbattleship  )
tde_conditional_add_subdirectory( BUILD_KBLACKBOX    kblackbox    )
tde_conditional_add_subdirectory( BUILD_KBOUNCE      kbounce      )
tde_conditional_add_subdirectory( BUILD_KENOLABA     kenolaba     )
tde_conditional_add_subdirectory( BUILD_KFOULEGGS    kfouleggs    )
tde_conditional_add_subdirectory( BUILD_KGOLDRUNNER  kgoldrunner  )
tde_conditional_add_subdirectory( BUILD_KJUMPINGCUBE kjumpingcube )
tde_conditional_add_subdirectory( BUILD_KLICKETY     klickety     )
tde_conditional_add_subdirectory( BUILD_KLINES       klines       )
tde_conditional_add_subdirectory( BUILD_KMAHJONGG    kmahjongg    )
tde_conditional_add_subdirectory( BUILD_KMINES       kmines       )
tde_conditional_add_subdirectory( BUILD_KNETWALK     knetwalk     )
tde_conditional_add_subdirectory( BUILD_KOLF         kolf         )
tde_conditional_add_subdirectory( BUILD_KONQUEST     konquest     )
tde_conditional_add_subdirectory( BUILD_KPAT         kpat         )
tde_conditional_add_subdirectory( BUILD_KPOKER       kpoker       )
tde_conditional_add_subdirectory( BUILD_KREVERSI     kreversi     )
tde_conditional_add_subdirectory( BUILD_KSAME        ksame        )
tde_conditional_add_subdirectory( BUILD_KSHISEN      kshisen      )
tde_conditional_add_subdirectory( BUILD_KSIRTET      ksirtet      )
tde_conditional_add_subdirectory( BUILD_KSMILETRIS   ksmiletris   )
tde_conditional_add_subdirectory( BUILD_KSNAKE       ksnake       )
tde_conditional_add_subdirectory( BUILD_KSOKOBAN     ksokoban     )
tde_conditional_add_subdirectory( BUILD_KSPACEDUEL   kspaceduel   )
tde_conditional_add_subdirectory( BUILD_KTRON        ktron        )
tde_conditional_add_subdirectory( BUILD_KTUBERLING   ktuberling   )
tde_conditional_add_subdirectory( BUILD_LSKAT        lskat        )
tde_conditional_add_subdirectory( BUILD_TWIN4        twin4        )
tde_conditional_add_subdirectory( BUILD_TDEFIFTEEN   tdefifteen   )

if( BUILD_KSIRTET OR BUILD_KFOULEGGS OR BUILD_KLICKETY )
    add_subdirectory( libksirtet )
endif()


##### write configure files

configure_file( config.h.cmake config.h @ONLY )