util_ss.add(files(
  'opts-visitor.c',
  'qapi-clone-visitor.c',
  'qapi-dealloc-visitor.c',
  'qapi-forward-visitor.c',
  'qapi-util.c',
  'qapi-visit-core.c',
  'qobject-input-visitor.c',
  'qobject-output-visitor.c',
  'string-input-visitor.c',
  'string-output-visitor.c',
))
if have_system or have_tools
  util_ss.add(files(
    'qmp-dispatch.c',
    'qmp-event.c',
    'qmp-registry.c',
  ))
endif

qapi_all_modules = [
  'authz',
  'block',
  'block-core',
  'block-export',
  'char',
  'common',
  'compat',
  'control',
  'crypto',
  'dump',
  'error',
  'introspect',
  'job',
  'machine',
  'machine-target',
  'migration',
  'misc',
  'misc-target',
  'net',
  'pragma',
  'qom',
  'replay',
  'run-state',
  'sockets',
  'trace',
  'transaction',
  'yank',
]
if have_system
  qapi_all_modules += [
    'acpi',
    'audio',
    'qdev',
    'pci',
    'rdma',
    'rocker',
    'tpm',
  ]
endif
if have_system or have_tools
  qapi_all_modules += [
    'ui',
  ]
endif

qapi_storage_daemon_modules = [
  'block-core',
  'block-export',
  'char',
  'common',
  'control',
  'crypto',
  'introspect',
  'job',
  'qom',
  'sockets',
  'pragma',
  'transaction',
]

qapi_nonmodule_outputs = [
  'qapi-introspect.c', 'qapi-introspect.h',
  'qapi-types.c', 'qapi-types.h',
  'qapi-visit.h', 'qapi-visit.c',
  'qapi-commands.h', 'qapi-commands.c',
  'qapi-init-commands.h', 'qapi-init-commands.c',
  'qapi-events.h', 'qapi-events.c',
  'qapi-emit-events.c', 'qapi-emit-events.h',
]

# First build all sources
qapi_util_outputs = [
  'qapi-builtin-types.c', 'qapi-builtin-visit.c',
  'qapi-builtin-types.h', 'qapi-builtin-visit.h',
]

qapi_inputs = []
qapi_specific_outputs = []
foreach module : qapi_all_modules
  qapi_inputs += [ files(module + '.json') ]
  qapi_module_outputs = [
    'qapi-types-@0@.c'.format(module),
    'qapi-types-@0@.h'.format(module),
    'qapi-visit-@0@.c'.format(module),
    'qapi-visit-@0@.h'.format(module),
  ]
  if have_system or have_tools
    qapi_module_outputs += [
      'qapi-events-@0@.c'.format(module),
      'qapi-events-@0@.h'.format(module),
      'qapi-commands-@0@.c'.format(module),
      'qapi-commands-@0@.h'.format(module),
    ]
  endif
  if module.endswith('-target')
    qapi_specific_outputs += qapi_module_outputs
  else
    qapi_util_outputs += qapi_module_outputs
  endif
endforeach

qapi_files = custom_target('shared QAPI source files',
  output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs,
  input: [ files('qapi-schema.json') ],
  command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ],
  depend_files: [ qapi_inputs, qapi_gen_depends ])

# Now go through all the outputs and add them to the right sourceset.
# These loops must be synchronized with the output of the above custom target.

i = 0
foreach output : qapi_util_outputs
  if output.endswith('.h')
    genh += qapi_files[i]
  endif
  util_ss.add(qapi_files[i])
  i = i + 1
endforeach

foreach output : qapi_specific_outputs + qapi_nonmodule_outputs
  if output.endswith('.h')
    genh += qapi_files[i]
  endif
  specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: qapi_files[i])
  i = i + 1
endforeach
