Llichengganginit libsoup3
0e2d147a创建于 2022年10月14日历史提交
includedir = join_paths(libsoup_api_name, meson.project_name())
subdir('include')

pkg = import('pkgconfig')

soup_sources = [
  'auth/soup-auth.c',
  'auth/soup-auth-basic.c',
  'auth/soup-auth-digest.c',
  'auth/soup-auth-ntlm.c',
  'auth/soup-auth-negotiate.c',
  'auth/soup-auth-manager.c',
  'auth/soup-connection-auth.c',
  'auth/soup-tls-interaction.c',

  'cache/soup-cache.c',
  'cache/soup-cache-client-input-stream.c',
  'cache/soup-cache-input-stream.c',

  'content-decoder/soup-content-decoder.c',
  'content-decoder/soup-content-processor.c',
  'content-decoder/soup-converter-wrapper.c',

  'content-sniffer/soup-content-sniffer.c',
  'content-sniffer/soup-content-sniffer-stream.c',

  'cookies/soup-cookie.c',
  'cookies/soup-cookie-jar.c',
  'cookies/soup-cookie-jar-db.c',
  'cookies/soup-cookie-jar-text.c',

  'hsts/soup-hsts-enforcer.c',
  'hsts/soup-hsts-enforcer-db.c',
  'hsts/soup-hsts-policy.c',

  'http1/soup-client-message-io-http1.c',
  'http1/soup-body-input-stream.c',
  'http1/soup-body-output-stream.c',
  'http1/soup-message-io-data.c',
  'http1/soup-message-io-source.c',

  'http2/soup-client-message-io-http2.c',
  'http2/soup-body-input-stream-http2.c',

  'server/http1/soup-server-message-io-http1.c',
  'server/http2/soup-server-message-io-http2.c',
  'server/soup-auth-domain.c',
  'server/soup-auth-domain-basic.c',
  'server/soup-auth-domain-digest.c',
  'server/soup-listener.c',
  'server/soup-message-body.c',
  'server/soup-path-map.c',
  'server/soup-server.c',
  'server/soup-server-connection.c',
  'server/soup-server-message.c',
  'server/soup-server-message-io.c',

  'websocket/soup-websocket.c',
  'websocket/soup-websocket-connection.c',
  'websocket/soup-websocket-extension.c',
  'websocket/soup-websocket-extension-deflate.c',
  'websocket/soup-websocket-extension-manager.c',

  'soup-client-input-stream.c',
  'soup-client-message-io.c',
  'soup-connection.c',
  'soup-connection-manager.c',
  'soup-date-utils.c',
  'soup-filter-input-stream.c',
  'soup-form.c',
  'soup-headers.c',
  'soup-header-names.c',
  'soup-http2-utils.c',
  'soup-init.c',
  'soup-io-stream.c',
  'soup-logger.c',
  'soup-logger-input-stream.c',
  'soup-message.c',
  'soup-message-headers.c',
  'soup-message-metrics.c',
  'soup-message-queue-item.c',
  'soup-method.c',
  'soup-misc.c',
  'soup-multipart.c',
  'soup-multipart-input-stream.c',
  'soup-session.c',
  'soup-session-feature.c',
  'soup-socket-properties.c',
  'soup-status.c',
  'soup-tld.c',
  'soup-uri-utils.c',
  'soup-version.c',
]

soup_private_enum_headers = [
  'soup-connection.h',
]

soup_introspection_headers = [
  'auth/soup-auth.h',
  'auth/soup-auth-manager.h',

  'cache/soup-cache.h',

  'content-decoder/soup-content-decoder.h',

  'content-sniffer/soup-content-sniffer.h',

  'cookies/soup-cookie.h',
  'cookies/soup-cookie-jar.h',
  'cookies/soup-cookie-jar-db.h',
  'cookies/soup-cookie-jar-text.h',

  'hsts/soup-hsts-enforcer.h',
  'hsts/soup-hsts-enforcer-db.h',
  'hsts/soup-hsts-policy.h',

  'server/soup-auth-domain.h',
  'server/soup-auth-domain-basic.h',
  'server/soup-auth-domain-digest.h',
  'server/soup-message-body.h',
  'server/soup-server.h',
  'server/soup-server-message.h',

  'websocket/soup-websocket.h',
  'websocket/soup-websocket-connection.h',
  'websocket/soup-websocket-extension.h',
  'websocket/soup-websocket-extension-deflate.h',
  'websocket/soup-websocket-extension-manager.h',

  'soup-date-utils.h',
  'soup-form.h',
  'soup-headers.h',
  'soup-logger.h',
  'soup-message.h',
  'soup-message-headers.h',
  'soup-message-metrics.h',
  'soup-method.h',
  'soup-multipart.h',
  'soup-multipart-input-stream.h',
  'soup-session.h',
  'soup-session-feature.h',
  'soup-status.h',
  'soup-tld.h',
  'soup-types.h',
  'soup-uri-utils.h',
]

