project(Quantis)
cmake_minimum_required(VERSION 2.6.0)

# ########## Generates costome header definitions ##########
include(CheckIncludeFile)
include(CheckIncludeFileCXX)

# Configuration checks
CHECK_INCLUDE_FILE("malloc.h" HAVE_MALLOC_H)

# Generate a header file with the specific definitions
configure_file(
  "${PROJECT_SOURCE_DIR}/QuantisLibConfig.h.in"
  "${PROJECT_BINARY_DIR}/QuantisLibConfig.h"
)
# Include directory containing generated files
include_directories(${PROJECT_BINARY_DIR})

# #################### Quantis Libraries ####################

### Quantis library
if(NOT DISABLE_QUANTIS_JAVA)
  find_package(JNI REQUIRED)
  include_directories(${JNI_INCLUDE_DIRS})
endif()


set(QuantisBase_SRCS
  Conversion.c
  Quantis_C.c
  Quantis_Cpp.cpp
  Quantis_Java.cpp
)


if(UNIX)
  # Sources
  set(Quantis_SRCS
    ${QuantisBase_SRCS}
    QuantisPci_Unix.c
    QuantisUsb_Unix.c
  )

  # Add libusb-1.0 dependency
  if(NOT DISABLE_QUANTIS_USB)
    find_package(USB1 REQUIRED)
  endif()
#elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
#   set(Quantis_SRCS
#     ${QuantisBase_SRCS}
#     QuantisPci_Darwin.c
#     QuantisUsb_Darwin.c
#   )
else()
  message(FATAL_ERROR "-- Quantis library not supported on this system!")
endif()


### Quantis-NoHardware
set(QuantisNoHw_SRCS
  ${QuantisBase_SRCS}
  Quantis_NoHardware.c
)

### Quantis-Compat
set(QuantisCompat_SRCS
  ${QuantisBase_SRCS}
  Quantis_Compat.c
)

########## Quantis Library ##########

# Quantis Shared library
add_library(Quantis SHARED ${Quantis_SRCS})
set_target_properties(Quantis PROPERTIES
  VERSION ${CPACK_PACKAGE_VERSION}
  SOVERSION ${API_VERSION}
  CLEAN_DIRECT_OUTPUT 1
)

# Quantis Static library
add_library(Quantis-static STATIC ${Quantis_SRCS})
set_target_properties(Quantis-static PROPERTIES
  OUTPUT_NAME "Quantis"
  CLEAN_DIRECT_OUTPUT 1
)

# Add libusb-1.0 dependency to Quantis library
if(UNIX AND NOT DISABLE_QUANTIS_USB)
  target_link_libraries(Quantis ${USB1_LIBRARIES})
  target_link_libraries(Quantis-static ${USB1_LIBRARIES})
endif()

# Install libraries
install(TARGETS
  Quantis Quantis-static
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIB_DIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB_DIR}
)
########## Quantis Hardware-less Library ##########

# Quantis-NoHw Shared library
add_library(Quantis-NoHw SHARED ${QuantisNoHw_SRCS})
set_target_properties(Quantis-NoHw PROPERTIES
  VERSION ${CPACK_PACKAGE_VERSION}
  SOVERSION ${API_VERSION}
  CLEAN_DIRECT_OUTPUT 1
)

# Quantis-NoHw Static library
add_library(Quantis-NoHw-static STATIC ${QuantisNoHw_SRCS})
set_target_properties(Quantis-NoHw-static PROPERTIES
  OUTPUT_NAME "Quantis-NoHw"
  CLEAN_DIRECT_OUTPUT 1
)

# Install libraries
install(TARGETS
  Quantis-NoHw Quantis-NoHw-static
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIB_DIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB_DIR}
)


########## Quantis Compatilibity Libraries ##########

if(ENABLE_QUANTIS_COMPAT AND NOT DISABLE_QUANTIS_PCI)
  # QuantisPci-Compat Shared library
  add_library(QuantisPci-Compat SHARED ${QuantisCompat_SRCS})
  set_target_properties(QuantisPci-Compat PROPERTIES
    COMPILE_FLAGS "-DQUANTIS_DEVICE_TYPE=1"
    VERSION ${CPACK_PACKAGE_VERSION}
    SOVERSION ${API_VERSION}
    CLEAN_DIRECT_OUTPUT 1
  )

  # QuantisPci-Compat Static library
  add_library(QuantisPci-Compat-static STATIC ${QuantisCompat_SRCS})
  set_target_properties(QuantisPci-Compat-static PROPERTIES
    COMPILE_FLAGS "-DQUANTIS_DEVICE_TYPE=1"
    OUTPUT_NAME "QuantisPci-Compat"
    CLEAN_DIRECT_OUTPUT 1
  )

  # Install libraries
  install(TARGETS
    QuantisPci-Compat QuantisPci-Compat-static
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIB_DIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB_DIR}
  )
endif()


if(ENABLE_QUANTIS_COMPAT AND NOT DISABLE_QUANTIS_USB)
  # QuantisUsb-Compat Shared library
  add_library(QuantisUsb-Compat SHARED ${QuantisCompat_SRCS})
  set_target_properties(QuantisUsb-Compat PROPERTIES
    COMPILE_FLAGS "-DQUANTIS_DEVICE_TYPE=2"
    VERSION ${CPACK_PACKAGE_VERSION}
    SOVERSION ${API_VERSION}
    CLEAN_DIRECT_OUTPUT 1
  )

  # QuantisUsb-Compat Static library
  add_library(QuantisUsb-Compat-static STATIC ${QuantisCompat_SRCS})
  set_target_properties(QuantisUsb-Compat-static PROPERTIES
    COMPILE_FLAGS "-DQUANTIS_DEVICE_TYPE=2"
    OUTPUT_NAME "QuantisUsb-Compat"
    CLEAN_DIRECT_OUTPUT 1
  )

  # Install libraries
  install(TARGETS
    QuantisUsb-Compat QuantisUsb-Compat-static
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIB_DIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB_DIR}
  )
endif()
