Csonkás Kristóf Gyula created THRIFT-5477:
---------------------------------------------

             Summary: Thrift does not generate a well-defined set of files
                 Key: THRIFT-5477
                 URL: https://issues.apache.org/jira/browse/THRIFT-5477
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Compiler
    Affects Versions: 0.15.0, 0.14.0
            Reporter: Csonkás Kristóf Gyula


While upgrading the Thrift version that we use, I noticed that starting with 
version 0.14.0 Thrift does not generate a well-defined set of output files for 
C++, which makes it difficult to build generic build system tooling around it. 
I tracked the issue down to THRIFT-5168.

Our current cmake helper function, where I prefixed the lines that were added 
to workaround this issue with a {{{}+{}}}:
{code:none}
function(target_thrift_source _target)
  set(_single_args
    "THRIFT_FILE"
    "BINARY_DIR"
  )
  set(_multi_args
    "SERVICES;CXX_OPTIONS"
  )
  cmake_parse_arguments(tts "" "${_single_args}" "${_multi_args}" ${ARGN})
  foreach(_required_arg THRIFT_FILE)
    if(NOT tts_${_required_arg})
      message(FATAL_ERROR "target_thrift_source called without 
${_required_arg}")
    endif()
  endforeach()
  if(NOT tts_BINARY_DIR)
    set(tts_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/thrift_generated")
  endif()  get_filename_component(_thriftfile_abs_path "${tts_THRIFT_FILE}" 
ABSOLUTE)
  get_filename_component(_working_directory "${_thriftfile_abs_path}" DIRECTORY)
  get_filename_component(_thriftfile_name "${tts_THRIFT_FILE}" NAME_WE)  
set(_output_files
    "${tts_BINARY_DIR}/${_thriftfile_name}_types.h"
    "${tts_BINARY_DIR}/${_thriftfile_name}_types.cpp"
    "${tts_BINARY_DIR}/${_thriftfile_name}_constants.h"
    "${tts_BINARY_DIR}/${_thriftfile_name}_constants.cpp"
  )
  foreach(_service IN LISTS tts_SERVICES)
    list(APPEND _output_files
      "${tts_BINARY_DIR}/${_service}.h"
      "${tts_BINARY_DIR}/${_service}.cpp"
    )
  endforeach()  set(thrift_CXX_OPTIONS "moveable_types,no_skeleton")
  foreach(_opt IN LISTS tts_CXX_OPTIONS)
    string(APPEND thrift_CXX_OPTIONS ",${_opt}")
  endforeach()
+  set(_touch_commands)
+  foreach(_file IN LISTS _output_files)
+    list(APPEND _touch_commands COMMAND "${CMAKE_COMMAND}" -E touch "${_file}")
+  endforeach()
  add_custom_command(
    OUTPUT ${_output_files}
    COMMAND "${CMAKE_COMMAND}" -E make_directory "${tts_BINARY_DIR}"
    COMMAND Thrift::compiler -out "${tts_BINARY_DIR}"
            --gen cpp:${thrift_CXX_OPTIONS}
            "${_thriftfile_abs_path}"
+    ${_touch_commands}
    MAIN_DEPENDENCY "${_thriftfile_abs_path}"
    DEPENDS "${_thriftfile_abs_path}"
    WORKING_DIRECTORY "${_working_directory}"
  )
  target_include_directories("${_target}" PRIVATE "${tts_BINARY_DIR}")
  target_sources("${_target}"
    PRIVATE ${_output_files} ${tts_THRIFT_FILE}
  )
endfunction()
{code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to