From eb85e3be7bcf6a1ad088e6edb9f7460060a8a406 Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Wed, 4 Dec 2013 19:38:40 +0100 Subject: [PATCH] - new; ported to rpm5, but tests fail --- createrepo_c-rpm5.patch | 152 ++++++++++++++++++++++++++++++++ createrepo_c.spec | 189 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 341 insertions(+) create mode 100644 createrepo_c-rpm5.patch create mode 100644 createrepo_c.spec diff --git a/createrepo_c-rpm5.patch b/createrepo_c-rpm5.patch new file mode 100644 index 0000000..16a3f94 --- /dev/null +++ b/createrepo_c-rpm5.patch @@ -0,0 +1,152 @@ +--- createrepo_c/src/misc.c.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/src/misc.c 2013-12-01 16:18:48.713931227 +0100 +@@ -30,7 +30,7 @@ + #include + #include + #include +-#include ++#include + #include "error.h" + #include "misc.h" + +--- createrepo_c/CMakeLists.txt.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/CMakeLists.txt 2013-12-01 16:21:27.510591230 +0100 +@@ -39,7 +39,7 @@ + + include_directories(${GLIB2_INCLUDE_DIRS}) + include_directories(${LIBXML2_INCLUDE_DIR}) +- ++include_directories("/usr/include/rpm") + + # rpm: + +--- createrepo_c/src/parsehdr.h.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/src/parsehdr.h 2013-12-01 16:55:23.000505810 +0100 +@@ -24,7 +24,7 @@ + extern "C" { + #endif + +-#include ++#include + #include + #include "package.h" + #include "xml_dump.h" +--- createrepo_c/src/parsehdr.c.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/src/parsehdr.c 2013-12-01 16:33:26.753894379 +0100 +@@ -19,6 +19,7 @@ + + #include + #include ++#include + #include + #include + #include "parsehdr.h" +@@ -26,6 +27,76 @@ + #include "misc.h" + + ++static inline void* rpmtdNew(void) ++{ ++ return malloc(sizeof(struct rpmtd_s)); ++} ++ ++static inline void rpmtdFree(rpmtd td) ++{ ++ return free(td); ++} ++ ++static inline void rpmtdInit(rpmtd td) ++{ ++ rpmtdReset(td); ++} ++ ++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; ++} ++ + static inline int + cr_compare_dependency(const char *dep1, const char *dep2) + { +--- createrepo_c/src/parsepkg.c.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/src/parsepkg.c 2013-12-01 16:52:24.660513293 +0100 +@@ -26,14 +26,17 @@ + #include + #include + #include +-#include + #include +-#include ++#include ++#include + #include "error.h" + #include "parsehdr.h" + #include "misc.h" + #include "checksum.h" + ++#define _RPMVSF_NOSIGNATURES (RPMVSF_NODSAHEADER | RPMVSF_NORSAHEADER | RPMVSF_NODSA | RPMVSF_NORSA) ++#define _RPMVSF_NODIGESTS (RPMVSF_NOSHA1HEADER | RPMVSF_NOMD5HEADER | RPMVSF_NOSHA1 | RPMVSF_NOMD5) ++ + volatile short cr_initialized = 0; + rpmts cr_ts = NULL; + +--- createrepo_c/src/CMakeLists.txt.orig 2013-12-01 15:00:42.000000000 +0100 ++++ createrepo_c/src/CMakeLists.txt 2013-12-01 16:53:42.373843363 +0100 +@@ -55,6 +55,7 @@ + TARGET_LINK_LIBRARIES(libcreaterepo_c ${LZMA_LIBRARIES}) + TARGET_LINK_LIBRARIES(libcreaterepo_c ${OPENSSL_LIBRARIES}) + TARGET_LINK_LIBRARIES(libcreaterepo_c ${RPMDB_LIBRARY}) ++TARGET_LINK_LIBRARIES(libcreaterepo_c rpm) + TARGET_LINK_LIBRARIES(libcreaterepo_c ${SQLITE3_LIBRARIES}) + TARGET_LINK_LIBRARIES(libcreaterepo_c ${ZLIB_LIBRARY}) + diff --git a/createrepo_c.spec b/createrepo_c.spec new file mode 100644 index 0000000..ab50e8e --- /dev/null +++ b/createrepo_c.spec @@ -0,0 +1,189 @@ +# TODO: tests fail (rpm.org vs rpm5 compat problems?) +# +# Conditional build: +%bcond_without tests # make tests +# +Summary: Creates a common metadata repository +Summary(pl.UTF-8): Tworzenie wspólnego repozytorium metadanych +Name: createrepo_c +Version: 0.2.1 +%define snap 20131129 +Release: 0.%{snap}.1 +License: GPL v2+ +Group: Applications/System +# git clone https://github.com/Tojaj/createrepo_c +Source0: createrepo_c.tar.xz +# Source0-md5: afc0dabd7f75f2ad2d34a07966ee87ce +Patch0: %{name}-rpm5.patch +URL: https://github.com/Tojaj/createrepo_c +BuildRequires: bzip2-devel +BuildRequires: check-devel +BuildRequires: cmake >= 2.6 +BuildRequires: curl-devel +BuildRequires: doxygen +BuildRequires: expat-devel +BuildRequires: glib2-devel >= 1:2.22.0 +BuildRequires: libmagic-devel +BuildRequires: libxml2-devel >= 2 +BuildRequires: openssl-devel +BuildRequires: python-devel >= 2 +%{?with_tests:BuildRequires: python-nose} +BuildRequires: rpm-devel >= 5 +BuildRequires: rpm-pythonprov +BuildRequires: rpmbuild(macros) >= 1.219 +BuildRequires: sqlite3-devel >= 3 +BuildRequires: tar >= 1:1.22 +BuildRequires: xz +BuildRequires: xz-devel +BuildRequires: zlib-devel +Requires: %{name}-libs = %{version}-%{release} +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description +C implementation of Createrepo. This utility will generate a common +metadata repository from a directory of RPM packages. + +%description -l pl.UTF-8 +Implementacja w C programu Createrepo. To narzędzie generuje wspólne +repozytorium metadanych z katalogu pakietów RPM. + +%package libs +Summary: Library for repodata manipulation +Summary(pl.UTF-8): Biblioteka do operacji na danych repozytorium +Group: Libraries +Requires: glib2 >= 1:2.22.0 + +%description libs +This package contains the createrepo_c library for applications to +easy manipulate with a repodata. + +%description libs -l pl.UTF-8 +Ten pakiet zawiera bibliotekę createrepo_c, pozwalającą aplikacjom na +łatwe operowanie na danych repozytorium (repodata). + +%package devel +Summary: Header files for createrepo_c library +Summary(pl.UTF-8): Pliki nagłówkowe biblioteki createrepo_c +Group: Development/Libraries +Requires: %{name}-libs = %{version}-%{release} +Requires: bzip2-devel +Requires: curl-devel +Requires: expat-devel +Requires: glib2-devel >= 1:2.22.0 +Requires: libmagic-devel +Requires: libxml2-devel >= 2 +Requires: rpm-devel >= 5 +Requires: sqlite3-devel >= 3 +Requires: xz-devel +Requires: zlib-devel + +%description devel +This package contains the createrepo_c C header files. These +development files are for easy manipulation with a repodata. + +%description devel -l pl.UTF-8 +Ten pakiet zawiera pliki nagłówkowe C biblioteki createrepo_c. Mają +na celu łatwe operowanie na danych repozytorium (repodata). + +%package apidocs +Summary: API documentation for createrepo_c library +Summary(pl.UTF-8): Dokumentacja API biblioteki createrepo_c +Group: Documentation + +%description apidocs +API documentation for createrepo_c library. + +%description apidocs -l pl.UTF-8 +Dokumentacja API biblioteki createrepo_c. + +%package -n python-createrepo_c +Summary: Python bindings for the createrepo_c library +Summary(pl.UTF-8): Wiązania Pythona do biblioteki createrepo_c +Group: Development/Languages/Python +Requires: %{name}-libs = %{version}-%{release} + +%description -n python-createrepo_c +Python bindings for the createrepo_c library. + +%description -n python-createrepo_c -l pl.UTF-8 +Wiązania Pythona do biblioteki createrepo_c. + +%package -n bash-completion-createrepo_c +Summary: Bash completion for createrepo_c commands +Summary(pl.UTF-8): Bashowe uzupełnianie dla poleceń createrepo_c +Group: Applications/Shells +Requires: %{name} = %{version}-%{release} +Requires: bash-completion + +%description -n bash-completion-createrepo_c +Bash completion for createrepo_c commands (createrepo_c, mergerepo_c, +modifyrepo_c). + +%description -n bash-completion-createrepo_c -l pl.UTF-8 +Bashowe uzupełnianie dla poleceń createrepo_c (createrepo_c, +mergerepo_c, modifyrepo_c). + +%prep +%setup -q -n %{name} +%patch0 -p1 + +%build +%cmake . +%{__make} +%{__make} doc + +%if %{with tests} +%{__make} tests +%{__make} test \ + ARGS="-V" +%endif + +%install +rm -rf $RPM_BUILD_ROOT + +%{__make} install \ + DESTDIR=$RPM_BUILD_ROOT + +%py_comp $RPM_BUILD_ROOT%{py_sitedir}/createrepo_c +%py_ocomp $RPM_BUILD_ROOT%{py_sitedir}/createrepo_c +%py_postclean + +%clean +rm -rf $RPM_BUILD_ROOT + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%files +%defattr(644,root,root,755) +%attr(755,root,root) %{_bindir}/createrepo_c +%attr(755,root,root) %{_bindir}/mergerepo_c +%attr(755,root,root) %{_bindir}/modifyrepo_c +%{_mandir}/man8/createrepo_c.8* +%{_mandir}/man8/mergerepo_c.8* + +%files libs +%defattr(644,root,root,755) +%doc AUTHORS README.md +%attr(755,root,root) %{_libdir}/libcreaterepo_c.so.*.*.* +%attr(755,root,root) %ghost %{_libdir}/libcreaterepo_c.so.0 + +%files devel +%defattr(644,root,root,755) +%attr(755,root,root) %{_libdir}/libcreaterepo_c.so +%{_pkgconfigdir}/createrepo_c.pc +%{_includedir}/createrepo_c + +%files apidocs +%defattr(644,root,root,755) +%doc doc/html + +%files -n python-createrepo_c +%defattr(644,root,root,755) +%dir %{py_sitedir}/createrepo_c +%attr(755,root,root) %{py_sitedir}/createrepo_c/_createrepo_cmodule.so +%{py_sitedir}/createrepo_c/__init__.py[co] + +%files -n bash-completion-createrepo_c +%defattr(644,root,root,755) +/etc/bash_completion.d/createrepo_c.bash -- 2.44.0