# yue.nicholas@gmail.com

ADD_EXECUTABLE ( eLut eLut.cpp )
ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/eLut.h
  COMMAND $<TARGET_FILE:eLut> ARGS > ${CMAKE_CURRENT_BINARY_DIR}/eLut.h
  DEPENDS eLut)
SET_SOURCE_FILES_PROPERTIES(
  ${CMAKE_CURRENT_BINARY_DIR}/eLut.h
  PROPERTIES HEADER_FILE_ONLY TRUE)

ADD_EXECUTABLE ( toFloat toFloat.cpp )
ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h
  COMMAND $<TARGET_FILE:toFloat> ARGS > ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h
  DEPENDS toFloat)

SET_SOURCE_FILES_PROPERTIES(
  ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h
  PROPERTIES HEADER_FILE_ONLY TRUE)

SET_SOURCE_FILES_PROPERTIES(
  half.cpp
  PROPERTIES
  OBJECT_DEPENDS
  "${CMAKE_CURRENT_BINARY_DIR}/eLut.h;${CMAKE_CURRENT_BINARY_DIR}/toFloat.h"
  )

SET (ILMBASE_LIB_TARGETS "")

IF (OPENEXR_BUILD_SHARED)
  LIST ( APPEND ILMBASE_LIB_TARGETS Half )

  ADD_LIBRARY ( Half SHARED
    half.cpp
    )

  TARGET_COMPILE_DEFINITIONS ( Half PRIVATE HALF_EXPORTS )
  IF (WIN32)
    TARGET_COMPILE_DEFINITIONS ( Half PUBLIC OPENEXR_DLL )
  ENDIF ()

  SET_TARGET_PROPERTIES ( Half
    PROPERTIES
    VERSION ${OPENEXR_VERSION}
    SOVERSION ${OPENEXR_SOVERSION}
    OUTPUT_NAME "Half${ILMBASE_LIBSUFFIX}"
    )

  ADD_DEPENDENCIES ( Half toFloat eLut )
ENDIF ()

IF (BUILD_ILMBASE_STATIC)
  LIST ( APPEND ILMBASE_LIB_TARGETS Half_static )

  ADD_LIBRARY ( Half_static STATIC
    half.cpp
    )

  SET_TARGET_PROPERTIES ( Half_static
    PROPERTIES
    VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH}
    OUTPUT_NAME "Half${ILMBASE_LIBSUFFIX}_s"
    )

  ADD_DEPENDENCIES ( Half_static toFloat eLut )
ENDIF ()

IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC)
  INSTALL ( TARGETS
    ${ILMBASE_LIB_TARGETS}
      ARCHIVE DESTINATION lib
      LIBRARY DESTINATION lib
      RUNTIME DESTINATION ${RUNTIME_DIR}
  )
ENDIF ()

INSTALL (
  FILES
    half.h
    halfFunction.h
    halfExport.h
    halfLimits.h

  DESTINATION
    include/OpenEXR
)

if (OPENEXR_BUILD_SHARED)
    add_library(IlmBase::Half ALIAS Half)
endif()
if (BUILD_ILMBASE_STATIC)
    add_library(IlmBase::Half_static ALIAS Half_static)
endif()
