# ============================================================================
# Require minimal version of cmake
# ============================================================================
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.4)


# ============================================================================
# Set project name and languages
# ============================================================================
PROJECT(kissplice CXX C)


# ============================================================================
# Set compilation flags
# ============================================================================
IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE Distribution)
ENDIF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
SET(CMAKE_C_FLAGS_DEBUG "-g -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall")
SET(CMAKE_C_FLAGS_RELEASE "-O3 -Wall")
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 -w")
SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3 -w")
SET(CMAKE_CXX_FLAGS_PROFILING "-g -pg")
SET(CMAKE_C_FLAGS_PROFILING "-g -pg")


# ============================================================================
# Manage the KMERS_OVER_32 option
# The default value for KMERS_OVER_32 is
#   * ON on 64 bits systems
#   * OFF on 32 bits systems
# If a user tries to set KMERS_OVER_32 to ON on a 32 bits system, it will be
# forced back to OFF in the CACHE and a FATAL_ERROR message will be issued.
# ============================================================================
SET(KMERS_OVER_32_HELP_STRING "Increase the maximum k-mer size on 64-bits systems")

IF (${CMAKE_SIZEOF_VOID_P} LESS 8 )
  set(KMERS_OVER_32 OFF CACHE BOOL KMERS_OVER_32_HELP_STRING)
  IF (KMERS_OVER_32)
    set(KMERS_OVER_32 OFF CACHE BOOL KMERS_OVER_32_HELP_STRING FORCE)
    MESSAGE(FATAL_ERROR
            "The KMERS_OVER_32 option cannot be used on 32 bits systems")
  ENDIF ()
ELSE ()
  set(KMERS_OVER_32 ON CACHE BOOL KMERS_OVER_32_HELP_STRING)
ENDIF ()

# ============================================================================
# Tell cmake which directory to put executables files in
# ============================================================================
SET(MAIN_BIN_DIR ${PROJECT_BINARY_DIR}/bin)           # Main program
SET(SEC_BIN_DIR ${PROJECT_BINARY_DIR}/lib/kissplice)  # Other executables
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SEC_BIN_DIR})


# ============================================================================
# Tell cmake about subdirectories to look into
# ============================================================================
ADD_SUBDIRECTORY(debruijn-v4)
ADD_SUBDIRECTORY(thirdparty)
ADD_SUBDIRECTORY(modules)
ADD_SUBDIRECTORY(man)
ADD_SUBDIRECTORY(doc)


# ============================================================================
# Tell cmake to copy the kissplice main (python) file to bin dir
# ============================================================================
add_custom_target(kissplice ALL
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/kissplice.py ${MAIN_BIN_DIR}/kissplice)


# ============================================================================
# zlib required for kissreads
# ============================================================================
FIND_PACKAGE(ZLIB REQUIRED)


# ============================================================================
# Add testing capabilities 
# ============================================================================

ENABLE_TESTING()
ADD_SUBDIRECTORY(tests)

# ============================================================================
# Adds the 'dist' target (that will use cpack)
# ============================================================================
add_custom_target(dist COMMAND ${CMAKE_BUILD_TOOL} package_source)


# ============================================================================
# Specify rules to run at install time
# ============================================================================
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/kissplice DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)


# ============================================================================
# Add custom uninstall target
# ============================================================================
configure_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/utils/cmake/cmake_uninstall.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
    IMMEDIATE @ONLY)

add_custom_target(uninstall
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)




# ============================================================================
# Configure cpack
# ============================================================================
SET(CPACK_PACKAGE_NAME "kissplice")
SET(CPACK_PACKAGE_VENDOR "Kissplice Development Team")
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "1")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Splicing events caller")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
SET(CPACK_RESOURCE_FILE_AUTHORS "${CMAKE_SOURCE_DIR}/AUTHORS")
SET(CPACK_RESOURCE_FILE_INSTALL "${CMAKE_SOURCE_DIR}/INSTALL")
SET(CPACK_SOURCE_GENERATOR "TGZ")
SET(CPACK_SOURCE_IGNORE_FILES
 "README.CMake"
 "README.Licence"
 "README.Release"
 "README.NamingConventions"
 "README.Kissreads"
 "CMakeFiles"
 "Makefile"
 "_CPack_Packages"
 "CMakeCache.txt"
 ".*\\\\.svn"
 ".*\\\\.gz"
 ".*\\\\~"
 ".*\\\\.o"
 "bcc/"
 "debruijn/"
 "debruijn-v2"
 "datasets"
 "ismb"
 "Recomb"
 "RR"
 "script_tarjan_aphid.sh"
 "splice_sites_results"
 "splicing_events"
 "TODO.*"
 "Validation"
 "validation_script.sh"
 ".*project"
 "/\\\\.git*"
 "results"
 "build"
 "incremental-bicon.ps"
 "scripts"
 "skeletons"
 "doc/dev"
 "resType0.png"
 "resType1.png"
 "quantifModel.png"
 "ucsc.png"
 "user_guide.aux"  
 "user_guide.bib"  
 "user_guide.log"
 "user_guide.toc"
 "user_guide.tex"
 "integration_tests"
 "functional_tests"
 "jobim13"
 ${CPACK_SOURCE_IGNORE_FILES}
)
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
include(CPack)
