
include_directories(
  ${JNI_INCLUDE_DIRS}
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_SOURCE_DIR}/export/
  ${CMAKE_BINARY_DIR}/export/
)

set(JNIOCIO_CLASSES
  # Core
  org.OpenColorIO.ExceptionBase
  org.OpenColorIO.ExceptionMissingFile
  org.OpenColorIO.Globals
  org.OpenColorIO.Config
  org.OpenColorIO.ColorSpace
  org.OpenColorIO.Processor
  org.OpenColorIO.GpuShaderDesc
  org.OpenColorIO.Context
  org.OpenColorIO.Look
  org.OpenColorIO.ImageDesc
  org.OpenColorIO.Transform
  org.OpenColorIO.PackedImageDesc
  org.OpenColorIO.PlanarImageDesc
  org.OpenColorIO.Baker
  # Enums
  org.OpenColorIO.LoggingLevel
  org.OpenColorIO.ColorSpaceDirection
  org.OpenColorIO.TransformDirection
  org.OpenColorIO.Interpolation
  org.OpenColorIO.BitDepth
  org.OpenColorIO.Allocation
  org.OpenColorIO.GpuLanguage
  org.OpenColorIO.EnvironmentMode
  # Transforms
  org.OpenColorIO.AllocationTransform
  org.OpenColorIO.CDLTransform
  org.OpenColorIO.ColorSpaceTransform
  org.OpenColorIO.DisplayTransform
  org.OpenColorIO.ExponentTransform
  org.OpenColorIO.FileTransform
  org.OpenColorIO.GroupTransform
  org.OpenColorIO.LogTransform
  org.OpenColorIO.LookTransform
  org.OpenColorIO.MatrixTransform
  org.OpenColorIO.TruelightTransform
)

file(GLOB JNIOCIO_JAVAS "org/OpenColorIO/*.java")

message(STATUS "Creating Jar Manifest.txt")
configure_file(${CMAKE_SOURCE_DIR}/src/jniglue/Manifest.txt.in
    ${CMAKE_CURRENT_BINARY_DIR}/Manifest.txt @ONLY)

message(STATUS "Creating LoadLibrary.java")
configure_file(${CMAKE_SOURCE_DIR}/src/jniglue/LoadLibrary.java.in
    ${CMAKE_CURRENT_BINARY_DIR}/LoadLibrary.java @ONLY)
list(APPEND JNIOCIO_JAVAS ${CMAKE_CURRENT_BINARY_DIR}/LoadLibrary.java)

set(JNIOCIO_HEADERS)
set(JNIOCIO_H_INCLUDE "/* DO NOT EDIT THIS FILE - it is machine generated */\n\n")
foreach(_CLASS ${JNIOCIO_CLASSES})
  string(REPLACE "." "_" _CLASS_H ${_CLASS})
  set(_CLASS_H "${_CLASS_H}.h")
  set(JNIOCIO_HEADERS ${JNIOCIO_HEADERS} "${_CLASS_H}")
  set(JNIOCIO_H_INCLUDE "${JNIOCIO_H_INCLUDE}#include \"${_CLASS_H}\"\n")
endforeach()
message(STATUS "Creating OpenColorIOJNI.h that includes all the ocio jni headers")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OpenColorIOJNI.h" "${JNIOCIO_H_INCLUDE}")

set(JNIOCIO_JAR "${CMAKE_CURRENT_BINARY_DIR}/OpenColorIO-${OCIO_VERSION}.jar")
add_custom_command(OUTPUT ${JNIOCIO_HEADERS}
                   COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/org/OpenColorIO
                   COMMAND ${Java_JAVAC_EXECUTABLE} -cp ${CMAKE_CURRENT_BINARY_DIR} -d ${CMAKE_CURRENT_BINARY_DIR} ${JNIOCIO_JAVAS}
                   COMMAND ${Java_JAVAH_EXECUTABLE} -jni -force ${JNIOCIO_CLASSES}
                   COMMAND ${Java_JAR_EXECUTABLE} vcfm ${JNIOCIO_JAR} Manifest.txt org
                   IMPLICIT_DEPENDS ${JNIOCIO_JAVAS}
                   COMMENT "Compiling .java files, packaged .jar and creating jni C headers")

file(GLOB JNIOCIO_SRC "*.cpp")
add_library(OpenColorIO-JNI SHARED ${JNIOCIO_SRC} ${JNIOCIO_HEADERS})
set_target_properties(OpenColorIO-JNI PROPERTIES
                      VERSION ${OCIO_VERSION}
                      SOVERSION ${SOVERSION})
if(OCIO_STATIC_JNIGLUE)
  target_link_libraries(OpenColorIO-JNI OpenColorIO_STATIC)
else()
  target_link_libraries(OpenColorIO-JNI OpenColorIO)
endif()

add_subdirectory(tests)

install(TARGETS OpenColorIO-JNI DESTINATION ${CMAKE_INSTALL_EXEC_PREFIX}/lib${LIB_SUFFIX})
install(FILES ${JNIOCIO_JAR} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/ocio/)
