# Copyright 2022 Collabora Ltd. # SPDX-License-Identifier: LGPL-2.1-or-later public_headers = [ 'flatpak-bundle-ref.h', 'flatpak-error.h', 'flatpak-installation.h', 'flatpak-installed-ref.h', 'flatpak-instance.h', 'flatpak-portal-error.h', 'flatpak-ref.h', 'flatpak-related-ref.h', 'flatpak-remote-ref.h', 'flatpak-remote.h', 'flatpak-transaction.h', 'flatpak.h', ] install_headers( public_headers, subdir : 'flatpak', ) flatpak_version_macros = configure_file( input : 'flatpak-version-macros.h.in', output : 'flatpak-version-macros.h', configuration : { 'FLATPAK_MAJOR_VERSION' : flatpak_major_version, 'FLATPAK_MINOR_VERSION' : flatpak_minor_version, 'FLATPAK_MICRO_VERSION' : flatpak_micro_version, }, install_dir : get_option('includedir') / 'flatpak', ) # TODO: After the Autotools build system is removed, we can probably # switch this to gnome.mkenums_simple, but it's easier to keep them # consistent if we use the same templates enums = gnome.mkenums( 'flatpak-enum-types', c_template : 'flatpak-enum-types.c.template', h_template : 'flatpak-enum-types.h.template', install_dir : get_option('includedir') / 'flatpak', install_header : true, sources : public_headers, ) flatpak_gdbus = gnome.gdbus_codegen( 'flatpak-dbus-generated', sources : [ '../data/org.freedesktop.Flatpak.xml', '../data/org.freedesktop.Flatpak.Authenticator.xml', ], interface_prefix : 'org.freedesktop.Flatpak.', namespace : 'Flatpak', ) flatpak_document_gdbus = gnome.gdbus_codegen( 'flatpak-document-dbus-generated', sources: [ '../data/org.freedesktop.portal.Documents.xml', ], interface_prefix : 'org.freedesktop.portal.', namespace : 'XdpDbus', ) systemd_gdbus = gnome.gdbus_codegen( 'flatpak-systemd-dbus-generated', sources: [ '../data/org.freedesktop.systemd1.xml', ], interface_prefix : 'org.freedesktop.systemd1.', namespace : 'Systemd', ) variant_schema_compiler_command = [ global_source_root / 'subprojects' / 'variant-schema-compiler' / 'variant-schema-compiler', ] if get_option('internal_checks') variant_schema_compiler_command += ['--internal-validation'] endif variant_schema_compiler_command += [ '--outfile', '@OUTPUT0@', '--outfile-header', '@OUTPUT1@', '--prefix', 'var', '@INPUT@', ] flatpak_variant = custom_target( 'flatpak-variant-private.h', input : [ '../data/flatpak-variants.gv', ], output : [ 'flatpak-variant-impl-private.h', 'flatpak-variant-private.h', ], build_by_default : true, command : variant_schema_compiler_command, ) libflatpak_common_base_deps = base_deps + [libglnx_dep] libflatpak_common_base_sources = [ 'flatpak-utils-base.c', 'flatpak-utils-base-private.h', ] + flatpak_gdbus + flatpak_document_gdbus built_headers = [ enums[1], flatpak_version_macros, flatpak_gdbus[1], flatpak_document_gdbus[1], systemd_gdbus[1], flatpak_variant[1], ] libflatpak_common_deps = [ base_deps, dconf_dep, gpgme_dep, json_glib_dep, libarchive_dep, libcurl_dep, libglnx_dep, libostree_dep, libseccomp_dep, libsystemd_dep, libxml_dep, libzstd_dep, malcontent_dep, polkit_agent_dep, xau_dep, ] built_sources = [] if build_wayland_security_context wayland_scanner_prog = find_program(wayland_scanner.get_variable(pkgconfig: 'wayland_scanner')) wayland_protocols_dir = wayland_protocols.get_variable(pkgconfig: 'pkgdatadir') wl_security_context_xml = wayland_protocols_dir / 'staging/security-context/security-context-v1.xml' wl_security_context = [ custom_target( 'security-context-v1-protocol.c', input : wl_security_context_xml, output : 'security-context-v1-protocol.c', command : [wayland_scanner_prog, 'private-code', '@INPUT@', '@OUTPUT@'], ), custom_target( 'security-context-v1-protocol.h', input : wl_security_context_xml, output : 'security-context-v1-protocol.h', command : [wayland_scanner_prog, 'client-header', '@INPUT@', '@OUTPUT@'], ), ] libflatpak_common_deps += [wayland_client] built_sources += [wl_security_context] built_headers += [wl_security_context[1]] endif libflatpak_common_base = static_library( 'flatpak-common-base', dependencies : libflatpak_common_base_deps, gnu_symbol_visibility : 'hidden', include_directories : [common_include_directories], install : false, sources : libflatpak_common_base_sources, ) libflatpak_common_base_dep = declare_dependency( dependencies : base_deps + [libglnx_dep], include_directories : [common_include_directories], link_with : [ libflatpak_common_base, ], sources : built_headers, ) sources = [ 'flatpak-appdata.c', 'flatpak-auth.c', 'flatpak-bundle-ref.c', 'flatpak-bwrap.c', 'flatpak-chain-input-stream.c', 'flatpak-context.c', 'flatpak-dir.c', 'flatpak-dir-utils.c', 'flatpak-docker-reference.c', 'flatpak-error.c', 'flatpak-exports.c', 'flatpak-glib-backports.c', 'flatpak-image-collection.c', 'flatpak-image-source.c', 'flatpak-installation.c', 'flatpak-installed-ref.c', 'flatpak-instance.c', 'flatpak-json-oci.c', 'flatpak-json.c', 'flatpak-locale-utils.c', 'flatpak-oci-registry.c', 'flatpak-oci-signatures.c', 'flatpak-portal-error.c', 'flatpak-progress.c', 'flatpak-prune.c', 'flatpak-ref-utils.c', 'flatpak-ref.c', 'flatpak-related-ref.c', 'flatpak-remote-ref.c', 'flatpak-remote.c', 'flatpak-repo-utils.c', 'flatpak-run.c', 'flatpak-run-cups.c', 'flatpak-run-dbus.c', 'flatpak-run-pulseaudio.c', 'flatpak-run-sockets.c', 'flatpak-run-wayland.c', 'flatpak-run-x11.c', 'flatpak-transaction.c', 'flatpak-utils-http.c', 'flatpak-utils.c', 'flatpak-uri.c', 'flatpak-usb.c', 'flatpak-xml-utils.c', 'flatpak-zstd-compressor.c', 'flatpak-zstd-decompressor.c', ] if malcontent_dep.found() sources += ['flatpak-parental-controls.c'] endif libflatpak_common = static_library( 'flatpak-common', dependencies : [libflatpak_common_base_dep] + libflatpak_common_deps, gnu_symbol_visibility : 'hidden', include_directories : [common_include_directories], install : false, sources : enums + public_headers + sources + built_sources + systemd_gdbus + [ flatpak_variant[0], flatpak_variant[1], ], ) libflatpak_common_dep = declare_dependency( dependencies : [ base_deps, libflatpak_common_base_dep, libglnx_dep, ], include_directories : [common_include_directories], link_with : [ libflatpak_common, ], sources : built_headers, ) libflatpak = library( 'flatpak', 'flatpak.c', gnu_symbol_visibility : 'hidden', include_directories : [common_include_directories], install : true, link_args : ['-Wl,--export-dynamic'], link_whole : [ libflatpak_common_base, libflatpak_common, ], soversion : '0', version : '0.@0@.0'.format(flatpak_binary_age), ) libflatpak_dep = declare_dependency( dependencies : libflatpak_common_deps, include_directories : [common_include_directories], link_with : [ libflatpak, ], sources : built_headers, ) test_libflatpak = executable( 'test-libflatpak', 'test-lib.c', dependencies : base_deps + [libglnx_dep, libflatpak_dep], install : false, ) if gir_dep.found() gnome.generate_gir( libflatpak, export_packages : 'flatpak', extra_args : [ '-DFLATPAK_EXTERN=__attribute__((visibility("default"))) extern', '-DFLATPAK_COMPILATION=1', '--warn-all', ], header : 'flatpak.h', identifier_prefix : 'Flatpak', includes : ['GObject-2.0', 'Gio-2.0'], install : true, namespace : 'Flatpak', nsversion : '1.0', sources : [ enums, flatpak_version_macros, public_headers, sources, ], symbol_prefix : 'flatpak', ) endif