set(idl_files 
  DataLoggerService.idl 
  StateHolderService.idl 
  RobotHardwareService.idl 
  WavPlayerService.idl 
  SequencePlayerService.idl 
  ForwardKinematicsService.idl
  ExecutionProfileService.idl
  OGMap3DService.idl
  NullService.idl
  EmergencyStopperService.idl
  TimeKeeperService.idl
  Img.idl
  HRPDataTypes.idl
  pointcloud.idl
  ImpedanceControllerService.idl
  SoftErrorLimiterService.idl
  CollisionDetectorService.idl
  GraspControllerService.idl
  TorqueFilterService.idl
  KalmanFilterService.idl
  VirtualForceSensorService.idl
  StabilizerService.idl
  AutoBalancerService.idl
  RemoveForceSensorLinkOffsetService.idl
  ServoControllerService.idl
  TorqueControllerService.idl
  ThermoLimiterService.idl
  ReferenceForceUpdaterService.idl
  )

set(openhrp_idl_files
  ClockGenerator.idl
  CollisionDetector.idl
  Controller.idl
  DynamicsSimulator.idl
  ModelLoader.idl
  OnlineViewer.idl
  OpenHRPCommon.idl
  ViewSimulator.idl
  World.idl
  )
if(NOT QNXNTO)
  list(APPEND openhrp_idl_files  PathPlanner.idl)
endif()

# add CMAKE_CURRENT_SOURCE_DIR to all files
set(EXTRA_IDL_FILES "" CACHE PATH "directories of extra idls") # this must contain paths
set(idl_files2 ${idl_files})
foreach(idl_file ${idl_files})
  list(APPEND idl_files_path ${CMAKE_CURRENT_SOURCE_DIR}/${idl_file})
endforeach()
set(idl_files ${idl_files_path} ${EXTRA_IDL_FILES})

set(idl_flags -bcxx -Wbuse_quotes -Wbh=.hh -Wbs=Sk.cpp -Wba -Wbd=DynSk.cpp -I${OPENRTM_IDL_DIR})

string(REGEX REPLACE ";" " " idl_files2 "${idl_files2}")
string(REGEX REPLACE ";" " " openhrp_idl_files2 "${openhrp_idl_files}")
configure_file(${PROJECT_SOURCE_DIR}/cpack_modules/postinst.in ${PROJECT_BINARY_DIR}/postinst)

macro(generate_cpp_stub idl_file idl_basename)
  add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${idl_basename}.hh ${CMAKE_CURRENT_BINARY_DIR}/${idl_basename}Sk.cpp ${CMAKE_CURRENT_BINARY_DIR}/${idl_basename}DynSk.cpp
    COMMAND omniidl ${idl_flags} ${idl_file}
    DEPENDS ${idl_file}
    )
endmacro()

macro(generate_java_stub idl_file idl_basename)
  add_custom_command(
    OUTPUT ${idl_basename}.compiled src
    COMMAND ${IDLJ} ${idlj_flags} -I${OPENRTM_IDL_DIR} ${idl_file}
    COMMAND ${CMAKE_COMMAND} -E echo "" > ${idl_basename}.compiled
    DEPENDS ${idl_file}
    )
endmacro()

foreach(idl_file ${idl_files})
  get_filename_component(idl_basename ${idl_file} NAME_WE)
  generate_cpp_stub(${idl_file} ${idl_basename})
  list(APPEND sources ${idl_basename}Sk.cpp ${idl_basename}DynSk.cpp)
  list(APPEND headers ${CMAKE_CURRENT_BINARY_DIR}/${idl_basename}.hh)
  if(COMPILE_JAVA_STUFF)
    generate_java_stub(${idl_file} ${idl_basename})
  endif()
  list(APPEND compiled ${idl_basename}.compiled)
endforeach()

set(jarfile ${CMAKE_CURRENT_BINARY_DIR}/hrpsysBaseStub.jar)

add_custom_command(
  OUTPUT ${jarfile} cls
  COMMAND mkdir -p cls
  COMMAND ${JAVAC} ${javac_flags} src/*/*.java -d cls
  COMMAND ${JAR} cf ${jarfile} -C ${CMAKE_CURRENT_BINARY_DIR}/cls Img -C ${CMAKE_CURRENT_BINARY_DIR}/cls OpenHRP -C ${CMAKE_CURRENT_BINARY_DIR}/cls OpenRTM -C ${CMAKE_CURRENT_BINARY_DIR}/cls RTC -C ${CMAKE_CURRENT_BINARY_DIR}/cls _SDOPackage
  COMMAND cp ${jarfile} ${CMAKE_SOURCE_DIR}/plugin
  DEPENDS ${compiled}
  )
if(COMPILE_JAVA_STUFF)
  add_custom_target(StubJava ALL DEPENDS ${jarfile})
endif()

set(target hrpsysBaseStub)
add_library(${target} SHARED ${sources})
target_link_libraries(${target} ${OPENRTM_LIBRARIES})

install(TARGETS ${target}
	LIBRARY DESTINATION lib
)

if(COMPILE_JAVA_STUFF)
  install(FILES ${jarfile} DESTINATION share/java)
endif()
foreach(_idl_file ${idl_files})
  message("Check if ${_idl_file} exists")
  if(NOT EXISTS ${_idl_file})
    message(FATAL_ERROR "ERROR: ${_idl_file} is not present")
  endif()
endforeach()
foreach(_idl_file ${openhrp_idl_files})
  message("Check if ${OPENHRP_IDL_DIR}/OpenHRP/${_idl_file} exists")
  if(NOT EXISTS ${OPENHRP_IDL_DIR}/OpenHRP/${_idl_file})
    message(FATAL_ERROR "ERROR: ${OPENHRP_IDL_DIR}/OpenHRP/${_idl_file} is not present")
  endif()
endforeach()

install(CODE "execute_process(COMMAND omniidl -bpython -C\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${python_dist_pkg_dir}/hrpsys -I${OPENRTM_IDL_DIR} ${idl_files} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})")
install(CODE "execute_process(COMMAND omniidl -bpython -C\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${python_dist_pkg_dir}/hrpsys -I${OPENRTM_IDL_DIR} ${openhrp_idl_files} WORKING_DIRECTORY ${OPENHRP_IDL_DIR}/OpenHRP)")
install(CODE "execute_process(COMMAND python -m compileall . WORKING_DIRECTORY ${python_dist_pkg_dir}/hrpsys)")
install(FILES ${headers} DESTINATION include/hrpsys/idl)
install(FILES ${idl_files} DESTINATION share/hrpsys/idl)

