From 536e1aea69736ccd98acbcc922f68285b037225d Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 01 2019 14:41:09 +0000 Subject: import libmodulemd-2.5.0-2.el8 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8261923 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/modulemd-2.5.0.tar.xz diff --git a/.libmodulemd.metadata b/.libmodulemd.metadata new file mode 100644 index 0000000..0ea40c8 --- /dev/null +++ b/.libmodulemd.metadata @@ -0,0 +1 @@ +2b6c3443a36ec821fd289ae6605e9dea4c5dbcda SOURCES/modulemd-2.5.0.tar.xz diff --git a/SOURCES/0001-Double-valgrind-timeout.patch b/SOURCES/0001-Double-valgrind-timeout.patch new file mode 100644 index 0000000..e7f128a --- /dev/null +++ b/SOURCES/0001-Double-valgrind-timeout.patch @@ -0,0 +1,29 @@ +From 1a7bf143761ff8e3f4f6585b82c0be4dbd511fca Mon Sep 17 00:00:00 2001 +From: Stephen Gallagher +Date: Thu, 23 May 2019 14:00:36 -0400 +Subject: [PATCH 1/3] Double valgrind timeout + +On some architectures under heavy load, the valgrind check on v2 +is taking a long time. + +Signed-off-by: Stephen Gallagher +--- + modulemd/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modulemd/meson.build b/modulemd/meson.build +index 47bd1f58e6401d2634d8ff737c2b347f5ebc6bf5..e49c7a9df76dcf37a18ddeba3150d6c914aa4e25 100644 +--- a/modulemd/meson.build ++++ b/modulemd/meson.build +@@ -313,7 +313,7 @@ endif + if valgrind.found() + modulemd_valgrind_scripts = files('common/tests/test-valgrind.py') + test ('valgrind', python3, + env : test_env, + args : modulemd_valgrind_scripts, +- timeout : 600) ++ timeout : 1200) + endif +-- +2.21.0 + diff --git a/SOURCES/0002-Parallelize-the-valgrind-tests.patch b/SOURCES/0002-Parallelize-the-valgrind-tests.patch new file mode 100644 index 0000000..ba160a5 --- /dev/null +++ b/SOURCES/0002-Parallelize-the-valgrind-tests.patch @@ -0,0 +1,136 @@ +From d9b41f72d4b2d545b2600aff7bd8a27ed0093750 Mon Sep 17 00:00:00 2001 +From: Stephen Gallagher +Date: Wed, 29 May 2019 11:33:57 -0400 +Subject: [PATCH 2/3] Parallelize the valgrind tests + +This considerably reduces the time needed to perform the valgrind +memory tests on systems with multiple available processors. In the +case of my laptop, the duration was reduced from ~200s to 90s. + +Signed-off-by: Stephen Gallagher +--- + modulemd/common/tests/test-valgrind.py | 74 ++++++++++++++------------ + 1 file changed, 41 insertions(+), 33 deletions(-) + +diff --git a/modulemd/common/tests/test-valgrind.py b/modulemd/common/tests/test-valgrind.py +index 9be72c705fde79aa305d831eaa4f31f7e2cc663f..9349749658ccca0529776f3d534664d614c1cb4d 100644 +--- a/modulemd/common/tests/test-valgrind.py ++++ b/modulemd/common/tests/test-valgrind.py +@@ -16,13 +16,16 @@ import os + import sys + import subprocess + import tempfile + import xml.etree.ElementTree as ET + ++from multiprocessing import Pool, TimeoutError ++ + if os.getenv('MMD_SKIP_VALGRIND'): + sys.exit(77) + ++ + failed = False + + # Get the list of tests to run + proc_result = subprocess.run(['meson', 'test', '--list'], + stdout=subprocess.PIPE, +@@ -47,13 +50,13 @@ for test in unfiltered_tests: + test == 'test_dirty_repo' or + test == 'valgrind'): + continue + tests.append(test) + ++ + with tempfile.TemporaryDirectory(prefix="libmodulemd_valgrind_") as tmpdirname: +- for test in tests: +- # TODO: auto-detect the location of the suppression file ++ def exec_valgrind(test): + valgrind_command = "/usr/bin/valgrind " \ + "--leak-check=full " \ + "--suppressions=/usr/share/glib-2.0/valgrind/glib.supp " \ + "--xml=yes " \ + "--xml-file=%s/%s.xml " % (tmpdirname, test) +@@ -64,45 +67,50 @@ with tempfile.TemporaryDirectory(prefix="libmodulemd_valgrind_") as tmpdirname: + '-t', '10', + '--logbase=%s' % test, + '--wrap=%s' % valgrind_command, + test]) + +- if proc_result.returncode != 0: +- print("Valgrind exited with an error on %s" % test, +- file=sys.stderr) +- failed = True +- continue ++ return proc_result.returncode, test + +- # Process the XML for leaks +- tree = ET.parse('%s/%s.xml' % (tmpdirname, test)) +- root = tree.getroot() ++ with Pool() as pool: ++ for returncode, test in pool.map(exec_valgrind, tests): ++ if returncode != 0: ++ print("Valgrind exited with an error on %s" % test, ++ file=sys.stderr) ++ failed = True ++ continue + +- for root_child in root: +- if (root_child.tag == "error"): +- for error_child in root_child: +- if error_child.tag == 'kind': +- if error_child.text == 'Leak_DefinitelyLost': +- print("Memory leak detected in %s" % test, +- file=sys.stderr) +- failed = True ++ # Process the XML for leaks ++ tree = ET.parse('%s/%s.xml' % (tmpdirname, test)) ++ root = tree.getroot() + +- elif error_child.text == 'InvalidFree': +- print("Invalid free() detected in %s" % test, +- file=sys.stderr) +- failed = True ++ for root_child in root: ++ if (root_child.tag == "error"): ++ for error_child in root_child: ++ if error_child.tag == 'kind': ++ if error_child.text == 'Leak_DefinitelyLost': ++ print("Memory leak detected in %s" % test, ++ file=sys.stderr) ++ failed = True + +- elif error_child.text == 'InvalidRead': +- print("Invalid read detected in %s" % test, +- file=sys.stderr) +- failed = True ++ elif error_child.text == 'InvalidFree': ++ print("Invalid free() detected in %s" % test, ++ file=sys.stderr) ++ failed = True + +- elif error_child.text == 'UninitCondition': +- print("Uninitialized usage detected in %s" % test, +- file=sys.stderr) +- failed = True +- if failed: +- with open('%s/%s.xml' % (tmpdirname, test), 'r') as xml: +- print(xml.read()) ++ elif error_child.text == 'InvalidRead': ++ print("Invalid read detected in %s" % test, ++ file=sys.stderr) ++ failed = True ++ ++ elif error_child.text == 'UninitCondition': ++ print( ++ "Uninitialized usage detected in %s" % ++ test, file=sys.stderr) ++ failed = True ++ if failed: ++ with open('%s/%s.xml' % (tmpdirname, test), 'r') as xml: ++ print(xml.read()) + + + if failed: + sys.exit(1) +-- +2.21.0 + diff --git a/SOURCES/0003-Fix-transfer-type-for-Module.search_streams.patch b/SOURCES/0003-Fix-transfer-type-for-Module.search_streams.patch new file mode 100644 index 0000000..40ba286 --- /dev/null +++ b/SOURCES/0003-Fix-transfer-type-for-Module.search_streams.patch @@ -0,0 +1,150 @@ +From 340e316bd6384562086b4e381c8cd42b1ccd0781 Mon Sep 17 00:00:00 2001 +From: Stephen Gallagher +Date: Tue, 28 May 2019 14:28:30 -0400 +Subject: [PATCH 3/3] Fix transfer type for Module.search_streams() + +Technically this is an API-breaking change, but no one is using it +yet and it was always expected to be managed this way. + +Fixes: https://github.com/fedora-modularity/libmodulemd/issues/308 + +Signed-off-by: Stephen Gallagher +--- + modulemd/meson.build | 1 + + .../v2/include/modulemd-2.0/modulemd-module.h | 4 +- + modulemd/v2/meson.build | 17 ++++++- + modulemd/v2/tests/ModulemdTests/module.py | 46 +++++++++++++++++++ + 4 files changed, 65 insertions(+), 3 deletions(-) + create mode 100644 modulemd/v2/tests/ModulemdTests/module.py + +diff --git a/modulemd/meson.build b/modulemd/meson.build +index e49c7a9df76dcf37a18ddeba3150d6c914aa4e25..e5912d4041ba3e427d13b98c0eeca5217d48244b 100644 +--- a/modulemd/meson.build ++++ b/modulemd/meson.build +@@ -229,10 +229,11 @@ test_v2_python_scripts = files( + 'v2/tests/ModulemdTests/componentrpm.py', + 'v2/tests/ModulemdTests/defaults.py', + 'v2/tests/ModulemdTests/defaultsv1.py', + 'v2/tests/ModulemdTests/dependencies.py', + 'v2/tests/ModulemdTests/merger.py', ++ 'v2/tests/ModulemdTests/module.py', + 'v2/tests/ModulemdTests/moduleindex.py', + 'v2/tests/ModulemdTests/modulestream.py', + 'v2/tests/ModulemdTests/profile.py', + 'v2/tests/ModulemdTests/rpmmap.py', + 'v2/tests/ModulemdTests/servicelevel.py', +diff --git a/modulemd/v2/include/modulemd-2.0/modulemd-module.h b/modulemd/v2/include/modulemd-2.0/modulemd-module.h +index 45be9c0ae96e203707da61d84f18c71c4a826035..0219cfe227652813d20bdf736f9033782084c5ad 100644 +--- a/modulemd/v2/include/modulemd-2.0/modulemd-module.h ++++ b/modulemd/v2/include/modulemd-2.0/modulemd-module.h +@@ -129,12 +129,12 @@ modulemd_module_get_stream_by_NSVC (ModulemdModule *self, + * @context: (nullable): The context of the stream to retrieve. If NULL, the + * context is not included in the search. + * @arch: (nullable): The processor architecture of the stream to retrieve. If + * NULL, the architecture is not included in the search. + * +- * Returns: (transfer full) (element-type ModulemdModuleStream): The list of +- * stream objects matching the requested parameters. This function cannot ++ * Returns: (transfer container) (element-type ModulemdModuleStream): The list ++ * of stream objects matching the requested parameters. This function cannot + * fail, but it may return a zero-length list if no matches were found. The + * returned streams will be in a predictable order, sorted first by stream + * name, then by version (highest to lowest), then by context and finally by + * architecture. + * +diff --git a/modulemd/v2/meson.build b/modulemd/v2/meson.build +index 3f45db2c4e0e9a8996c74dffd949d5276082dc6f..e8a5a38f0528c4f860f0b84ef63609ff5fd89caa 100644 +--- a/modulemd/v2/meson.build ++++ b/modulemd/v2/meson.build +@@ -390,20 +390,35 @@ test ('dependencies_python2_debug', python2, + args : dependencies_python_script) + test ('dependencies_python2_release', python2, + env : py_test_release_env, + args : dependencies_python_script) + ++# -- Test Modulemd.Module (Python) -- # ++module_python_script = files('tests/ModulemdTests/module.py') ++test ('module_python3_debug', python3, ++ env : py_test_env, ++ args : module_python_script) ++test ('module_python3_release', python3, ++ env : py_test_release_env, ++ args : module_python_script) ++ ++test ('module_python2_debug', python2, ++ env : py_test_env, ++ args : module_python_script) ++test ('module_python2_release', python2, ++ env : py_test_release_env, ++ args : module_python_script) ++ + # -- Test Modulemd.ModuleIndex (Python) -- # + moduleindex_python_script = files('tests/ModulemdTests/moduleindex.py') + test ('moduleindex_python3_debug', python3, + env : py_test_env, + args : moduleindex_python_script) + test ('moduleindex_python3_release', python3, + env : py_test_release_env, + args : moduleindex_python_script) + +-moduleindex_python_script = files('tests/ModulemdTests/moduleindex.py') + test ('moduleindex_python2_debug', python2, + env : py_test_env, + args : moduleindex_python_script) + test ('moduleindex_python2_release', python2, + env : py_test_release_env, +diff --git a/modulemd/v2/tests/ModulemdTests/module.py b/modulemd/v2/tests/ModulemdTests/module.py +new file mode 100644 +index 0000000000000000000000000000000000000000..b604d9c9b357c4a5211d3ba5b4d0aba08c3a42bd +--- /dev/null ++++ b/modulemd/v2/tests/ModulemdTests/module.py +@@ -0,0 +1,46 @@ ++#!/usr/bin/python3 ++ ++# This file is part of libmodulemd ++# Copyright (C) 2017-2018 Stephen Gallagher ++# ++# Fedora-License-Identifier: MIT ++# SPDX-2.0-License-Identifier: MIT ++# SPDX-3.0-License-Identifier: MIT ++# ++# This program is free software. ++# For more information on the license, see COPYING. ++# For more information on free software, see ++# . ++ ++from os import path ++import sys ++try: ++ import unittest ++ import gi ++ gi.require_version('Modulemd', '2.0') ++ from gi.repository import Modulemd ++ from gi.repository.Modulemd import ModuleIndex ++ from gi.repository import GLib ++except ImportError: ++ # Return error 77 to skip this test on platforms without the necessary ++ # python modules ++ sys.exit(77) ++ ++from base import TestBase ++ ++ ++class TestModule(TestBase): ++ ++ def test_search_streams(self): ++ idx = Modulemd.ModuleIndex.new() ++ idx.update_from_file(path.join(self.source_root, ++ "modulemd/v2/tests/test_data/f29.yaml"), ++ True) ++ module = idx.get_module('nodejs') ++ ++ self.assertEquals(len(module.search_streams('8', 0)), 1) ++ self.assertEquals(len(module.search_streams('10', 0)), 1) ++ ++ ++if __name__ == '__main__': ++ unittest.main() +-- +2.21.0 + diff --git a/SPECS/libmodulemd.spec b/SPECS/libmodulemd.spec new file mode 100644 index 0000000..a8a288c --- /dev/null +++ b/SPECS/libmodulemd.spec @@ -0,0 +1,443 @@ +%global libmodulemd_version 2.5.0 +%global libmodulemd_v1_version 1.8.11 + +Name: libmodulemd +Version: %{libmodulemd_version} +Release: 2%{?dist} +Summary: Module metadata manipulation library + +License: MIT +URL: https://github.com/fedora-modularity/libmodulemd +Source0: %{url}/releases/download/%{name}-%{version}/modulemd-%{version}.tar.xz + +BuildRequires: meson >= 0.47 +BuildRequires: pkgconfig +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(yaml-0.1) +BuildRequires: pkgconfig(gtk-doc) +BuildRequires: python3-devel +BuildRequires: python3-gobject-base +%ifarch %{valgrind_arches} +BuildRequires: valgrind +%endif + +# Make sure we upgrade libmodulemd1 to match +Conflicts: libmodulemd1 < %{libmodulemd_v1_version}-%{release} + + +# Patches +Patch0001: 0001-Double-valgrind-timeout.patch +Patch0002: 0002-Parallelize-the-valgrind-tests.patch +Patch0003: 0003-Fix-transfer-type-for-Module.search_streams.patch + + +%description +C Library for manipulating module metadata files. +See https://github.com/fedora-modularity/libmodulemd/blob/master/README.md for +more details. + + +%package -n python3-%{name} +Summary: Python 3 bindings for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python3-gobject-base +Requires: %{py3_dist six} +Obsoletes: python3-modulemd < 1.3.4 + +%description -n python3-%{name} +Python 3 bindings for %{name} + + +%package devel +Summary: Development files for libmodulemd +Requires: %{name}%{?_isa} = %{version}-%{release} + + +%description devel +Development files for libmodulemd. + + +%package -n libmodulemd1 +Summary: Compatibility package for libmodulemd 1.x +Version: %{libmodulemd_v1_version} +Obsoletes: libmodulemd < 2 +Provides: libmodulemd = %{libmodulemd_v1_version}-%{release} +Provides: libmodulemd%{?_isa} = %{libmodulemd_v1_version}-%{release} + +%description -n libmodulemd1 +Compatibility library for libmodulemd 1.x + + +%package -n libmodulemd1-devel +Summary: Compatibility development package for libmodulemd 1.x +Version: %{libmodulemd_v1_version} +Requires: libmodulemd1%{?_isa} = %{libmodulemd_v1_version}-%{release} +Conflicts: %{name}-devel +Obsoletes: libmodulemd-devel < 2 +Provides: libmodulemd-devel = %{libmodulemd_v1_version}-%{release} +RemovePathPostfixes: .compat + + +%description -n libmodulemd1-devel +Development files for libmodulemd 1.x + + +%package -n python3-libmodulemd1 +Summary: Python 3 bindings for %{name}1 +Version: %{libmodulemd_v1_version} +Requires: libmodulemd1 = %{libmodulemd_v1_version}-%{release} +Requires: python3-gobject-base + +Obsoletes: python3-libmodulemd < 2 +Provides: python3-libmodulemd = %{libmodulemd_v1_version}-%{release} + +%description -n python3-libmodulemd1 +Python 3 bindings for libmodulemd1 + + +%prep +%autosetup -p1 -n modulemd-%{libmodulemd_version} + + +%build +%define _vpath_builddir api1 +%meson -Ddeveloper_build=false -Dbuild_api_v1=true -Dbuild_api_v2=false +%meson_build + +%define _vpath_builddir api2 +%meson -Ddeveloper_build=false -Dbuild_api_v1=false -Dbuild_api_v2=true -Dwith_py3_overrides=true -Dwith_py2_overrides=false +%meson_build + + +%check + +export LC_CTYPE=C.utf8 + +%ifarch %{power64} s390x +# Valgrind is broken on ppc64[le] with GCC7: +# https://bugs.kde.org/show_bug.cgi?id=386945 +export MMD_SKIP_VALGRIND=1 +%endif +%ifnarch %{valgrind_arches} +export MMD_SKIP_VALGRIND=1 +%endif + +%define _vpath_builddir api1 +%meson_test + +%define _vpath_builddir api2 +%meson_test + + +%install +%define _vpath_builddir api1 +%meson_install + +%define _vpath_builddir api2 +%meson_install + +ln -s libmodulemd.so.%{libmodulemd_v1_version} \ + %{buildroot}%{_libdir}/%{name}.so.compat + + +%files +%license COPYING +%doc README.md +%{_bindir}/modulemd-validator +%{_libdir}/%{name}.so.2* +%dir %{_libdir}/girepository-1.0 +%{_libdir}/girepository-1.0/Modulemd-2.0.typelib + + +%files devel +%{_libdir}/%{name}.so +%{_libdir}/pkgconfig/modulemd-2.0.pc +%{_includedir}/modulemd-2.0/ +%dir %{_datadir}/gir-1.0 +%{_datadir}/gir-1.0/Modulemd-2.0.gir +%dir %{_datadir}/gtk-doc +%dir %{_datadir}/gtk-doc/html +%{_datadir}/gtk-doc/html/modulemd-2.0/ + + +%files -n python3-%{name} +%{python3_sitearch}/gi/overrides/ + + +%files -n python3-libmodulemd1 + + +%files -n libmodulemd1 +%license COPYING +%doc README.md +%{_bindir}/modulemd-validator-v1 +%{_libdir}/%{name}.so.1* +%dir %{_libdir}/girepository-1.0 +%{_libdir}/girepository-1.0/Modulemd-1.0.typelib + + +%files -n libmodulemd1-devel +%{_libdir}/%{name}.so.compat +%{_libdir}/pkgconfig/modulemd.pc +%{_includedir}/modulemd/ +%dir %{_datadir}/gir-1.0 +%{_datadir}/gir-1.0/Modulemd-1.0.gir +%dir %{_datadir}/gtk-doc +%dir %{_datadir}/gtk-doc/html +%{_datadir}/gtk-doc/html/modulemd-1.0/ + + +%changelog +* Wed May 29 2019 Stephen Gallagher - 2.5.0-2 +- Fix memory corruption error using Module.search_rpms() from python +- Speed up valgrind tests +- Resolves: rhbz#1714766 + +* Wed May 22 2019 Stephen Gallagher - 2.5.0-1 +- Rebase to 2.5.0 and 1.8.11 +- Related: rhbz#1693680 + +* Mon May 13 2019 Stephen Gallagher - 2.4.0-1 +- Rebase to 2.4.0 and 1.8.10 +- Resolves: rhbz#1693680 + +* Fri Jan 18 2019 Stephen Gallagher - 2.0.0-5 +- Don't fail merges when default streams differ +- Resolves: rhbz#1666871 + +* Wed Jan 16 2019 Stephen Gallagher - 2.0.0-4 +- Include modified value when copying Defaults objects +- Resolves: rhbz#1665465 + +* Thu Dec 13 2018 Stephen Gallagher - 2.0.0-3 +- Keep libmodulemd1 in sync with libmodulemd + +* Thu Dec 13 2018 Stephen Gallagher - 2.0.0-2 +- Fix package location of modulemd-validator + +* Thu Dec 13 2018 Stephen Gallagher - 2.0.0-1 +- Update to 2.0.0 final +- Assorted fixes for validation +- Add modulemd-validator tool based on v2 code +- Fix a crash when merging defaults +- Add missing BuildRequires + +* Tue Dec 11 2018 Stephen Gallagher - 2.0.0-0.beta2 +- Update to 2.0.0beta2 +- Better validation of stored content during read and write operations +- ModuleIndex now returns FALSE if any subdocument fails +- Fix tests on 32-bit platforms +- Make unknown keys in YAML maps non-fatal for libmodulemd1 +- Make unknown keys in YAML maps optionally fatal for libmodulemd 2.x +- Fix RPM version requirements for libmodulemd1 + +* Mon Dec 10 2018 Stephen Gallagher - 2.0.0-0.beta1 +- Total rewrite to 2.0 API +- Resolves: rhbz#1646436 + +* Thu Aug 09 2018 Stephen Gallagher - 1.6.2-2 +- Fix backwards-incompatible API change +- Resolves: rhbz#1607083 + +* Tue Aug 07 2018 Stephen Gallagher - 1.6.2-1 +- Update to 1.6.2 +- Make buildorder a signed integer to match modulemd specification +- Obsolete unsupported pythonX-modulemd packages + +* Fri Aug 3 2018 Florian Weimer - 1.6.1-2 +- Honor %%{valgrind_arches} + +* Fri Jul 20 2018 Stephen Gallagher - 1.6.1-1 +- Update to 1.6.1 +- Fix header include ordering +- Suppress empty sections from .dump() ordering + +* Wed Jul 18 2018 Stephen Gallagher - 1.6.0-1 +- Update to 1.6.0 +- Adds Modulemd.ModuleStream object, deprecating Modulemd.Module +- Adds Modulemd.Translation and Modulemd.TranslationEntry objects +- Adds Modulemd.ImprovedModule object that collects streams, defaults and + translations together +- Adds new Modulemd.index_from_*() funtions to get a hash table of + Modulemd.ImprovedModule objects for easier searching +- Moves function documentation to the public headers +- Corrects the license headers to MIT (they were incorrectly listed as MITNFA + in previous releases) +- Makes the "eol" field optional for Modulemd.ServiceLevel +- Clean up HTML documentation +- Fixes a type error on 32-bit systems + +* Fri Jul 13 2018 Fedora Release Engineering - 1.5.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Sat Jun 23 2018 Stephen Gallagher - 1.5.2-1 +- Update to libdmodulemd 1.5.2 +- Don't free uninitialized memory + +* Fri Jun 22 2018 Stephen Gallagher - 1.5.1-2 +- Fix buildopts property not being initialized + +* Tue Jun 19 2018 Stephen Gallagher - 1.5.1-1 +- Update to version 1.5.1 +- Re-enable build-time tests + +* Mon Jun 18 2018 Stephen Gallagher - 1.5.0-2 +- Temporarily disable build-time tests + +* Mon Jun 18 2018 Stephen Gallagher - 1.5.0-1 +- Update to version 1.5.0 +- Adds support for "intents" in Modulemd.Defaults +- Adds `Modulemd.get_version()` +- Adds support for RPM whitelists in the buildopts +- Adds a new object: Modulemd.Buildopts +- Deprecates Modulemd.Module.get_rpm_buildopts() +- Deprecates Modulemd.Module.set_rpm_buildopts() +- Fixes some missing license blurbs + +* Tue May 08 2018 Stephen Gallagher - 1.4.1-1 +- Update to version 1.4.1 +- Improve output from modulemd-validator +- Drop upstreamed patches + +* Wed Apr 25 2018 Stephen Gallagher - 1.4.0-2 +- Fix pointer math error +- Fix compilation failure in Fedora build system + +* Wed Apr 25 2018 Stephen Gallagher - 1.4.0-1 +- Update to version 1.4.0 +- Adds new API for returning failed YAML subdocuments +- Stop emitting log messages by default (polluting consumer logs) +- Validate RPM artifacts for proper NEVRA format +- Improve the validator tool +- Drop upstreamed patch + +* Mon Apr 16 2018 Stephen Gallagher - 1.3.0-2 +- Fix serious error in modulemd-defaults emitter + +* Fri Apr 13 2018 Stephen Gallagher - 1.3.0-1 +- Update to version 1.3.0 +- New Public Objects: + * Modulemd.Prioritizer - tool to merge module defaults +- New Public Functions: + * Modulemd.SimpleSet.is_equal() + * Modulemd.Defaults.copy() + * Modulemd.Defaults.merge() + +* Wed Apr 04 2018 Stephen Gallagher - 1.2.0-1 +- Update to version 1.2.0 +- New Functions: + * Modulemd.objects_from_file() + * Modulemd.objects_from_string() + * Modulemd.dump() + * Modulemd.dumps() + * Modulemd.Defaults.new_from_file() + * Modulemd.Defaults.new_from_string() +- Deprecated Functions: + * Modulemd.Module.new_all_from_file() + * Modulemd.Module.new_all_from_file_ext() + * Modulemd.Module.new_all_from_string() + * Modulemd.Module.new_all_from_string_ext() + * Modulemd.Module.dump_all() + * Modulemd.Module.dumps_all() +- Bugfixes + * Properly use G_BEGIN_DECLS and G_END_DECLS in headers + * Assorted fixes for memory ownership in GObject Introspection + +* Fri Mar 23 2018 Stephen Gallagher - 1.1.3-2 +- Fix missing G_END_DECL from public headers + +* Mon Mar 19 2018 Stephen Gallagher - 1.1.3-1 +- Fix numerous memory leaks +- Drop upstreamed patch + +* Thu Mar 15 2018 Stephen Gallagher - 1.1.2-1 +- Update to version 1.1.2 +- Revert backwards-incompatible API change +- Fix version string in pkgconfig file + +* Thu Mar 15 2018 Stephen Gallagher - 1.1.1-1 +- Update to version 1.1.1 +- Make default stream and profiles optional +- Fixes: https://github.com/fedora-modularity/libmodulemd/issues/25 +- Fixes: https://github.com/fedora-modularity/libmodulemd/issues/26 +- Fixes: https://github.com/fedora-modularity/libmodulemd/issues/27 + +* Wed Mar 14 2018 Stephen Gallagher - 1.1.0-1 +- Update to version 1.1.0 +- Adds support for handling modulemd-defaults YAML documents +- Adds peek()/dup() routines to all object properties +- Adds Modulemd.Module.dup_nsvc() to retrieve the canonical form of the unique module identifier. +- Adds support for boolean types in the XMD section +- Revert obsoletion of pythonX-modulemd packages for now + +* Tue Mar 13 2018 Igor Gnatenko - 1.0.4-2 +- Obsolete unsupported pythonX-modulemd packages + +* Tue Feb 27 2018 Stephen Gallagher - 1.0.4-1 +- Update to 1.0.4 +- Rework version autodetection +- Avoid infinite loop on unparseable YAML + +* Sun Feb 25 2018 Stephen Gallagher - 1.0.3-1 +- RPM components are properly emitted when no module components exist +- Parser works around late determination of modulemd version + +* Fri Feb 16 2018 Stephen Gallagher - 1.0.2-1 +- Be more strict with certain parser edge-cases +- Replace popt argument processing with glib +- Drop upstreamed patches + +* Thu Feb 15 2018 Stephen Gallagher - 1.0.1-2 +- Handle certain unlikely format violations + +* Thu Feb 15 2018 Stephen Gallagher - 1.0.1-1 +- Support modulemd v2 +- Add tool to do quick validation of modulemd +- Fix memory management +- Warn and ignore unparseable sub-documents in the YAML +- Fix several memory issues detected by Coverity scan + +* Tue Feb 06 2018 Stephen Gallagher - 0.2.2-1 +- Update to libmodulemd 0.2.2 +- Fix numerous minor memory leaks +- Fix issues with EOL/SL dates + +* Tue Feb 06 2018 Igor Gnatenko - 0.2.1-3 +- Own appropriate directories + +* Fri Feb 02 2018 Igor Gnatenko - 0.2.1-2 +- Switch to %%ldconfig_scriptlets + +* Fri Jan 05 2018 Stephen Gallagher - 0.2.1-1 +- Update to libmodulemd 0.2.1 +- Add 'name' property for Profiles + +* Thu Oct 05 2017 Stephen Gallagher - 0.2.0-2 +- Add missing BuildRequires for gtk-doc + +* Thu Oct 05 2017 Stephen Gallagher - 0.2.0-1 +- Update to libmodulemd 0.2.0 +- Adds gtk-doc generated documentation +- (ABI-break) Makes all optional properties accept NULL as a value to clear + them +- (ABI-break) Modulemd.SimpleSet takes a STRV (char **) instead of a + GLib.PtrArray +- Fixes a bug where the name was not always set for components +- Adds support for dumping YAML from the introspected API +- Includes add/remove routines for profiles + +* Sat Sep 30 2017 Igor Gnatenko - 0.1.0-5 +- Use %%_isa in Requires for main package from devel + +* Mon Sep 18 2017 Stephen Gallagher - 0.1.0-4 +- Correct the license to MIT + +* Mon Sep 18 2017 Stephen Gallagher - 0.1.0-3 +- Modifications requested during package review + +* Fri Sep 15 2017 Stephen Gallagher - 0.1.0-2 +- First public release +