From: Jakub Bogusz Date: Sun, 27 May 2018 17:06:24 +0000 (+0200) Subject: - new, hawkey continuation X-Git-Tag: auto/th/libdnf-0.11.1-1~1 X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=7a27efbba329b6690a5456c47022bc0856e32cbf;p=packages%2Flibdnf.git - new, hawkey continuation --- 7a27efbba329b6690a5456c47022bc0856e32cbf diff --git a/libdnf-rpm5.patch b/libdnf-rpm5.patch new file mode 100644 index 0000000..c8f32b0 --- /dev/null +++ b/libdnf-rpm5.patch @@ -0,0 +1,511 @@ +--- libdnf-0.11.1/CMakeLists.txt.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/CMakeLists.txt 2018-05-27 09:46:34.473778693 +0200 +@@ -30,6 +30,8 @@ + PKG_CHECK_MODULES(GLIB gio-unix-2.0>=2.46.0 REQUIRED) + FIND_LIBRARY (RPMDB_LIBRARY NAMES rpmdb) + find_package (LibSolv 0.6.21 REQUIRED COMPONENTS ext) ++PKG_CHECK_MODULES(RPM rpm REQUIRED) ++include_directories (${RPM_INCLUDE_DIRS}) + if (ENABLE_RHSM_SUPPORT) + pkg_check_modules (RHSM REQUIRED librhsm) + include_directories (${RHSM_INCLUDE_DIRS}) +@@ -56,13 +58,14 @@ + + # rpm: + FIND_LIBRARY (RPMDB_LIBRARY NAMES rpmdb) +-IF (NOT RPMDB_LIBRARY) +- FIND_LIBRARY (RPMDB_LIBRARY NAMES rpm) +-ENDIF (NOT RPMDB_LIBRARY) ++FIND_LIBRARY (RPMLIB_LIBRARY NAMES rpm) + FIND_LIBRARY (RPMIO_LIBRARY NAMES rpmio) + IF (RPMIO_LIBRARY) + SET(RPMDB_LIBRARY ${RPMIO_LIBRARY} ${RPMDB_LIBRARY}) + ENDIF (RPMIO_LIBRARY) ++IF (RPMLIB_LIBRARY) ++ SET(RPMDB_LIBRARY ${RPMDB_LIBRARY} ${RPMLIB_LIBRARY}) ++ENDIF (RPMLIB_LIBRARY) + + ADD_DEFINITIONS(-DTESTDATADIR=\\"${CMAKE_SOURCE_DIR}/data/tests\\") + ADD_DEFINITIONS(-DPACKAGE_VERSION=\\"${LIBDNF_VERSION}\\") +--- libdnf-0.11.1/libdnf/rpmorg-compat.h.orig 1970-01-01 01:00:00.000000000 +0100 ++++ libdnf-0.11.1/libdnf/rpmorg-compat.h 2018-05-27 11:32:14.263706303 +0200 +@@ -0,0 +1,64 @@ ++#ifndef RPMORG_COMPAT_H ++#define RPMORG_COMPAT_H ++ ++#include ++ ++#define _RPMVSF_NOSIGNATURES (RPMVSF_NODSAHEADER | RPMVSF_NORSAHEADER | RPMVSF_NODSA | RPMVSF_NORSA) ++#define _RPMVSF_NODIGESTS (RPMVSF_NOSHA1HEADER | RPMVSF_NOMD5HEADER | RPMVSF_NOSHA1 | RPMVSF_NOMD5) ++ ++static inline const char * headerGetString(Header h, int32_t tag) ++{ ++ const char *res = NULL; ++ struct rpmtd_s td; ++ ++ if (headerGet(h, tag, &td, HEADERGET_MINMEM)) { ++ if (rpmtdCount(&td) == 1) { ++ res = rpmtdGetString(&td); ++ } ++ rpmtdFreeData(&td); ++ } ++ return res; ++} ++ ++static inline uint64_t rpmtdGetNumber(rpmtd td) ++{ ++ uint64_t val = 0; ++ int ix; ++ assert(td != NULL); ++ ix = (td->ix >= 0 ? td->ix : 0); ++ ++ switch (td->type) { ++ case RPM_INT64_TYPE: ++ val = *((uint64_t *) td->data + ix); ++ break; ++ case RPM_INT32_TYPE: ++ val = *((uint32_t *) td->data + ix); ++ break; ++ case RPM_INT16_TYPE: ++ val = *((uint16_t *) td->data + ix); ++ break; ++ case RPM_INT8_TYPE: ++ case RPM_CHAR_TYPE: ++ val = *((uint8_t *) td->data + ix); ++ break; ++ default: ++ break; ++ } ++ return val; ++} ++ ++static inline uint64_t headerGetNumber(Header h, int32_t tag) ++{ ++ uint64_t res = 0; ++ struct rpmtd_s td; ++ ++ if (headerGet(h, tag, &td, HEADERGET_EXT)) { ++ if (rpmtdCount(&td) == 1) { ++ res = rpmtdGetNumber(&td); ++ } ++ rpmtdFreeData(&td); ++ } ++ return res; ++} ++ ++#endif /* RPMORG_COMPAT_H */ +--- libdnf-0.11.1/libdnf/dnf-context.c.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-context.c 2018-05-27 09:43:03.723781098 +0200 +@@ -32,7 +32,7 @@ + + + #include +-#include ++#include "rpmorg-compat.h" + #include + #include + #include +@@ -297,9 +297,9 @@ + return priv->base_arch; + + /* get info from RPM */ +- rpmGetOsInfo(&value, NULL); ++ value = rpmExpand("%{_target_os}", NULL); + priv->os_info = g_strdup(value); +- rpmGetArchInfo(&value, NULL); ++ value = rpmExpand("%{_target_cpu}", NULL); + priv->arch_info = g_strdup(value); + + /* find the base architecture */ +--- libdnf-0.11.1/libdnf/dnf-keyring.h.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-keyring.h 2018-05-27 11:14:47.623718253 +0200 +@@ -24,14 +24,14 @@ + + #include + +-#include ++#include + +-gboolean dnf_keyring_add_public_key (rpmKeyring keyring, ++gboolean dnf_keyring_add_public_key (const rpmts ts, + const gchar *filename, + GError **error); +-gboolean dnf_keyring_add_public_keys (rpmKeyring keyring, ++gboolean dnf_keyring_add_public_keys (rpmts ts, + GError **error); +-gboolean dnf_keyring_check_untrusted_file (rpmKeyring keyring, ++gboolean dnf_keyring_check_untrusted_file ( + const gchar *filename, + GError **error); + +--- libdnf-0.11.1/libdnf/dnf-keyring.c.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-keyring.c 2018-05-27 11:15:39.210384333 +0200 +@@ -32,7 +32,9 @@ + + #include + #include +-#include ++#include "rpmorg-compat.h" ++#include ++#include + #include + + #include "dnf-types.h" +@@ -52,7 +54,7 @@ + * Since: 0.1.0 + **/ + gboolean +-dnf_keyring_add_public_key(rpmKeyring keyring, ++dnf_keyring_add_public_key(const rpmts ts, + const gchar *filename, + GError **error) + { +@@ -60,10 +62,7 @@ + gint rc; + gsize len; + pgpArmor armor; +- pgpDig dig = NULL; +- rpmPubkey pubkey = NULL; + uint8_t *pkt = NULL; +- g_autofree gchar *data = NULL; + + /* ignore symlinks and directories */ + if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) +@@ -71,13 +70,8 @@ + if (g_file_test(filename, G_FILE_TEST_IS_SYMLINK)) + goto out; + +- /* get data */ +- ret = g_file_get_contents(filename, &data, &len, error); +- if (!ret) +- goto out; +- + /* rip off the ASCII armor and parse it */ +- armor = pgpParsePkts(data, &pkt, &len); ++ armor = pgpReadPkts(filename, &pkt, &len); + if (armor < 0) { + ret = FALSE; + g_set_error(error, +@@ -100,7 +94,7 @@ + } + + /* test each one */ +- pubkey = rpmPubkeyNew(pkt, len); ++/* pubkey = rpmPubkeyNew(pkt, len); + if (pubkey == NULL) { + ret = FALSE; + g_set_error(error, +@@ -109,19 +103,19 @@ + "failed to parse public key for %s", + filename); + goto out; +- } ++ } */ + + /* does the key exist in the keyring */ +- dig = rpmPubkeyDig(pubkey); ++/* dig = rpmPubkeyDig(pubkey); + rc = rpmKeyringLookup(keyring, dig); + if (rc == RPMRC_OK) { + ret = TRUE; + g_debug("%s is already present", filename); + goto out; +- } ++ } */ + + /* add to rpmdb automatically, without a prompt */ +- rc = rpmKeyringAddKey(keyring, pubkey); ++ rc = rpmcliImportPubkey(ts, pkt, len); + if (rc == 1) { + ret = TRUE; + g_debug("%s is already added", filename); +@@ -142,10 +136,10 @@ + out: + if (pkt != NULL) + free(pkt); /* yes, free() */ +- if (pubkey != NULL) ++/* if (pubkey != NULL) + rpmPubkeyFree(pubkey); + if (dig != NULL) +- pgpFreeDig(dig); ++ pgpFreeDig(dig); */ + return ret; + } + +@@ -161,7 +155,7 @@ + * Since: 0.1.0 + **/ + gboolean +-dnf_keyring_add_public_keys(rpmKeyring keyring, GError **error) ++dnf_keyring_add_public_keys(rpmts ts, GError **error) + { + const gchar *gpg_dir = "/etc/pki/rpm-gpg"; + gboolean ret = TRUE; +@@ -178,7 +172,7 @@ + if (filename == NULL) + break; + path_tmp = g_build_filename(gpg_dir, filename, NULL); +- ret = dnf_keyring_add_public_key(keyring, path_tmp, error); ++ ret = dnf_keyring_add_public_key(ts, path_tmp, error); + } while (ret); + return TRUE; + } +@@ -187,7 +181,7 @@ + * dnf_keyring_check_untrusted_file: + */ + gboolean +-dnf_keyring_check_untrusted_file(rpmKeyring keyring, ++dnf_keyring_check_untrusted_file( + const gchar *filename, + GError **error) + { +@@ -237,10 +231,10 @@ + } + + /* convert and upscale */ +- headerConvert(hdr, HEADERCONV_RETROFIT_V3); ++/* headerConvert(hdr, HEADERCONV_RETROFIT_V3); */ + + /* get RSA key */ +- td = rpmtdNew(); ++ td = malloc (sizeof (*td)); + rc = headerGet(hdr, + RPMTAG_RSAHEADER, + td, +@@ -265,7 +259,7 @@ + } + + /* make it into a digest */ +- dig = pgpNewDig(); ++ dig = rpmtsDig(ts); + rc = pgpPrtPkts(td->data, td->count, dig, 0); + if (rc != 0) { + g_set_error(error, +@@ -277,7 +271,7 @@ + } + + /* does the key exist in the keyring */ +- rc = rpmKeyringLookup(keyring, dig); ++ rc = rpmtsFindPubkey(ts, dig); + if (rc != RPMRC_OK) { + g_set_error(error, + DNF_ERROR, +@@ -292,15 +286,15 @@ + ret = TRUE; + out: + if (dig != NULL) +- pgpFreeDig(dig); ++ dig = pgpDigFree(dig); + if (td != NULL) { + rpmtdFreeData(td); +- rpmtdFree(td); ++ free(td); + } + if (ts != NULL) +- rpmtsFree(ts); ++ ts = rpmtsFree(ts); + if (hdr != NULL) +- headerFree(hdr); ++ hdr = headerFree(hdr); + if (fd != NULL) + Fclose(fd); + return ret; +--- libdnf-0.11.1/libdnf/dnf-rpmts.c.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-rpmts.c 2018-05-27 11:19:52.157048112 +0200 +@@ -32,7 +32,8 @@ + + + #include +-#include ++#define _RPMLOG_INTERNAL ++#include + #include + #include + +@@ -155,7 +156,7 @@ + } + out: + Fclose(fd); +- headerFree(hdr); ++ hdr = headerFree(hdr); + return ret; + } + +@@ -231,10 +232,17 @@ + diskspace, + generic_str); + break; +- case RPMPROB_OBSOLETES: +- str = g_strdup_printf("package %s is obsoleted by %s", +- pkg_nevr, +- pkg_nevr_alt); ++ case RPMPROB_RDONLY: ++ str = g_strdup_printf ("tried to install package on read-only filesystem"); ++ break; ++ case RPMPROB_BADPRETRANS: ++ str = g_strdup_printf ("bad %%pretrans?"); // unimplemented acc. to rpmps.h ++ break; ++ case RPMPROB_BADPLATFORM: ++ str = g_strdup_printf ("package %s is for a different platform", pkg_nevr); ++ break; ++ case RPMPROB_NOREPACKAGE: ++ str = g_strdup_printf ("re-packaged package %s is missing", pkg_nevr); + break; + } + return str; +@@ -297,7 +305,7 @@ + DNF_ERROR_INTERNAL_ERROR, + "Error running transaction and no problems were reported!"); + out: +- rpmpsFree(probs); ++ probs = rpmpsFree(probs); + return ret; + } + +@@ -310,11 +318,11 @@ + GString **string =(GString **) data; + + /* only log errors */ +- if (rpmlogRecPriority(rec) != RPMLOG_ERR) ++ if (rec->pri != RPMLOG_ERR) + return RPMLOG_DEFAULT; + + /* do not log internal BDB errors */ +- if (g_strstr_len(rpmlogRecMessage(rec), -1, "BDB") != NULL) ++ if (g_strstr_len(rec->message, -1, "BDB") != NULL) + return 0; + + /* create string if required */ +@@ -324,7 +332,7 @@ + /* if text already exists, join them */ + if ((*string)->len > 0) + g_string_append(*string, ": "); +- g_string_append(*string, rpmlogRecMessage(rec)); ++ g_string_append(*string, rec->message); + + /* remove the trailing /n which rpm does */ + if ((*string)->len > 0) +@@ -373,7 +381,7 @@ + } + + /* success */ +- headerLink(hdr); ++ hdr = headerLink(hdr); + out: + rpmlogSetCallback(NULL, NULL); + if (iter != NULL) +@@ -419,6 +427,6 @@ + } + out: + if (hdr != NULL) +- headerFree(hdr); ++ hdr = headerFree(hdr); + return ret; + } +--- libdnf-0.11.1/libdnf/dnf-repo.c.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-repo.c 2018-05-27 11:21:27.687047021 +0200 +@@ -1501,15 +1501,12 @@ + GError **error) + { + gboolean ret; +- rpmKeyring keyring; + rpmts ts; + + /* then import to rpmdb */ + ts = rpmtsCreate(); +- keyring = rpmtsGetKeyring(ts, 1); +- ret = dnf_keyring_add_public_key(keyring, tmp_path, error); +- rpmKeyringFree(keyring); +- rpmtsFree(ts); ++ ret = dnf_keyring_add_public_key(ts, tmp_path, error); ++ ts = rpmtsFree(ts); + return ret; + } + +--- libdnf-0.11.1/libdnf/dnf-transaction.c.orig 2017-10-16 09:00:54.000000000 +0200 ++++ libdnf-0.11.1/libdnf/dnf-transaction.c 2018-05-27 11:31:42.767039995 +0200 +@@ -29,7 +29,7 @@ + */ + + +-#include ++#include "rpmorg-compat.h" + #include + #include + +@@ -54,7 +54,6 @@ + typedef struct + { + DnfDb *db; +- rpmKeyring keyring; + rpmts ts; + DnfContext *context; /* weak reference */ + GPtrArray *repos; +@@ -89,7 +88,6 @@ + + g_ptr_array_unref(priv->pkgs_to_download); + g_timer_destroy(priv->timer); +- rpmKeyringFree(priv->keyring); + rpmtsFree(priv->ts); + + if (priv->db != NULL) +@@ -354,7 +352,7 @@ + } + + /* check file */ +- if (!dnf_keyring_check_untrusted_file(priv->keyring, fn, &error_local)) { ++ if (!dnf_keyring_check_untrusted_file(fn, &error_local)) { + + /* probably an i/o error */ + if (!g_error_matches(error_local, +@@ -721,7 +719,6 @@ + /* don't do anything */ + break; + +- case RPMCALLBACK_INST_STOP: + case RPMCALLBACK_UNINST_STOP: + + /* phase complete */ +@@ -1195,7 +1192,7 @@ + + DnfTransactionPrivate *priv = GET_PRIVATE(transaction); + /* import all system wide GPG keys */ +- if (!dnf_keyring_add_public_keys(priv->keyring, error)) ++ if (!dnf_keyring_add_public_keys(priv->ts, error)) + return FALSE; + + /* import downloaded repo GPG keys */ +@@ -1208,7 +1205,7 @@ + const char *pubkey = *iter; + if (g_file_test(pubkey, G_FILE_TEST_EXISTS)) { + /* import */ +- if (!dnf_keyring_add_public_key(priv->keyring, pubkey, error)) ++ if (!dnf_keyring_add_public_key(priv->ts, pubkey, error)) + return FALSE; + } + } +@@ -1307,15 +1304,7 @@ + + /* setup the transaction */ + tmp = dnf_context_get_install_root(priv->context); +- rc = rpmtsSetRootDir(priv->ts, tmp); +- if (rc < 0) { +- ret = FALSE; +- g_set_error_literal(error, +- DNF_ERROR, +- DNF_ERROR_INTERNAL_ERROR, +- "failed to set root"); +- goto out; +- } ++ rpmtsSetRootDir(priv->ts, tmp); + rpmtsSetNotifyCallback(priv->ts, + dnf_transaction_ts_progress_cb, + transaction); +@@ -1602,7 +1591,6 @@ + g_object_add_weak_pointer(G_OBJECT(priv->context),(void **) &priv->context); + priv->ts = rpmtsCreate(); + rpmtsSetRootDir(priv->ts, dnf_context_get_install_root(context)); +- priv->keyring = rpmtsGetKeyring(priv->ts, 1); + priv->db = dnf_db_new(context); + /* propagate db enablement */ + dnf_db_set_enabled(priv->db, dnf_context_get_yumdb_enabled(context)); diff --git a/libdnf.spec b/libdnf.spec new file mode 100644 index 0000000..3fb3390 --- /dev/null +++ b/libdnf.spec @@ -0,0 +1,220 @@ +# +# Conditional build: +%bcond_without apidocs # do not build and package API docs +%bcond_without python3 # CPython 3.x module +%bcond_with rhsm # Red Had Subscription Management support +# +Summary: Library providing simplified C and Python API to libsolv +Summary(pl.UTF-8): Biblioteka zapewniająca uproszczone API C i Pythona do libsolv +Name: libdnf +Version: 0.11.1 +Release: 1 +License: LGPL v2.1+ +Group: Libraries +#Source0Download: https://github.com/rpm-software-management/libdnf/releases +Source0: https://github.com/rpm-software-management/libdnf/archive/%{version}/%{name}-%{version}.tar.gz +# Source0-md5: d62c97d5534394c365fe77978ce9cdd5 +Patch0: %{name}-rpm5.patch +URL: https://github.com/rpm-software-management/libdnf +BuildRequires: check-devel +BuildRequires: cmake >= 2.4 +BuildRequires: glib2-devel >= 1:2.46.0 +BuildRequires: gobject-introspection-devel +BuildRequires: gtk-doc +BuildRequires: librepo-devel +%{?with_rhsm:BuildRequires: librhsm-devel} +BuildRequires: libsolv-devel >= 0.6.21 +BuildRequires: pkgconfig +BuildRequires: rpm-devel >= 5 +BuildRequires: rpm-pythonprov +BuildRequires: rpmbuild(macros) >= 1.714 +BuildRequires: sphinx-pdg +BuildRequires: valgrind +Requires: glib2 >= 1:2.46.0 +Requires: libsolv >= 0.6.21 +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +# hawkey(3) man page shared between python-hawkey and python3-hawkey +%define _duplicate_files_terminate_build 0 + +%description +Library providing simplified C and Python API to libsolv. + +%description -l pl.UTF-8 +Biblioteka zapewniająca uproszczone API C i Pythona do libsolv. + +%package devel +Summary: Header files for libdnf library +Summary(pl.UTF-8): Pliki nagłówkowe biblioteki libdnf +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: glib2-devel >= 1:2.46.0 +Requires: librepo-devel +Requires: libsolv-devel >= 0.6.21 +Requires: rpm-devel >= 5 + +%description devel +Header files for libdnf library. + +%description devel -l pl.UTF-8 +Pliki nagłówkowe biblioteki libdnf. + +%package apidocs +Summary: API documentation for libdnf library +Summary(pl.UTF-8): Dokumentacja API biblioteki libdnf +Group: Documentation +%if "%{_rpmversion}" >= "5" +BuildArch: noarch +%endif + +%description apidocs +API documentation for libdnf library. + +%description apidocs -l pl.UTF-8 +Dokumentacja API biblioteki libdnf. + +%package -n python-hawkey +Summary: Python 2.x bindings for hawkey library +Summary(pl.UTF-8): Wiązania Pythona 2.x do biblioteki hawkey +Group: Libraries/Python +Requires: %{name} = %{version}-%{release} + +%description -n python-hawkey +Python 2.x bindings for hawkey library. + +%description -n python-hawkey -l pl.UTF-8 +Wiązania Pythona 2.x do biblioteki hawkey. + +%package -n python-hawkey-test +Summary: Test module for hawkey library +Summary(pl.UTF-8): Moduł testowy dla biblioteki hawkey +Group: Development/Libraries +Requires: python-hawkey = %{version}-%{release} + +%description -n python-hawkey-test +Test module for hawkey library. + +%description -n python-hawkey-test -l pl.UTF-8 +Moduł testowy dla biblioteki hawkey. + +%package -n python3-hawkey +Summary: Python 3.x bindings for hawkey library +Summary(pl.UTF-8): Wiązania Pythona 3.x do biblioteki hawkey +Group: Libraries/Python +Requires: %{name} = %{version}-%{release} + +%description -n python3-hawkey +Python 3.x bindings for hawkey library. + +%description -n python3-hawkey -l pl.UTF-8 +Wiązania Pythona 3.x do biblioteki hawkey. + +%package -n python3-hawkey-test +Summary: Test module for hawkey library +Summary(pl.UTF-8): Moduł testowy dla biblioteki hawkey +Group: Development/Libraries +Requires: python3-hawkey = %{version}-%{release} + +%description -n python3-hawkey-test +Test module for hawkey library. + +%description -n python3-hawkey-test -l pl.UTF-8 +Moduł testowy dla biblioteki hawkey. + +%prep +%setup -q +%patch0 -p1 + +%build +install -d build %{?with_python3:build-py3} +cd build +%cmake .. \ + %{?with_rhsm:-DENABLE_RHSM_SUPPORT=ON} + +%{__make} +%{__make} doc-html + +%if %{with python3} +cd ../build-py3 +%cmake .. \ + %{?with_rhsm:-DENABLE_RHSM_SUPPORT=ON} \ + -DPYTHON_DESIRED=3 + +%{__make} +%endif + +%install +rm -rf $RPM_BUILD_ROOT + +%if %{with python3} +%{__make} -C build-py3 install \ + DESTDIR=$RPM_BUILD_ROOT + +%py3_comp $RPM_BUILD_ROOT%{py3_sitedir}/hawkey +%py3_ocomp $RPM_BUILD_ROOT%{py3_sitedir}/hawkey +%endif + +%{__make} -C build install \ + DESTDIR=$RPM_BUILD_ROOT + +%py_comp $RPM_BUILD_ROOT%{py_sitedir}/hawkey +%py_ocomp $RPM_BUILD_ROOT%{py_sitedir}/hawkey +%py_postclean + +install -d $RPM_BUILD_ROOT%{_gtkdocdir} +%{__mv} $RPM_BUILD_ROOT%{_datadir}/gtk-doc/html/* $RPM_BUILD_ROOT%{_gtkdocdir} + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%defattr(644,root,root,755) +%doc AUTHORS MAINTAINERS NEWS README.md docs/release_notes.rst +%attr(755,root,root) %{_libdir}/libdnf.so.1 +%{_libdir}/girepository-1.0/Dnf-1.0.typelib + +%files devel +%defattr(644,root,root,755) +%attr(755,root,root) %{_libdir}/libdnf.so +%{_includedir}/libdnf +%{_datadir}/gir-1.0/Dnf-1.0.gir +%{_pkgconfigdir}/libdnf.pc + +%if %{with apidocs} +%files apidocs +%defattr(644,root,root,755) +%{_gtkdocdir}/libdnf +%endif + +%files -n python-hawkey +%defattr(644,root,root,755) +%dir %{py_sitedir}/hawkey +%attr(755,root,root) %{py_sitedir}/hawkey/_hawkeymodule.so +%{py_sitedir}/hawkey/__init__.py[co] +%{_mandir}/man3/hawkey.3* + +%files -n python-hawkey-test +%defattr(644,root,root,755) +%dir %{py_sitedir}/hawkey/test +%{py_sitedir}/hawkey/test/*.py[co] +%attr(755,root,root) %{py_sitedir}/hawkey/test/_hawkey_testmodule.so + +%if %{with python3} +%files -n python3-hawkey +%defattr(644,root,root,755) +%dir %{py3_sitedir}/hawkey +%attr(755,root,root) %{py3_sitedir}/hawkey/_hawkey.so +%{py3_sitedir}/hawkey/*.py +%{py3_sitedir}/hawkey/__pycache__ +%{_mandir}/man3/hawkey.3* + +%files -n python3-hawkey-test +%defattr(644,root,root,755) +%dir %{py3_sitedir}/hawkey/test +%{py3_sitedir}/hawkey/test/*.py +%{py3_sitedir}/hawkey/test/__pycache__ +%attr(755,root,root) %{py3_sitedir}/hawkey/test/_hawkey_test.so +%endif