# mkdir build
# cd build
# cmake -DCMAKE_INSTALL_PREFIX=/home/fernando/testing ..
# make
# make install

cmake_minimum_required(VERSION 3.5) 
include(GNUInstallDirs)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")

################################################################################
## Describing the project
################################################################################
project(libpdsnn 
        LANGUAGES C
        VERSION 0.05.0 
)

set(PROJECT_DESCRIPTION       "Library to work with neural networks")
set(PROJECT_LIB_ABBREVIATION  "pdsnn")
set(PROJECT_COMMENT           "PDS Neural Networks")
set(PROJECT_URL               "http://www.nongnu.org/pdsplibrary/")
# Requires
set(DEBPACK_REQUIRES          "libpdsra-dev, libpdsrv-dev, libpdssn-dev")# "libpdsra-dev, libpdsba-dev") # Acording deb names
set(PKGCONFIG_REQUIRES        "libpdsra, libpdsrv, libpdssn")# "libpdsra, libpdsba")         # Acording pkgconfig names
# Pkg-config private
set(PKGCONFIG_LIB_PRIVATE     "-lm") # "libpdsra, libpdsba")         # Acording pkgconfig names
# Compiling library and examples
set(TARGET_EXTRA_LINK         "-lpdsra -lpdsrv -lpdssn -lm") # The order is important
# Compiling manually
set(DEVELOP_EXTRA_STATIC_LINK "-lpdsra -lpdsrv -lpdssn -lm") # The order is important 
set(DEVELOP_EXTRA_SHARED_LINK "-lpdsra -lpdsrv -lm") # The order is important

################################################################################
## Architecture
################################################################################
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
    # set(LIBSUFFIX "64") 
    set(DEBFILE_ARCH "amd64")
else() 
    # set(LIBSUFFIX "") 
    set(DEBFILE_ARCH "i386")
endif()

################################################################################
## Sources files
################################################################################
file(GLOB SOURCE_FILES
    src/biblioteca/*.c
)

file(GLOB HEADER_FILES 
    src/headers/pds/*.h
)
include_directories(src/headers ${ADD_INCLUDE_DIRECTORY})

add_library(${PROJECT_NAME}_shared SHARED ${SOURCE_FILES})

add_library(${PROJECT_NAME}_static STATIC ${SOURCE_FILES})

set_target_properties(  ${PROJECT_NAME}_shared  PROPERTIES 
                        OUTPUT_NAME             ${PROJECT_LIB_ABBREVIATION}
                        VERSION                 ${PROJECT_VERSION}
                    )
set_target_properties(  ${PROJECT_NAME}_static  PROPERTIES
                        OUTPUT_NAME             ${PROJECT_LIB_ABBREVIATION} 
                        VERSION                 ${PROJECT_VERSION}
                    )
target_link_libraries(${PROJECT_NAME}_shared ${TARGET_EXTRA_LINK} ${ADD_LIB_DIRECTORY})
target_link_libraries(${PROJECT_NAME}_static ${TARGET_EXTRA_LINK} ${ADD_LIB_DIRECTORY})

set(DOC_FILES 
    ${CMAKE_BINARY_DIR}/doc/README.md
)

################################################################################
## Archivos de configuracion
################################################################################
configure_file(pkgconfigdat.pc.in ${PROJECT_NAME}.pc @ONLY)
configure_file(doc/README.md.in   doc/README.md @ONLY)

################################################################################
## Install
################################################################################


install(TARGETS     ${PROJECT_NAME}_shared 
        DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

install(TARGETS     ${PROJECT_NAME}_static 
        DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

install(FILES       ${HEADER_FILES}
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pds
)

# pkgconfig
install(FILES       ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc 
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

# doc
install(FILES       ${DOC_FILES} 
        DESTINATION ${CMAKE_INSTALL_DOCDIR}/${PROJECT_NAME}
)

################################################################################
## Make dist
################################################################################
add_subdirectory(package)

################################################################################
## DOXYGEN
################################################################################
add_subdirectory(manual)

################################################################################
## Test programs
################################################################################
add_subdirectory(test)

################################################################################
## Final messages
################################################################################

MESSAGE(STATUS "++  ")
MESSAGE(STATUS "++  Detecting architecture        : ${DEBFILE_ARCH}") 
MESSAGE(STATUS "++  La biblioteca se instalará en : ${CMAKE_INSTALL_PREFIX}")
MESSAGE(STATUS "++  Para cambiar esta opción      : cmake /path/of/source/code -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
MESSAGE(STATUS "++  ")

