diff --git a/.gitignore b/.gitignore index 59a07bb..0afda40 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libsolv-12af31a.tar.xz +SOURCES/libsolv-0.6.20.tar.gz diff --git a/.libsolv.metadata b/.libsolv.metadata index e2e99df..8e96706 100644 --- a/.libsolv.metadata +++ b/.libsolv.metadata @@ -1 +1 @@ -e6b245850507345382551f509dacd6875a13bec1 SOURCES/libsolv-12af31a.tar.xz +083e3ad09ecf52bc4beda22444b0ff8bce65414d SOURCES/libsolv-0.6.20.tar.gz diff --git a/SOURCES/0001-Fix-order-of-solv_extend-arguments-in-repo_add_rpmmd.patch b/SOURCES/0001-Fix-order-of-solv_extend-arguments-in-repo_add_rpmmd.patch new file mode 100644 index 0000000..102c4a9 --- /dev/null +++ b/SOURCES/0001-Fix-order-of-solv_extend-arguments-in-repo_add_rpmmd.patch @@ -0,0 +1,27 @@ +From 599c58bed474c2a68109ff0649f1effa7ff02c45 Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 17 May 2016 11:22:56 +0200 +Subject: [PATCH] Fix order of solv_extend arguments in repo_add_rpmmd + +Fixes libsolv sometimes segfaulting since commit +d06562f7b70f6ceb7d52e717efd1963ce6e8ecf0 +--- + ext/repo_rpmmd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/repo_rpmmd.c b/ext/repo_rpmmd.c +index 78264cc..d280ba0 100644 +--- a/ext/repo_rpmmd.c ++++ b/ext/repo_rpmmd.c +@@ -657,7 +657,7 @@ put_in_cshash(struct parsedata *pd, const unsigned char *key, int keyl, Id id) + } + } + /* a new entry. put in csdata */ +- pd->csdata = solv_extend(pd->csdata, pd->ncsdata, 1, 1 + keyl + sizeof(Id), 4095); ++ pd->csdata = solv_extend(pd->csdata, pd->ncsdata, 1 + keyl + sizeof(Id), 1, 4095); + d = pd->csdata + pd->ncsdata; + d[0] = keyl - 1; + memcpy(d + 1, key, keyl); +-- +2.7.4 + diff --git a/SOURCES/0001-Fix-supplements-handling-when-implicitobsoleteusesco.patch b/SOURCES/0001-Fix-supplements-handling-when-implicitobsoleteusesco.patch new file mode 100644 index 0000000..6619174 --- /dev/null +++ b/SOURCES/0001-Fix-supplements-handling-when-implicitobsoleteusesco.patch @@ -0,0 +1,74 @@ +From b1014a431541444bcd39c6ec83c1ec935c7f0aae Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 17 May 2016 13:31:58 +0200 +Subject: [PATCH] Fix supplements handling when implicitobsoleteusescolors is + set + +This currently relys on the infarch lockstep handling a bit. Let's +see if this is enough or we need some better filtering code. +--- + src/solver.c | 20 ++++++++++++++++++++ + .../supplements_implicitobsoleteusescolors.t | 20 ++++++++++++++++++++ + 2 files changed, 40 insertions(+) + create mode 100644 test/testcases/weakdeps/supplements_implicitobsoleteusescolors.t + +diff --git a/src/solver.c b/src/solver.c +index 5da8529..4f849ec 100644 +--- a/src/solver.c ++++ b/src/solver.c +@@ -2636,6 +2636,26 @@ solver_run_sat(Solver *solv, int disablerules, int doweak) + dqs.count = j; + } + ++ /* implicitobsoleteusescolors doesn't mix well with supplements. ++ * filter supplemented packages where we already decided ++ * to install a different architecture */ ++ if (dqs.count && pool->implicitobsoleteusescolors) ++ { ++ for (i = j = 0; i < dqs.count; i++) ++ { ++ Id p2, pp2; ++ p = dqs.elements[i]; ++ s = pool->solvables + p; ++ FOR_PROVIDES(p2, pp2, s->name) ++ if (solv->decisionmap[p2] > 0 && pool->solvables[p2].name == s->name && pool->solvables[p2].arch != s->arch) ++ break; ++ if (p2) ++ continue; /* ignore this package */ ++ dqs.elements[j++] = p; ++ } ++ dqs.count = j; ++ } ++ + /* make dq contain both recommended and supplemented pkgs */ + if (dqs.count) + { +diff --git a/test/testcases/weakdeps/supplements_implicitobsoleteusescolors.t b/test/testcases/weakdeps/supplements_implicitobsoleteusescolors.t +new file mode 100644 +index 0000000..6de4544 +--- /dev/null ++++ b/test/testcases/weakdeps/supplements_implicitobsoleteusescolors.t +@@ -0,0 +1,20 @@ ++repo system 0 empty ++repo test 0 testtags ++#>=Ver: 2.0 ++#>=Pkg: A 1 1 noarch ++#>=Pkg: B 1 1 x86_64 ++#>=Sup: A ++#>=Pkg: B 1 1 i686 ++#>=Sup: A ++#>=Pkg: A2 1 1 noarch ++#>=Pkg: B2 1 1 x86_64 ++#>=Sup: A2 ++#>=Req: XX ++#>=Pkg: B2 1 1 i686 ++#>=Sup: A2 ++system x86_64 * system ++poolflags implicitobsoleteusescolors ++job install name A ++ ++nextjob ++job install name A2 +-- +2.7.4 + diff --git a/SPECS/libsolv.spec b/SPECS/libsolv.spec index e18dd4b..6c625e2 100644 --- a/SPECS/libsolv.spec +++ b/SPECS/libsolv.spec @@ -1,23 +1,78 @@ -%global gitrev 12af31a -%{!?ruby_vendorarch: %global ruby_vendorarch %(ruby -rrbconfig -e 'puts RbConfig::CONFIG["vendorarchdir"] ')} -%filter_provides_in %{perl_vendorarch}/.*\.so$ -%filter_provides_in %{python_sitearch}/.*\.so$ -%filter_provides_in %{ruby_vendorarch}/.*\.so$ -%filter_setup - -Name: libsolv -Version: 0.6.4 -Release: 45.atomic.0%{?dist} -License: BSD -Url: https://github.com/openSUSE/libsolv -# git clone https://github.com/openSUSE/libsolv.git -# git archive %{gitrev} --prefix=libsolv/ | xz > libsolv-%{gitrev}.tar.xz -Source: libsolv-%{gitrev}.tar.xz -Group: Development/Libraries -Summary: Package dependency solver -BuildRequires: cmake libdb-devel expat-devel rpm-devel zlib-devel -BuildRequires: swig perl-devel python2-devel +%global libname solv + +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with perl_bindings +%bcond_with ruby_bindings +%bcond_with python_bindings +%if %{with python_bindings} + %bcond_with python3 +%endif +%else +%bcond_without perl_bindings +%bcond_without ruby_bindings +%bcond_without python_bindings +%if %{with python_bindings} + %bcond_without python3 +%endif +%endif +%bcond_with debian_repo +%bcond_with arch_repo +%bcond_with helix_repo +# Creates special prefixed pseudo-packages from appdata metadata +%bcond_with appdata +# Creates special prefixed "group:", "category:" pseudo-packages +%bcond_without comps +# For rich dependencies +%bcond_without complex_deps +# For handling deb + rpm at the same time +%bcond_with multi_symantics + +%global _cmake_opts \\\ + -DFEDORA=1 \\\ + -DENABLE_RPMDB=ON \\\ + -DENABLE_RPMDB_BYRPMHEADER=ON \\\ + -DENABLE_RPMMD=ON \\\ + %{?with_comps:-DENABLE_COMPS=ON} \\\ + %{?with_appdata:-DENABLE_APPDATA=ON} \\\ + -DUSE_VENDORDIRS=ON \\\ + -DENABLE_LZMA_COMPRESSION=ON \\\ + -DENABLE_BZIP2_COMPRESSION=ON \\\ + %{?with_debian_repo:-DENABLE_DEBIAN=ON} \\\ + %{?with_arch_repo:-DENABLE_ARCHREPO=ON} \\\ + %{?with_helix_repo:-DENABLE_HELIXREPO=ON} \\\ + %{?with_multi_symantics:-DMULTI_SYMANTICS=ON} \\\ + %{?with_complex_deps:-DENABLE_COMPLEX_DEPS=1} \\\ + %{nil} + +Name: lib%{libname} +Version: 0.6.20 +Release: 5%{?dist} +Summary: Package dependency solver + +License: BSD +URL: https://github.com/openSUSE/libsolv +Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz + +# https://bugzilla.redhat.com/show_bug.cgi?id=1318662 +# https://github.com/openSUSE/libsolv/commit/599c58bed474c2a68109ff0649f1effa7ff02c45 +Patch0: 0001-Fix-order-of-solv_extend-arguments-in-repo_add_rpmmd.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1325471 +# https://github.com/openSUSE/libsolv/commit/b1014a431541444bcd39c6ec83c1ec935c7f0aae +Patch1: 0001-Fix-supplements-handling-when-implicitobsoleteusesco.patch + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(rpm) +BuildRequires: zlib-devel +BuildRequires: expat-devel +# -DFEDORA=1 +# -DENABLE_RPMDB=ON +BuildRequires: libdb-devel +# -DENABLE_LZMA_COMPRESSION=ON BuildRequires: xz-devel +# -DENABLE_BZIP2_COMPRESSION=ON +BuildRequires: bzip2-devel + %description A free package dependency solver using a satisfiability algorithm. The library is based on two major, but independent, blocks: @@ -29,220 +84,237 @@ library is based on two major, but independent, blocks: resolving package dependencies. %package devel -Summary: A new approach to package dependency solving -Group: Development/Libraries -Requires: libsolv-tools%{?_isa} = %{version}-%{release} -Requires: libsolv%{?_isa} = %{version}-%{release} -Requires: rpm-devel%{?_isa} -Requires: cmake +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: rpm-devel%{?_isa} %description devel -Development files for libsolv, +Development files for %{name}. %package tools -Summary: A new approach to package dependency solving -Group: Development/Libraries -Requires: gzip bzip2 coreutils -Requires: libsolv%{?_isa} = %{version}-%{release} +Summary: Package dependency solver tools +Requires: %{name}%{?_isa} = %{version}-%{release} +Obsoletes: %{name}-test < 0.6.11-2 +# repo2solv dependencies. All of those are used in shell-script. +Requires: /usr/bin/gzip +Requires: /usr/bin/bzip2 +Requires: /usr/bin/lzma +Requires: /usr/bin/xz +Requires: /usr/bin/cat +Requires: /usr/bin/find %description tools Package dependency solver tools. %package demo -Summary: Applications demoing the libsolv library -Group: Development/Libraries -Requires: curl gnupg2 +Summary: Applications demoing the %{name} library +Requires: %{name}%{?_isa} = %{version}-%{release} +# solv dependencies. Used as execlp() and system() +Requires: /usr/bin/curl +Requires: /usr/bin/gpg2 %description demo -Applications demoing the libsolv library. +Applications demoing the %{name} library. + +%if %{with perl_bindings} +%package -n perl-%{libname} +Summary: Perl bindings for the %{name} library +BuildRequires: swig +BuildRequires: perl-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n perl-%{libname} +Perl bindings for the %{name} library. +%endif + +%if %{with ruby_bindings} +%package -n ruby-%{libname} +Summary: Ruby bindings for the %{name} library +BuildRequires: swig +BuildRequires: ruby-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n ruby-%{libname} +Ruby bindings for the %{name} library. +%endif + +%if %{with python_bindings} +%package -n python2-%{libname} +Summary: Python bindings for the %{name} library +%{?python_provide:%python_provide python2-%{libname}} +BuildRequires: swig +BuildRequires: python2-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n python2-%{libname} +Python bindings for the %{name} library. + +Python 2 version. + +%if %{with python3} +%package -n python3-%{libname} +Summary: Python bindings for the %{name} library +%{?python_provide:%python_provide python3-%{libname}} +BuildRequires: swig +BuildRequires: python3-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n python3-%{libname} +Python bindings for the %{name} library. + +Python 3 version. +%endif +%endif -%package -n python-solv -Summary: Python bindings for the libsolv library -Group: Development/Languages -Requires: python +%prep +%autosetup -p1 +mkdir build build-py2 build-py3 -%description -n python-solv -Python bindings for sat solver. +%build +pushd build + %cmake %_cmake_opts ../ \ + %{?with_perl_bindings:-DENABLE_PERL=ON} \ + %{?with_ruby_bindings:-DENABLE_RUBY=ON} \ + %{nil} + %make_build +popd + +%if %{with python_bindings} +pushd build-py2 + %cmake %_cmake_opts ../ \ + -DENABLE_PYTHON=ON \ + -DPythonLibs_FIND_VERSION=2 \ + -DPythonLibs_FIND_VERSION_MAJOR=2 \ + %{nil} + make %{?_smp_mflags} bindings_python +popd + +%if %{with python3} +pushd build-py3 + %cmake %_cmake_opts ../ \ + -DENABLE_PYTHON=ON \ + -DPythonLibs_FIND_VERSION=3 \ + -DPythonLibs_FIND_VERSION_MAJOR=3 \ + %{nil} + make %{?_smp_mflags} bindings_python +popd +%endif +%endif -%prep -%setup -q -n libsolv +%install +pushd build + %make_install +popd -%check -make ARGS="-V" test +%if %{with python_bindings} +pushd build-py2 + %make_install +popd -%build -%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DENABLE_PYTHON=1 \ - -DUSE_VENDORDIRS=1 \ - -DFEDORA=1 \ - -DENABLE_DEBIAN=1 \ - -DENABLE_ARCHREPO=1 \ - -DENABLE_LZMA_COMPRESSION=1 \ - -DMULTI_SEMANTICS=1 +%if %{with python3} +pushd build-py3 + %make_install +popd +%endif +%endif -make %{?_smp_mflags} +mv %{buildroot}%{_bindir}/repo2solv.sh %{buildroot}%{_bindir}/repo2solv -%install -make DESTDIR=$RPM_BUILD_ROOT install -rm $RPM_BUILD_ROOT/usr/bin/testsolv +%check +pushd build + ctest -VV +popd %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files -%doc LICENSE* README BUGS -%_libdir/libsolv.so.* -%_libdir/libsolvext.so.* - -%files tools -%_bindir/archpkgs2solv -%_bindir/archrepo2solv -%_bindir/deb2solv -%_bindir/deltainfoxml2solv -%_bindir/dumpsolv -%_bindir/installcheck -%_bindir/mergesolv -%_bindir/repo2solv.sh -%_bindir/repomdxml2solv -%_bindir/rpmdb2solv -%_bindir/rpmmd2solv -%_bindir/rpms2solv -%_bindir/updateinfoxml2solv +%license LICENSE* +%doc README +%{_libdir}/%{name}.so.* +%{_libdir}/%{name}ext.so.* %files devel -%doc examples/solv.c -%_libdir/libsolv.so -%_libdir/libsolvext.so -%_includedir/solv -%_datadir/cmake/Modules/FindLibSolv.cmake -%{_mandir}/man?/* +%{_libdir}/%{name}.so +%{_libdir}/%{name}ext.so +%{_includedir}/%{libname}/ +%{_libdir}/pkgconfig/%{name}.pc +# Own directory because we don't want to depend on cmake +%dir %{_datadir}/cmake/Modules/ +%{_datadir}/cmake/Modules/FindLibSolv.cmake +%{_mandir}/man3/%{name}*.3* + +# Some small macro to list tools with mans +%global solv_tool() \ +%{_bindir}/%{1}\ +%{_mandir}/man1/%{1}.1* -%files demo -%_bindir/solv +%files tools +%solv_tool deltainfoxml2solv +%solv_tool dumpsolv +%solv_tool installcheck +%solv_tool mergesolv +%solv_tool repomdxml2solv +%solv_tool rpmdb2solv +%solv_tool rpmmd2solv +%solv_tool rpms2solv +%solv_tool testsolv +%solv_tool updateinfoxml2solv +%if %{with comps} + %solv_tool comps2solv +%endif +%if %{with appdata} + %solv_tool appdata2solv +%endif +%if %{with debian_repo} + %solv_tool deb2solv +%endif +%if %{with arch_repo} + %solv_tool archpkgs2solv + %solv_tool archrepo2solv +%endif +%if %{with helix_repo} + %solv_tool helix2solv +%endif +%{_bindir}/repo2solv -%files -n python-solv -%doc examples/pysolv -%{python_sitearch}/* +%files demo +%{_bindir}/solv + +%if %{with perl_bindings} +%files -n perl-%{libname} +%{perl_vendorarch}/%{libname}.pm +%{perl_vendorarch}/%{libname}.so +%endif + +%if %{with ruby_bindings} +%files -n ruby-%{libname} +%{ruby_vendorarchdir}/%{libname}.so +%endif + +%if %{with python_bindings} +%files -n python2-%{libname} +%{python2_sitearch}/_%{libname}.so +%{python2_sitearch}/%{libname}.py* + +%if %{with python3} +%files -n python3-%{libname} +%{python3_sitearch}/_%{libname}.so +%{python3_sitearch}/%{libname}.py +%{python3_sitearch}/__pycache__/%{libname}.* +%endif +%endif %changelog -* Mon May 18 2015 Colin Walters - 0.6.4-45.atomic.0 -- Drop unused patch - -* Mon May 18 2015 Colin Walters - 0.6.4-43.atomic.0 -- Increase RPM revision arbitrarily to be newer than an internal candidate build - to avoid hitting process issues. - -* Thu May 14 2015 Colin Walters -- Rebase to current EPEL7: http://pkgs.fedoraproject.org/cgit/libsolv.git/commit/?h=epel7&id=1b7c9c6efd2098cf6747b96f70b7472f1888ea9d - -* Fri Dec 19 2014 Colin Walters - 0.4.1-5.atomic.3gitbcedc98 -- Rebuild for 7.1 - -* Tue Jun 24 2014 Colin Walters -- Drop off ruby and perl bindings; nothing uses them - This was breaking repoclosure as perl-solv required a Python - module not in mainline RHEL7. - -* Mon Dec 16 2013 Aleš Kozumplík - 0.4.1-1.gitbcedc98 -- Rebase upstream bcedc98 -- Fix RhBug:1051917. - -* Mon Dec 16 2013 Aleš Kozumplík - 0.4.1-0.gita8e47f1 -- Rebase to 0.4.1, upstream commit a8e47f1. - -* Fri Nov 22 2013 Zdenek Pavlas - 0.4.0-2.git4442b7f -- Rebase to 0.4.0, upstream commit 4442b7f. -- support DELTA_LOCATION_BASE for completeness - -* Tue Oct 29 2013 Aleš Kozumplík - 0.4.0-1.gitd49d319 -- Rebase to 0.4.0, upstream commit d49d319. - -* Sat Aug 03 2013 Petr Pisar - 0.3.0-9.gita59d11d -- Perl 5.18 rebuild - -* Wed Jul 31 2013 Aleš Kozumplík - 0.3.0-8.gita59d11d -- Rebase to upstream a59d11d. - -* Fri Jul 19 2013 Aleš Kozumplík - 0.3.0-7.git228d412 -- Add build flags, including Deb, Arch, LZMA and MULTI_SEMANTICS. (RhBug:985905) - -* Wed Jul 17 2013 Petr Pisar - 0.3.0-6.git228d412 -- Perl 5.18 rebuild - -* Mon Jun 24 2013 Aleš Kozumplík - 0.3.0-5.git228d412 -- Rebase to upstream 228d412. -- Fixes hawkey github issue https://github.com/akozumpl/hawkey/issues/13 - -* Thu Jun 20 2013 Aleš Kozumplík - 0.3.0-4.git209e9cb -- Rebase to upstream 209e9cb. -- Package the new man pages. - -* Thu May 16 2013 Aleš Kozumplík - 0.3.0-3.git7399ad1 -- Run 'make test' with libsolv build. - -* Mon Apr 8 2013 Aleš Kozumplík - 0.3.0-2.git7399ad1 -- Rebase to upstream 7399ad1. -- Fixes RhBug:905209 - -* Mon Apr 8 2013 Aleš Kozumplík - 0.3.0-1.gite372b78 -- Rebase to upstream e372b78. -- Fixes RhBug:e372b78 - -* Thu Feb 14 2013 Fedora Release Engineering - 0.2.3-2.gitf663ca2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Thu Aug 23 2012 Aleš Kozumplík - 0.0.0-17.git6c9d3eb -- Rebase to upstream 6c9d3eb. -- Drop the solv.i stdbool.h fix integrated upstream. -- Dropped the job reasons fix. - -* Mon Jul 23 2012 Aleš Kozumplík - 0.0.0-16.git1617994 -- Fix build problems with Perl bindings. - -* Mon Jul 23 2012 Aleš Kozumplík - 0.0.0-15.git1617994 -- Rebuilt after a failed mass rebuild. - -* Thu Jul 19 2012 Fedora Release Engineering - 0.0.0-14.git1617994 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Mon Jul 16 2012 Aleš Kozumplik - 0.0.0-13.git1617994%{?dist} -- preliminary fix for JOB resons in solver_describe_decision(). - -* Sun Jul 1 2012 Aleš Kozumplik - 0.0.0-12.git1617994%{?dist} -- Rebase to upstream 1617994. -- Support for RPM_ADD_WITH_HDRID. - -* Thu Jun 7 2012 Aleš Kozumplik - 0.0.0-11.gitd39a42b%{?dist} -- Rebase to upstream d39a42b. -- Fix the epochs. -- Move the ruby modules into vendorarch dir, where they are expected. - -* Thu May 17 2012 Aleš Kozumplik - 0.0.0-9.git8cf7650%{?dist} -- Rebase to upstream 8cf7650. -- ruby bindings: fix USE_VENDORDIRS for Fedora. - -* Thu Apr 12 2012 Aleš Kozumplik - 0.0.0-7.gitaf1465a2%{?dist} -- Rebase to the upstream. -- Make repo_add_solv() work without stub repodata. - -* Thu Apr 5 2012 Karel Klíč - 0.0.0-6.git80afaf7%{?dist} -- Rebuild for the new libdb package. - -* Mon Apr 2 2012 Karel Klíč - 0.0.0-5.git80afaf7%{?dist} -- Rebuild for the new rpm package. - -* Wed Mar 21 2012 Aleš Kozumplík - 0.0.0-4.git80afaf7%{?dist} -- New upstream version, fix the .rpm release number. +* Tue Jul 12 2016 Igor Gnatenko - 0.6.20-5 +- Make obsoletes non-architecture dependent (RHBZ #1354479) -* Wed Mar 21 2012 Aleš Kozumplík - 0.0.0-3.git80afaf7%{?dist} -- New upstream version. +* Tue May 31 2016 Igor Gnatenko - 0.6.20-4 +- Properly obsolete -test subpkg -* Tue Feb 7 2012 Karel Klíč - 0.0.0-2.git857fe28%{?dist} -- Adapted to Ruby 1.9.3 (workaround for broken CMake in Fedora and - ruby template correction in bindings) +* Mon May 30 2016 Igor Gnatenko - 0.6.20-3 +- Rebase to 0.6.20 with 2 critical patches (RHBZ #1334401) -* Thu Feb 2 2012 Karel Klíč - 0.0.0-1.git857fe28 -- Initial packaging -- Based on Jindra Novy's spec file -- Based on upstream spec file +* Wed Jun 3 2015 Jan Silhan - 0.6.11-1 +- initial package for RHEL 7.2 without unnecessary bindings