From eb28c34fd624302b787287efc88e256f5bf48578 Mon Sep 17 00:00:00 2001 From: Jens Georg Date: Wed, 26 May 2021 22:56:38 +0000 Subject: build: Add Meson build support --- .gitignore | 1 + .gitlab-ci.yml | 192 +++++++++++++++++++++ Makefile.am | 2 + doc/Makefile.am | 2 +- doc/gupnp-dlna-gst/Makefile.am | 1 + doc/gupnp-dlna-gst/meson.build | 21 +++ doc/gupnp-dlna-metadata/Makefile.am | 1 + doc/gupnp-dlna-metadata/meson.build | 9 + doc/gupnp-dlna/Makefile.am | 1 + doc/gupnp-dlna/meson.build | 31 ++++ doc/meson.build | 13 ++ libgupnp-dlna/Makefile.am | 6 + libgupnp-dlna/gupnp-dlna-metadata-backend.c | 4 + libgupnp-dlna/meson.build | 159 +++++++++++++++++ .../metadata-backends/gstreamer/meson.build | 75 ++++++++ libgupnp-dlna/metadata-backends/meson.build | 1 + .../metadata/gupnp-dlna-metadata-extractor.c | 2 +- meson.build | 67 +++++++ meson_options.txt | 6 + tests/Makefile.am | 2 + tests/meson.build | 28 +++ tools/Makefile.am | 2 + tools/meson.build | 25 +++ vala/Makefile.am | 3 +- vala/gupnp-dlna-gst-2.0-custom.vala | 2 - vala/meson.build | 27 +++ 26 files changed, 678 insertions(+), 5 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 doc/gupnp-dlna-gst/meson.build create mode 100644 doc/gupnp-dlna-metadata/meson.build create mode 100644 doc/gupnp-dlna/meson.build create mode 100644 doc/meson.build create mode 100644 libgupnp-dlna/meson.build create mode 100644 libgupnp-dlna/metadata-backends/gstreamer/meson.build create mode 100644 libgupnp-dlna/metadata-backends/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 tests/meson.build create mode 100644 tools/meson.build create mode 100644 vala/meson.build diff --git a/.gitignore b/.gitignore index 591b59f..5a0cdfa 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,4 @@ po/Makefile.in.in po/POTFILES stamp-* tests/dlna-profile-parser +build diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..39e61fd --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,192 @@ +include: + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/ci-fairy.yml" + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/fedora.yml' + +variables: + MESON_TEST_TIMEOUT_MULTIPLIER: 3 + +stages: + - review + - prepare + - build + - test + - analysis + - website + +.check-template: &check + extends: + - .fdo.ci-fairy + artifacts: + expire_in: 1 week + paths: + - check-junit-report.xml + reports: + junit: check-junit-report.xml + +check-commit-log: + variables: + GIT_DEPTH: "100" + stage: review + script: + - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ; + then + ci-fairy check-commits --junit-xml=check-junit-report.xml ; + else + echo "Not a merge request" ; + fi + <<: *check + +check-merge-request: + variables: + GIT_STRATEGY: none + stage: review + script: + - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ; + then + ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-junit-report.xml ; + else + echo "Not a merge request" ; + fi + <<: *check + +.build-template: &build + stage: build + script: + - meson . build --prefix=/usr -Db_coverage=true + - ninja -C build + artifacts: + expire_in: 1 day + paths: + - build + +.gupnpdlna.fedora@common: + variables: + BASE_TAG: '2021-05-23.2' + FDO_UPSTREAM_REPO: GNOME/gupnp-dlna + FDO_DISTRIBUTION_PACKAGES: 'clang clang-analyzer gcovr git libasan libubsan python3-gobject python3-pip xmlto gobject-introspection-devel gtk-doc libxml2-devel vala ninja-build gstreamer1-devel gstreamer1-plugins-base-devel' + FDO_DISTRIBUTION_EXEC: | + dnf clean all && + pip3 install meson + +.gupnpdlna.fedora:34@x86_64: + extends: .gupnpdlna.fedora@common + variables: + FDO_DISTRIBUTION_VERSION: 34 + FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" + +build-fedora-container@x86_64: + extends: + - .fdo.container-build@fedora + - .gupnpdlna.fedora:34@x86_64 + stage: prepare + variables: + GIT_STRATEGY: none + + +build-fedora@x86_64: + extends: + - .fdo.distribution-image@fedora + - .gupnpdlna.fedora:34@x86_64 + needs: + - build-fedora-container@x86_64 + <<: *build + + +.test-template: &test + stage: test + variables: + G_SLICE: "always-malloc" + MALLOC_CHECK_: "3" + script: + - if [[ x"$GUPNP_DLNA_RUN_MEDIA_TEST" != "x" ]] ; + then + git clone --depth=1 https://gitlab.gnome.org/GNOME/gupnp-dlna-media.git tests/gupnp-dlna-media ; + else + echo "Media discoverer tests disabled." ; + fi + - cd build + - | + # Remove the many "CI_" variables from the environment. Meson dumps the + # whole environment for every failed test, and that gives a whole + # screenful of junk each time unless we strip these. + unset $(env|grep -o '^CI_[^=]*') + env LANG=C.UTF-8 LC_ALL=C.UTF-8 meson test --print-errorlogs ${MESON_TEST_EXTRA_ARGS} + after_script: + - | + echo "Distribution: " + echo + egrep '^NAME=|^VERSION=' /etc/os-release + echo + echo "Test suite settings:" + echo + echo "G_MESSAGES_DEBUG: ${G_MESSAGES_DEBUG}" + echo "MESON_TEST_EXTRA_ARGS: ${MESON_TEST_EXTRA_ARGS}" + echo + echo "These values can be set at https://gitlab.gnome.org/GNOME/gupnp-dlna/pipelines/new" + artifacts: + expire_in: 1 day + when: always + paths: + - build + reports: + junit: "build/meson-logs/testlog.junit.xml" + +test-fedora@x86_64: + extends: + - .fdo.distribution-image@fedora + - .gupnpdlna.fedora:34@x86_64 + needs: + - build-fedora@x86_64 + <<: *test + +coverage-analysis: + extends: + - .fdo.distribution-image@fedora + - .gupnpdlna.fedora:34@x86_64 + stage: analysis + allow_failure: true + script: + - cd build + - mkdir -p coveragereport + - gcovr --html-details --print-summary --root=.. --exclude=../build --exclude=../docs/reference --exclude=../tests --exclude=../tools --exclude=../examples --output coveragereport/index.html + coverage: '/^lines: (\d+\.\d+\%)/' + artifacts: + when: always + paths: + - build/coveragereport + needs: + - test-fedora@x86_64 + +static-scan: + extends: + - .fdo.distribution-image@fedora + - .gupnpdlna.fedora:34@x86_64 + stage: analysis + needs: + - build-fedora-container@x86_64 + script: + - meson --buildtype=debug _scan_build + - ninja -C _scan_build scan-build + artifacts: + paths: + - _scan_build/meson-logs + allow_failure: true + +pages: + extends: + - .fdo.distribution-image@fedora + - .gupnpdlna.fedora:34@x86_64 + stage: website + script: + - meson doc-build -Dgtk_doc=true + - ninja -C doc-build gupnp-dlna-doc + - mkdir -p public + - mv doc-build/doc/html public/docs + artifacts: + paths: + - public + needs: + - build-fedora-container@x86_64 + only: + - master + diff --git a/Makefile.am b/Makefile.am index 17b6d6a..7e6e0e2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +EXTRA_DIST = meson.build meson_options.txt + SUBDIRS = libgupnp-dlna tools tests data doc vala pkgconfig_DATA = gupnp-dlna-2.0.pc gupnp-dlna-metadata-2.0.pc diff --git a/doc/Makefile.am b/doc/Makefile.am index 192859d..65f1d5e 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -7,4 +7,4 @@ endif SUBDIRS += . -EXTRA_DIST = version.xml.in +EXTRA_DIST = version.xml.in meson.build diff --git a/doc/gupnp-dlna-gst/Makefile.am b/doc/gupnp-dlna-gst/Makefile.am index 809fbcc..2478e9f 100644 --- a/doc/gupnp-dlna-gst/Makefile.am +++ b/doc/gupnp-dlna-gst/Makefile.am @@ -88,4 +88,5 @@ include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST = meson.build DISTCLEANFILES = version.xml diff --git a/doc/gupnp-dlna-gst/meson.build b/doc/gupnp-dlna-gst/meson.build new file mode 100644 index 0000000..b791bf7 --- /dev/null +++ b/doc/gupnp-dlna-gst/meson.build @@ -0,0 +1,21 @@ +gnome.gtkdoc('gupnp-dlna-gst', + main_xml : 'gupnp-dlna-gst-docs.sgml', + src_dir : ['libgupnp-dlna/metadata-backends/gstreamer'], + ignore_headers : [ + 'gupnp-dlna-gst-container-information.h', + 'gupnp-dlna-gst-video-information.h', + 'gupnp-dlna-gst-metadata-extractor.h', + 'gupnp-dlna-gst-audio-information.h', + 'gupnp-dlna-gst-info-utils.h', + 'gupnp-dlna-gst-information.h', + 'gupnp-dlna-gst-image-information.h', + ], + fixxref_args : [ + '--extra-dir', join_paths(meson.build_root(), 'doc/gupnp-dlna/html'), + ], + content_files : version_xml, + dependencies : [ + libgupnp_dlna, + libgupnp_dlna_gst + ], + install : true) diff --git a/doc/gupnp-dlna-metadata/Makefile.am b/doc/gupnp-dlna-metadata/Makefile.am index 14252e0..4c2bb0c 100644 --- a/doc/gupnp-dlna-metadata/Makefile.am +++ b/doc/gupnp-dlna-metadata/Makefile.am @@ -86,4 +86,5 @@ include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST = meson.build DISTCLEANFILES = version.xml diff --git a/doc/gupnp-dlna-metadata/meson.build b/doc/gupnp-dlna-metadata/meson.build new file mode 100644 index 0000000..a11217b --- /dev/null +++ b/doc/gupnp-dlna-metadata/meson.build @@ -0,0 +1,9 @@ +gnome.gtkdoc('gupnp-dlna-metadata', + main_xml : 'gupnp-dlna-metadata-docs.sgml', + src_dir : [join_paths(meson.source_root(), 'libgupnp-dlna/metadata')], + fixxref_args : [ + '--extra-dir', join_paths(meson.build_root(), 'doc/gupnp-dlna/html'), + ], + content_files : version_xml, + dependencies : libgupnp_dlna, + install : true) diff --git a/doc/gupnp-dlna/Makefile.am b/doc/gupnp-dlna/Makefile.am index 8c93762..895e4fc 100644 --- a/doc/gupnp-dlna/Makefile.am +++ b/doc/gupnp-dlna/Makefile.am @@ -98,4 +98,5 @@ include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST = meson.build DISTCLEANFILES = version.xml diff --git a/doc/gupnp-dlna/meson.build b/doc/gupnp-dlna/meson.build new file mode 100644 index 0000000..887b679 --- /dev/null +++ b/doc/gupnp-dlna/meson.build @@ -0,0 +1,31 @@ +gnome.gtkdoc('gupnp-dlna', + main_xml : 'gupnp-dlna-docs.sgml', + src_dir : ['libgupnp-dlna'], + ignore_headers : [ + 'gupnp-dlna-metadata-extractor.h', + 'gupnp-dlna-gst-container-information.h', + 'gupnp-dlna-gst-video-information.h', + 'gupnp-dlna-gst-utils.h', + 'gupnp-dlna-gst-metadata-extractor.h', + 'gupnp-dlna-gst-audio-information.h', + 'gupnp-dlna-gst-info-utils.h', + 'gupnp-dlna-gst-information.h', + 'gupnp-dlna-gst-image-information.h', + 'gupnp-dlna-field-value.h', + 'gupnp-dlna-metadata-backend.h', + 'gupnp-dlna-profile-guesser-impl.h', + 'gupnp-dlna-profile-loader.h', + 'gupnp-dlna-g-values-private.h', + 'gupnp-dlna-info-set.h', + 'gupnp-dlna-info-value.h', + 'gupnp-dlna-profile-private.h', + 'gupnp-dlna-restriction-private.h', + 'gupnp-dlna-utils.h', + 'gupnp-dlna-value.h', + 'gupnp-dlna-value-list-private.h', + 'gupnp-dlna-value-type.h', + 'gupnp-dlna-value-union.h' + ], + content_files : version_xml, + dependencies : libgupnp_dlna, + install : true) diff --git a/doc/meson.build b/doc/meson.build new file mode 100644 index 0000000..3804525 --- /dev/null +++ b/doc/meson.build @@ -0,0 +1,13 @@ +entities = configuration_data() +entities.set('VERSION', meson.project_version()) +version_xml = configure_file( + input: 'version.xml.in', + output: 'version.xml', + configuration: entities +) + +if get_option('gtk_doc') + subdir('gupnp-dlna') + subdir('gupnp-dlna-gst') + subdir('gupnp-dlna-metadata') +endif diff --git a/libgupnp-dlna/Makefile.am b/libgupnp-dlna/Makefile.am index ecb9f4e..051eab3 100644 --- a/libgupnp-dlna/Makefile.am +++ b/libgupnp-dlna/Makefile.am @@ -253,3 +253,9 @@ typelib_DATA = $(gir_DATA:.gir=.typelib) CLEANFILES = $(gir_DATA) $(typelib_DATA) endif + +EXTRA_DIST = \ + meson.build \ + metadata-backends/gstreamer/meson.build \ + metadata-backends/meson.build \ + meson.build diff --git a/libgupnp-dlna/gupnp-dlna-metadata-backend.c b/libgupnp-dlna/gupnp-dlna-metadata-backend.c index e0754cd..a8cad10 100644 --- a/libgupnp-dlna/gupnp-dlna-metadata-backend.c +++ b/libgupnp-dlna/gupnp-dlna-metadata-backend.c @@ -19,6 +19,10 @@ * Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include "gupnp-dlna-metadata-backend.h" diff --git a/libgupnp-dlna/meson.build b/libgupnp-dlna/meson.build new file mode 100644 index 0000000..ea79d37 --- /dev/null +++ b/libgupnp-dlna/meson.build @@ -0,0 +1,159 @@ +headers_subdir = 'gupnp-dlna-2.0/libgupnp-dlna' + +loader_sources = files( + 'gupnp-dlna-profile-loader.c' +) + +libloader = static_library( + 'loader', + loader_sources, + c_args : [ + '-DG_LOG_DOMAIN="gupnp-dlna-loader"', + '-DDATA_DIR="@0@"'.format(shareddir) + ], + dependencies : [glib, gio, xml], + include_directories: include_directories('..') +) + +guesser_sources = files( + 'gupnp-dlna-profile-guesser.c', + 'gupnp-dlna-profile-guesser-impl.c' +) + +libguesser = static_library( + 'guesser', + guesser_sources, + dependencies : [glib, gio], + c_args : [ + '-DG_LOG_DOMAIN="gupnp-dlna-guesser"', + '-DDATA_DIR="@0@"'.format(shareddir) + ], + include_directories: include_directories( + '..', + 'metadata' + ) +) + +metadata_sources = files( + 'gupnp-dlna-metadata-backend.c', + 'metadata/gupnp-dlna-metadata-extractor.c' +) + +libmetadata = static_library( + 'metadata', + metadata_sources, + dependencies : [glib, gio], + c_args : [ + '-DG_LOG_DOMAIN="gupnp-dlna-metadata"', + '-DDATA_DIR="@0@"'.format(shareddir) + ], + include_directories: include_directories( + '..', + 'metadata' + ) +) + +headers = files( + 'gupnp-dlna-profile-guesser.h', + 'gupnp-dlna-profile.h', + 'gupnp-dlna-restriction.h', + 'gupnp-dlna-value-list.h', + 'gupnp-dlna-g-values.h', + 'gupnp-dlna-audio-information.h', + 'gupnp-dlna-container-information.h', + 'gupnp-dlna-image-information.h', + 'gupnp-dlna-video-information.h', + 'gupnp-dlna-information.h', + 'gupnp-dlna-values.h', + 'gupnp-dlna.h' +) + +install_headers( + headers, + subdir: headers_subdir +) + +metadata_headers = files('metadata/gupnp-dlna-metadata-extractor.h') + +install_headers( + metadata_headers, + subdir: join_paths(headers_subdir, 'metadata') +) + +sources = files( + 'gupnp-dlna-audio-information.c', + 'gupnp-dlna-container-information.c', + 'gupnp-dlna-image-information.c', + 'gupnp-dlna-information.c', + 'gupnp-dlna-video-information.c', + 'gupnp-dlna-field-value.c', + 'gupnp-dlna-profile.c', + 'gupnp-dlna-restriction.c', + 'gupnp-dlna-value-list.c', + 'gupnp-dlna-g-values.c', + 'gupnp-dlna-utils.c', + 'gupnp-dlna-value-type.c', + 'gupnp-dlna-info-value.c', + 'gupnp-dlna-value.c', + 'gupnp-dlna-info-set.c' +) + +libgupnp_dlna = library( + 'gupnp-dlna-2.0', + sources, + version: library_version, + link_whole: [ + libloader, + libguesser, + libmetadata + ], + dependencies: [glib, gio, gmodule], + c_args : ['-DG_LOG_DOMAIN="gupnp-dlna"'], + include_directories: include_directories('..'), + install: true +) + +gupnp_dlna = declare_dependency( + link_with : libgupnp_dlna, + include_directories: [include_directories('.'), include_directories('..')], +) + +pkg.generate( + libgupnp_dlna, + version: meson.project_version(), + subdirs : 'gupnp-dlna-2.0', + name: 'gupnp-dlna-2.0', + description: 'GObject-based DLNA specific UPnP library', + libraries: [glib, gobject] +) + +pkg.generate( + version: meson.project_version(), + subdirs: 'gupnp-dlna-2.0/metadata', + name : 'gupnp-dlna-metadata-2.0', + description: 'Metadata extractor plugin development files for GUPnP-DLNA', + libraries: [glib, gobject, gupnp_dlna], + variables: 'plugindir=@0@'.format(metadata_backend_dir) +) + +if get_option('introspection') + gupnp_dlna_gir_dir = meson.current_build_dir() + gupnp_dlna_gir = gnome.generate_gir( + libgupnp_dlna, + sources : headers + + metadata_headers + + sources + + guesser_sources + + metadata_sources + + loader_sources, + namespace : 'GUPnPDLNA', + header : 'libgupnp-dlna/gupnp-dlna.h', + nsversion : '2.0', + symbol_prefix : 'gupnp_dlna', + identifier_prefix : 'GUPnPDLNA', + install: true, + includes : ['GObject-2.0'] + ) +endif + +subdir('metadata-backends') diff --git a/libgupnp-dlna/metadata-backends/gstreamer/meson.build b/libgupnp-dlna/metadata-backends/gstreamer/meson.build new file mode 100644 index 0000000..298b381 --- /dev/null +++ b/libgupnp-dlna/metadata-backends/gstreamer/meson.build @@ -0,0 +1,75 @@ +dlna_gst_headers = files('gupnp-dlna-gst-utils.h') + +dlna_backend_dir = meson.current_build_dir() + +install_headers(dlna_gst_headers, subdir : headers_subdir) + +dlna_gst_sources = files( + 'gupnp-dlna-gst-audio-information.c', + 'gupnp-dlna-gst-container-information.c', + 'gupnp-dlna-gst-image-information.c', + 'gupnp-dlna-gst-information.c', + 'gupnp-dlna-gst-info-utils.c', + 'gupnp-dlna-gst-utils.c', + 'gupnp-dlna-gst-video-information.c' +) + +libgupnp_dlna_gst = library( + 'gupnp-dlna-gst-2.0', + dlna_gst_sources, + version: library_version, + dependencies : [ + glib, + gio, + gstreamer_pbu, + gstreamer, + config_dep, + gupnp_dlna + ], + c_args : ['-DG_LOG_DOMAIN="gupnp-dlna-metadata"'], + install: true +) + +shared_module( + 'gstreamer', + files( + 'gupnp-dlna-gst-metadata-backend.c', + 'gupnp-dlna-gst-metadata-extractor.c', + ), + link_with: libgupnp_dlna_gst, + dependencies : [ + glib, + gstreamer_pbu, + config_dep, + ], + include_directories : include_directories( + '../../metadata', + '../..' + ), + install: true, + install_dir : metadata_backend_dir +) + +pkg.generate( + libgupnp_dlna_gst, + version: meson.project_version(), + subdirs : 'gupnp-dlna-2.0', + name: 'gupnp-dlna-gst-2.0', + description : 'GStreamer specific utils using GUPnP-DLNA', + libraries: gupnp_dlna, + requires: gstreamer_pbu +) + +if get_option('introspection') + gupnp_dlna_gst_gir = gnome.generate_gir( + libgupnp_dlna_gst, + sources : dlna_gst_headers + + dlna_gst_sources, + namespace : 'GUPnPDLNAGst', + nsversion : '2.0', + symbol_prefix : 'gupnp_dlna_gst', + identifier_prefix : 'GUPnPDLNAGst', + install: true, + includes : ['GObject-2.0', gupnp_dlna_gir.get(0), 'Gst-1.0', 'GstPbutils-1.0'] + ) +endif diff --git a/libgupnp-dlna/metadata-backends/meson.build b/libgupnp-dlna/metadata-backends/meson.build new file mode 100644 index 0000000..fe02013 --- /dev/null +++ b/libgupnp-dlna/metadata-backends/meson.build @@ -0,0 +1 @@ +subdir('gstreamer') diff --git a/libgupnp-dlna/metadata/gupnp-dlna-metadata-extractor.c b/libgupnp-dlna/metadata/gupnp-dlna-metadata-extractor.c index 2ddc6df..766a739 100644 --- a/libgupnp-dlna/metadata/gupnp-dlna-metadata-extractor.c +++ b/libgupnp-dlna/metadata/gupnp-dlna-metadata-extractor.c @@ -160,7 +160,7 @@ gupnp_dlna_metadata_extractor_extract_async * * Discovers synchronously metadata of given @uri. * - * Returns: A #GUPnPDLNAInformation object if discovery succeeded, + * Returns: (transfer full) : A #GUPnPDLNAInformation object if discovery succeeded, * otherwise %NULL. */ GUPnPDLNAInformation * diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..3819ef8 --- /dev/null +++ b/meson.build @@ -0,0 +1,67 @@ +project( + 'gupnp-dlna', + 'c', + version: '0.11.0' +) + +pkg = import('pkgconfig') +gnome = import('gnome') + +shareddir = join_paths(get_option('prefix'), get_option('datadir'), 'gupnp-dlna-2.0') +metadata_backend_dir = join_paths(get_option('prefix'), get_option('libdir'), 'gupnp-dlna') +library_version = '3.0.0' + +config = configuration_data() +config.set_quoted('GUPNP_DLNA_DEFAULT_METADATA_BACKEND', get_option('default_backend')) +config.set_quoted('GUPNP_DLNA_DEFAULT_METADATA_BACKEND_DIR', metadata_backend_dir) + +configure_file(output: 'config.h', configuration: config) +add_global_arguments('-DHAVE_CONFIG_H=1', language : 'c') + +glib = dependency('glib-2.0') +gobject = dependency('gobject-2.0') +gio = dependency('gio-2.0') +gmodule = dependency('gmodule-2.0') +xml = dependency('libxml-2.0') +config_dep = declare_dependency( + include_directories : include_directories('.') +) + +gstreamer = dependency('gstreamer-1.0', required: get_option('gstreamer_backend'), disabler : true) +gstreamer_pbu = dependency('gstreamer-pbutils-1.0', required: get_option('gstreamer_backend'), disabler : true) + +# default is relative to the source dir; if test_media is absolute, join_paths() will return that instead +media_dir = join_paths(meson.current_source_dir(), get_option('test_media')) +dlna_profile_dir = join_paths(meson.current_source_dir(), 'data') + +install_data( + files( + 'data/dlna-profiles.rng', + 'data/aac.xml', + 'data/ac3.xml', + 'data/amr.xml', + 'data/avc.xml', + 'data/common.xml', + 'data/jpeg.xml', + 'data/lpcm.xml', + 'data/mp3.xml', + 'data/mpeg1.xml', + 'data/mpeg4.xml', + 'data/mpeg-common.xml', + 'data/mpeg-ps.xml', + 'data/mpeg-ts.xml', + 'data/png.xml', + 'data/wma.xml' + ), + install_dir : join_paths(shareddir, 'dlna-profiles') +) + +subdir('libgupnp-dlna') +subdir('tools') +if get_option('introspection') + if get_option('vapi') + subdir('vala') + endif +endif +subdir('doc') +subdir('tests') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..bdf45ab --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,6 @@ +option('gstreamer_backend', type : 'feature', value: 'enabled') +option('default_backend', type: 'string', value: 'gstreamer') +option('introspection', type: 'boolean', value: 'true') +option('vapi', type: 'boolean', value: 'true') +option('gtk_doc', type: 'boolean', value: 'false') +option('test_media', type: 'string', value: 'tests/gupnp-dlna-media') diff --git a/tests/Makefile.am b/tests/Makefile.am index 465614d..51fd784 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -26,3 +26,5 @@ sets_CFLAGS = \ $(WARN_CFLAGS) \ -I$(top_srcdir) \ -I$(top_srcdir)/libgupnp-dlna + +EXTRA_DIST = meson.build diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 0000000..f988ccd --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,28 @@ +test_file_config = configuration_data() +test_file_config.set('abs_top_builddir', meson.project_build_root()) +discoverer_test = configure_file( + input: 'test-discoverer.sh.in', + output: 'test-discoverer.sh', + configuration: test_file_config +) + +test( + 'discoverer', + discoverer_test, + env : [ + 'MEDIA_DIR=' + media_dir, + 'FILE_LIST=' + join_paths(media_dir, 'media-list.txt'), + 'GUPNP_DLNA_PROFILE_DIR=' + dlna_profile_dir, + 'GUPNP_DLNA_METADATA_BACKEND_DIR=' + dlna_backend_dir + ] +) + +test( + 'test-sets', + executable( + 'sets', + 'sets.c', + dependencies : [glib, gio, gobject, gupnp_dlna], + ) +) + diff --git a/tools/Makefile.am b/tools/Makefile.am index b222d41..f4a9eb0 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -23,3 +23,5 @@ gupnp_dlna_info_2_0_SOURCES = \ gupnp_dlna_ls_profiles_2_0_LDFLAGS = $(WARN_LDFLAGS) gupnp_dlna_ls_profiles_2_0_SOURCES = \ gupnp-dlna-ls-profiles.c + +EXTRA_DIST = meson.build diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 0000000..1c4ecbe --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,25 @@ +executable( + 'gupnp-dlna-info-2.0', + files('gupnp-dlna-info.c'), + dependencies : [ + glib, + gobject, + xml, + config_dep, + gupnp_dlna + ], + install: true +) + +executable( + 'gupnp-dlna-ls-profiles-2.0', + files('gupnp-dlna-ls-profiles.c'), + dependencies : [ + glib, + gobject, + xml, + config_dep, + gupnp_dlna + ], + install: true +) diff --git a/vala/Makefile.am b/vala/Makefile.am index e090277..08a2337 100644 --- a/vala/Makefile.am +++ b/vala/Makefile.am @@ -24,7 +24,8 @@ EXTRA_DIST = \ GUPnPDLNA-2.0.metadata \ gupnp-dlna-2.0-custom.vala \ gupnp-dlna-2.0.vapi \ - gupnp-dlna-2.0.stamp + gupnp-dlna-2.0.stamp \ + meson.build if GSTREAMER_METADATA_BACKEND_ENABLED gupnp-dlna-gst-2.0.vapi: gupnp-dlna-gst-2.0.stamp diff --git a/vala/gupnp-dlna-gst-2.0-custom.vala b/vala/gupnp-dlna-gst-2.0-custom.vala index 1ff1a6e..e69de29 100644 --- a/vala/gupnp-dlna-gst-2.0-custom.vala +++ b/vala/gupnp-dlna-gst-2.0-custom.vala @@ -1,2 +0,0 @@ -namespace GUPnP.DLNA.Gst { -} diff --git a/vala/meson.build b/vala/meson.build new file mode 100644 index 0000000..fd30562 --- /dev/null +++ b/vala/meson.build @@ -0,0 +1,27 @@ + +gupnp_dlna_vapi = gnome.generate_vapi( + 'gupnp-dlna-2.0', + sources : [ + gupnp_dlna_gir.get(0), + 'gupnp-dlna-2.0-custom.vala' + ], + packages : ['glib-2.0', 'gio-2.0', 'gmodule-2.0'], + install : true +) + +gnome.generate_vapi( + 'gupnp-dlna-gst-2.0', + sources : [ + gupnp_dlna_gst_gir.get(0), + 'gupnp-dlna-gst-2.0-custom.vala' + ], + packages : [ + 'glib-2.0', + 'gobject-2.0', + 'gstreamer-1.0', + 'gstreamer-pbutils-1.0', + gupnp_dlna_vapi + ], + gir_dirs : gupnp_dlna_gir_dir, + install : true +) -- cgit v1.2.1