soup_installed_headers = soup_introspection_headers

if brotlidec_dep.found()
  soup_sources += 'content-decoder/soup-brotli-decompressor.c'
endif


install_headers(soup_installed_headers, subdir : includedir)

soup_version_h = configure_file(
  input : 'soup-version.h.in',
  output : 'soup-version.h',
  install_dir : join_paths(get_option('includedir'), includedir),
  command : [find_program('generate-version-header.py'), '@INPUT@', '@OUTPUT@', meson.project_version()]
)

enum_types = 'soup-enum-types'
soup_enums = gnome.mkenums('soup-enum-types',
  sources : soup_installed_headers,
  h_template : enum_types + '.h.template',
  c_template : enum_types + '.c.template',
  install_header : true,
  install_dir : join_paths(get_option('includedir'), includedir))

soup_enum_h = soup_enums[1]
soup_enum_c = soup_enums[0]

soup_private_enums = gnome.mkenums_simple('soup-private-enum-types',
  sources : soup_private_enum_headers,
)

libsoup_c_args  = [
  '-DG_LOG_DOMAIN="@0@"'.format(meson.project_name()),
  '-DLIBSOUP_COMPILATION'
]

deps = [
  libsysprof_capture_dep,
  glib_deps,
  sqlite_dep,
  libpsl_dep,
  brotlidec_dep,
  platform_deps,
  gssapi_dep,
  libz_dep,
  libnghttp2_dep,
]

libsoup_includes = [
  configinc,
  include_directories([
    'auth',
    'cookies',
    'content-decoder',
    'hsts',
    'http1',
    'http2',
    'server',
    'server/http1',
    'server/http2',
    'websocket',
    '.'
  ]),
]

libsoup = library('soup-@0@'.format(apiversion),
  sources : [
    soup_sources,
    soup_private_enums,
    soup_enums,
  ],
  version : libversion,
  darwin_versions: darwin_versions,
  c_args : libsoup_c_args,
  include_directories : libsoup_includes,
  gnu_symbol_visibility: 'hidden',
  install : true,
  dependencies : deps)

libsoup_static = static_library('soup-@0@-static'.format(apiversion),
  sources : [
    soup_sources,
    soup_private_enums,
    soup_enums,
  ],
  c_args : libsoup_c_args,
  include_directories : libsoup_includes,
  dependencies : deps,
)

pkg.generate(libsoup,
  libraries : glib_deps,
  name : meson.project_name(),
  description : 'A glib-based HTTP library',
  filebase : libsoup_api_name,
  subdirs: libsoup_api_name,
  variables: 'exec_prefix=${prefix}')

libsoup_dep = declare_dependency(link_with : libsoup,
  include_directories : libsoup_includes,
  sources : soup_enum_h,
  dependencies : [ platform_deps, gssapi_dep, glib_deps ]
)

meson.override_dependency('libsoup-3.0', libsoup_dep)

libsoup_static_dep = declare_dependency(link_with : libsoup_static,
  include_directories : libsoup_includes,
  sources : soup_enum_h,
  dependencies : [ platform_deps, gssapi_dep, glib_deps ]
)

if enable_introspection or enable_vapi
  soup_ns = 'Soup'

  soup_gir_gen_sources = gnome.generate_gir(libsoup,
    sources : [
      soup_sources,
      soup_introspection_headers,
      soup_enum_h,
      soup_version_h
    ],
    dependencies : libsoup_dep,
    nsversion : apiversion,
    namespace : soup_ns,
    symbol_prefix : soup_ns.to_lower(),
    identifier_prefix : soup_ns,
    export_packages : libsoup_api_name,
    extra_args : libsoup_c_args,
    includes : 'Gio-2.0',
    install : true,
    header: join_paths(meson.project_name(), 'soup.h'),
  )

  soup_gir_gen_dep = declare_dependency(
    dependencies : libsoup_dep,
    sources : soup_gir_gen_sources)

  if enable_vapi
    soup_ns_version = '@0@-@1@'.format(soup_ns, apiversion)

    gnome.generate_vapi(libsoup_api_name,
      sources : [
        soup_gir_gen_sources[0],
        soup_ns_version + '-custom.vala'
      ],
      packages : 'gio-2.0',
      install : true,
    )
  endif
endif