# Generate java library with SWIG
FIND_PACKAGE(Java REQUIRED COMPONENTS Runtime Development)
INCLUDE(UseJava)
FIND_PACKAGE(JNI REQUIRED)
INCLUDE_DIRECTORIES(${JNI_INCLUDE_DIRS})
FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(UseSWIG)

SET(SWIG_JAVA_TARGET java)
SET(SWIG_JAVA_LIB_NAME apngasm_java)
SET(SWIG_JAVA_PACKAGE_NAME japngasm)

SET(CMAKE_JNI_TARGET TRUE)
SET(CMAKE_SWIG_FLAGS -package ${SWIG_JAVA_PACKAGE_NAME})
SET(CMAKE_SWIG_OUTDIR "java")

SET(SWIG_INTERFACE_FILES
  "${PROJECT_SOURCE_DIR}/src/apng.i"
)

SET_SOURCE_FILES_PROPERTIES(${SWIG_INTERFACE_FILES}
  PROPERTIES
  CPLUSPLUS ON
)

INCLUDE_DIRECTORIES(
  ${PROJECT_SOURCE_DIR}/src
  ${PROJECT_BINARY_DIR}/src
)

SWIG_ADD_MODULE(${SWIG_JAVA_TARGET} java ${SWIG_INTERFACE_FILES})
SWIG_LINK_LIBRARIES(${SWIG_JAVA_TARGET} ${APNGASM_DYNAMIC_LIB_TARGET})
SET_TARGET_PROPERTIES(${SWIG_JAVA_TARGET}
  PROPERTIES
  EXCLUDE_FROM_ALL TRUE
  OUTPUT_NAME ${SWIG_JAVA_LIB_NAME}
)

ADD_DEPENDENCIES(${SWIG_JAVA_TARGET} ${APNGASM_DYNAMIC_LIB_TARGET})



# Generate jar with SWIG
SET(SWIG_JAR_TARGET jar)
SET(SWIG_JAR_NAME apngasm)
SET(SWIG_JAR_FILENAME ${SWIG_JAR_NAME}-${APNGASM_LIB_VERSION}.jar)
SET(APNGASM_JAVA_FILES
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/APNGAsm.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/APNGFrame.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/rgb.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/rgba.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/APNGFrameVector.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/SWIGTYPE_p_unsigned_char.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/SWIGTYPE_p_p_unsigned_char.java
#  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/APNG.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/APNGJNI.java
  ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/NativeLibLoader.java
)

GET_TARGET_PROPERTY(SWIG_JAVA_LIB_FILENAME ${SWIG_JAVA_TARGET} LOCATION)
GET_FILENAME_COMPONENT(SWIG_JAVA_LIB_FILENAME ${SWIG_JAVA_LIB_FILENAME} NAME)

CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/interfaces/java/NativeLibLoader.java.in ${PROJECT_BINARY_DIR}/${CMAKE_SWIG_OUTDIR}/NativeLibLoader.java @ONLY)

ADD_JAR(${SWIG_JAR_TARGET}
  SOURCES ${APNGASM_JAVA_FILES}
  VERSION ${APNGASM_LIB_VERSION}
  OUTPUT_NAME ${SWIG_JAR_NAME}
)
SET_TARGET_PROPERTIES(${SWIG_JAR_TARGET}
  PROPERTIES
  EXCLUDE_FROM_ALL TRUE
)

INSTALL_JAR(${SWIG_JAR_TARGET} ${LIB_INSTALL_DIR}/apngasm)
INSTALL_JNI_SYMLINK(${SWIG_JAR_TARGET} .)

ADD_DEPENDENCIES(${SWIG_JAR_TARGET} ${SWIG_JAVA_TARGET})

ADD_CUSTOM_COMMAND(TARGET ${SWIG_JAR_TARGET}
  POST_BUILD
  COMMAND ${JAVA_ARCHIVE} -uvf ${SWIG_JAR_FILENAME} ${SWIG_JAVA_LIB_FILENAME}
)