project(PlastLibrary)

################################################################################
# CMake required
################################################################################
cmake_minimum_required (VERSION 2.6)

find_package (JNI REQUIRED)

################################################################################
# PLAST release number
################################################################################
set (plast_VERSION_MAJOR 2)
set (plast_VERSION_MINOR 3)
set (plast_VERSION_PATCH 1)
set (plast-version ${plast_VERSION_MAJOR}.${plast_VERSION_MINOR}.${plast_VERSION_PATCH})
set (plast-date "xxxx-xx-xx")

################################################################################
# update date pattern with real value
################################################################################
INCLUDE(FindPerl)

# We execute a command that retrieves the current date.
IF (PERL_FOUND)
    EXECUTE_PROCESS (
        COMMAND "${PERL_EXECUTABLE}" "-le" "@T=localtime; printf (\"%04d-%02d-%02d %02d:%02d:%02d\",$T[5]+1900,$T[4]+1,$T[3],$T[2],$T[1],$T[0])"
        OUTPUT_VARIABLE plast-date
    )
ENDIF (PERL_FOUND)

################################################################################
# set files
################################################################################
set (LIBRARY_OUTPUT_PATH    lib/${CMAKE_BUILD_TYPE})
set (EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})
file (GLOB_RECURSE  PlastLibraryFiles  src/*)
file (GLOB_RECURSE  PlastCmdFiles      src/*)

################################################################################
# prepare targets
################################################################################
add_definitions       (-O3 -funroll-loops  -fomit-frame-pointer  -msse3)
include_directories   (${PROJECT_BINARY_DIR}/include  ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
add_library           (PlastLibrary SHARED  ${PlastLibraryFiles} )
add_executable        (plast ${PlastCmdFiles})
target_link_libraries (plast pthread)

################################################################################
# OS specific stuffs
################################################################################
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    add_definitions(-D__DARWIN__)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    add_definitions(-D__LINUX__)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    add_definitions(-D__WINDOWS__)
    # IMPORTANT ! we have to add this flag for getting correct methods names in the library    
    # otherwise the Java JVM won't find the native JNI methods.
    set_target_properties (PlastLibrary PROPERTIES LINK_FLAGS -Wl,--kill-at)
    set_target_properties (PlastLibrary PROPERTIES PREFIX "")
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")

################################################################################
#  HEADERS COPY
################################################################################
file (COPY ${PROJECT_SOURCE_DIR}/src/
    DESTINATION ${PROJECT_BINARY_DIR}/include
    FILES_MATCHING PATTERN "*.hpp"  PATTERN "*.h"  PATTERN "*.pri"
)

install (DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION include FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" PATTERN "*.pri")

################################################################################
#  CONFIGURATION FILE
################################################################################
configure_file (
    ${PROJECT_SOURCE_DIR}/src/misc/api/version.hpp.in 
    ${PROJECT_BINARY_DIR}/include/misc/api/version.hpp
)


