fix build error with Ubuntu22.04 42/283842/19 sandbox/wangbiao/py3_version
authorbiao716.wang <biao716.wang@samsung.com>
Fri, 4 Nov 2022 01:22:37 +0000 (10:22 +0900)
committerbiao716.wang <biao716.wang@samsung.com>
Fri, 3 Mar 2023 07:36:46 +0000 (16:36 +0900)
Python bindings:  The initialization function must be named PyInit_name(),
 where name is the name of the module, and should be the only non-static item defined in the module file
https://github.com/rpm-software-management/rpm/commit/0073376965ee8d8df63c21b0da634fc315c97d0b
related bug: https://bugzilla.redhat.com/show_bug.cgi?id=1064758

Add more patch:
https://github.com/rpm-software-management/rpm/commit/f3801bccb9eb068a747ca63a4b01518a260d9919
https://github.com/rpm-software-management/rpm/commit/ddc7ff28e14064f57c6917e133a95e73f749cf41
https://github.com/rpm-software-management/rpm/commit/2c6e0366ffc6bdbafbdf82df7fcedd975a361465
https://github.com/rpm-software-management/rpm/commit/71527b6fbd2b3898beabd602c462a01b691d67d8

Change-Id: I1421de99d3931f11861d476aa30710c828144193
Signed-off-by: biao716.wang <biao716.wang@samsung.com>
15 files changed:
build/files.c
configure.ac
debian/control
debian/librpm-tizen.install
debian/rules
misc/Makefile.am
misc/fts.c
misc/rpmfts.h [moved from misc/fts.h with 94% similarity]
python/Makefile.am
python/rpmbmodule.c
python/rpmfd-py.c
python/rpmii-py.c
python/rpmmi-py.c
python/rpmsmodule.c
python/rpmsystem-py.h

index 63cac8b..71d1272 100644 (file)
@@ -26,7 +26,7 @@
 #endif
 
 #include "rpmio/rpmio_internal.h"      /* XXX rpmioSlurp */
-#include "misc/fts.h"
+#include "misc/rpmfts.h"
 #include "lib/cpio.h"
 #include "lib/rpmfi_internal.h"        /* XXX fi->apath */
 #include "lib/rpmug.h"
index 89c54e4..a47b319 100644 (file)
@@ -540,7 +540,7 @@ esac],
 [enable_python=no])
 
 AS_IF([test "$enable_python" = yes],[
-  AM_PATH_PYTHON([2.6],[
+  AM_PATH_PYTHON([3.2],[
     WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
     WITH_PYTHON_SUBPACKAGE=1
     save_CPPFLAGS="$CPPFLAGS"
index a3a31bc..5aac236 100644 (file)
@@ -2,6 +2,7 @@ Source: librpm-tizen
 Section: vcs
 Priority: optional
 Build-Depends: debhelper,
+               dh-python,
                dpkg-dev,
                dh-autoreconf,
                libtool,
@@ -14,7 +15,8 @@ Build-Depends: debhelper,
                libxml2-dev,
                libreadline-dev,
                libsqlite3-dev,
-               python-all-dev,
+               python3-all-dev,
+               python3,
                pkg-config,
                libnspr4-dev,
                libnss3-dev,
@@ -27,11 +29,11 @@ Build-Depends: debhelper,
 Maintainer: Markus Lehtonen <markus.lehtonen@linux.intel.com>
 Standards-Version: 3.9.3
 Homepage: http://rpm.org/
-X-Python-Version: >= 2.6
+X-Python-Version: >= 3
 
 Package: librpm-tizen
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}
 Description:  The RPM libraries for git-buildpackage
  RPM Package Manager is the main tool for managing the software packages
  of Tizen.
index 78f09f7..84594ba 100644 (file)
@@ -1,4 +1,4 @@
 usr/lib*/*/*.so.*
 usr/lib*/*/rpm/*
-usr/lib/python*/dist-packages/*/*.so
-usr/lib/python*/dist-packages/*/*.py*
+usr/lib/python*/*packages/*/*.so
+usr/lib/python*/*packages/*/*.py*
index 5949630..c396cb4 100755 (executable)
@@ -5,8 +5,7 @@ python_mod_name := rpm_tizen
 CPPFLAGS += $(shell pkg-config --cflags nss)
 
 %:
-       dh $@ --with python2,autoreconf,autotools_dev
-
+       dh $@ --with python3,autoreconf,autotools_dev
 override_dh_auto_configure:
        dh_auto_configure -- --disable-dependency-tracking \
                        --libdir=/usr/lib/librpm-tizen \
@@ -28,6 +27,3 @@ override_dh_auto_install:
        install -d debian/tmp/usr/lib/librpm-tizen/rpm/tizen
        ln -s ../tizen_macros debian/tmp/usr/lib/librpm-tizen/rpm/tizen/macros
 
-override_dh_python2:
-       dh_python2 --no-guessing-versions
-
index 4fdde95..e413a21 100644 (file)
@@ -9,5 +9,5 @@ EXTRA_DIST = \
 
 noinst_LTLIBRARIES = libmisc.la
 
-libmisc_la_SOURCES = fts.c fts.h
+libmisc_la_SOURCES = fts.c rpmfts.h
 libmisc_la_LIBADD = @LTLIBOBJS@
index 9fbefe3..39f059d 100644 (file)
 static char sccsid[] = "@(#)fts.c      8.6 (Berkeley) 8/14/94";
 #endif /* LIBC_SCCS and not lint */
 
+/* Conditional to set up proper fstat64 implementation */
+#if defined(hpux) || defined(sun)
+#   define FTS_FSTAT64(_fd, _sbp)   fstat((_fd), (_sbp))
+#else
+#   define FTS_FSTAT64(_fd, _sbp)   fstat64((_fd), (_sbp))
+#endif
+
 #if defined(_LIBC)
 #include <sys/param.h>
 #include <include/sys/stat.h>
 #include <fcntl.h>
 #include <dirent.h>
 #include <errno.h>
-#include "misc/fts.h"
+#include "misc/rpmfts.h"
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #else
+
+/* Conditionals for working around non-GNU environments */
 #if defined(hpux)
-# define        _INCLUDE_POSIX_SOURCE
+#   define        _INCLUDE_POSIX_SOURCE
 #   define __errno_location()  (&errno)
 #   define dirfd(dirp)         -1
 #   define stat64              stat
-#   define _STAT_VER           0
-#   define __fxstat64(_stat_ver, _fd, _sbp)    fstat((_fd), (_sbp))
 #endif
 #if defined(sun)
 #   define __errno_location()  (&errno)
 #   define dirfd(dirp)         -1
-#   define _STAT_VER           0
-#   define __fxstat64(_stat_ver, _fd, _sbp)    fstat((_fd), (_sbp))
 #endif
 #if defined(__APPLE__)
 #   define __errno_location()  (__error())
-#   define _STAT_VER           0
-#   define __fxstat64(_stat_ver, _fd, _sbp) fstat64((_fd), (_sbp))
 #endif
+
 #include "system.h"
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include "misc/fts.h"
+#include "misc/rpmfts.h"
 #   define __set_errno(val) (*__errno_location ()) = (val)
 #   define __open      open
 #   define __close     close
@@ -1118,7 +1122,7 @@ fts_safe_changedir(FTS * sp, FTSENT * p, int fd, const char * path)
                return (0);
        if (fd < 0 && (newfd = __open(path, O_RDONLY, 0)) < 0)
                return (-1);
-       if (__fxstat64(_STAT_VER, newfd, &sb)) {
+       if (FTS_FSTAT64(newfd, &sb)) {
                ret = -1;
                goto bail;
        }
@@ -1135,3 +1139,4 @@ bail:
        __set_errno (oerrno);
        return (ret);
 }
+
similarity index 94%
rename from misc/fts.h
rename to misc/rpmfts.h
index 47c650e..0c059cf 100644 (file)
 #else
 
 #   define __THROW
-#ifdef  __cplusplus
-# define __BEGIN_DECLS  extern "C" {
-# define __END_DECLS    }
-#else
-# define __BEGIN_DECLS
-# define __END_DECLS
-#endif
 
-#if defined(hpux)
-# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
-# define       _INCLUDE_POSIX_SOURCE
+#if !defined(_LARGEFILE64_SOURCE)
 # define       _LARGEFILE64_SOURCE
 #endif
 
-#if defined(sun)
-# define _D_EXACT_NAMLEN(d) ((d)->d_reclen)
+#if !defined(_D_EXACT_NAMLEN)
+# define _D_EXACT_NAMLEN(d) (strlen((d)->d_name))
 #endif
 
-#if defined(__APPLE__)
-# define _D_EXACT_NAMLEN(d) (strlen((d)->d_name))
+#if defined(hpux)
+# if !defined(_INCLUDE_POSIX_SOURCE)
+#  define      _INCLUDE_POSIX_SOURCE
+# endif
 #endif
 
 #endif
@@ -151,7 +144,9 @@ typedef struct _ftsent {
        char fts_name[1];               /*!< file name */
 } FTSENT;
 
-__BEGIN_DECLS
+#ifdef  __cplusplus
+extern "C" {
+#endif
 
 /**
  * Return list of children of the current node.
@@ -166,7 +161,7 @@ FTSENT      *Fts_children (FTS * sp, int instr) __THROW
 /**
  * Destroy a file hierarchy traversal handle.
  * @param sp           file hierarchy state
- * @return             0 on sucess, -1 on error
+ * @return             0 on success, -1 on error
  */
 RPM_GNUC_INTERNAL
 int     Fts_close (FTS * sp) __THROW
@@ -198,12 +193,15 @@ FTSENT    *Fts_read (FTS * sp) __THROW
  * @param sp           file hierarchy state
  * @param p            file set member
  * @param instr                new disposition for file set member
- * @return             0 on sucess, -1 on error
+ * @return             0 on success, -1 on error
  */
 RPM_GNUC_INTERNAL
 int     Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
 ;
 
-__END_DECLS
+#ifdef  __cplusplus
+}
+#endif
 
 #endif /* fts.h */
+
index 914bf3d..1f2e596 100644 (file)
@@ -7,17 +7,17 @@ AM_CPPFLAGS += -I$(top_srcdir)/python
 AM_CPPFLAGS += -I@WITH_PYTHON_INCLUDE@
 AM_CPPFLAGS += -I$(top_srcdir)
 
-rpmpyexec_LTLIBRARIES = _rpmmodule.la _rpmbmodule.la _rpmsmodule.la
+rpmpyexec_LTLIBRARIES = _rpm.la _rpmb.la _rpms.la
 rpmpyexec_DATA = rpm/__init__.py rpm/transaction.py
 rpmpyexecdir = @pyexecdir@/@PYTHON_MODULENAME@
 
-_rpmmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmmodule_la_LIBADD = \
+_rpm_la_LDFLAGS = -module -avoid-version -shared
+_rpm_la_LIBADD = \
        $(top_builddir)/lib/librpm.la \
        $(top_builddir)/rpmio/librpmio.la \
        @WITH_PYTHON_LIB@
 
-_rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \
+_rpm_la_SOURCES = rpmmodule.c rpmsystem-py.h \
        header-py.c header-py.h \
        rpmds-py.c rpmds-py.h \
        rpmfd-py.c rpmfd-py.h \
@@ -31,22 +31,22 @@ _rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \
        rpmte-py.c rpmte-py.h \
        rpmts-py.c rpmts-py.h
 
-_rpmbmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmbmodule_la_LIBADD = \
+_rpmb_la_LDFLAGS = -module -avoid-version -shared
+_rpmb_la_LIBADD = \
        $(top_builddir)/build/librpmbuild.la \
        $(top_builddir)/lib/librpm.la \
        $(top_builddir)/rpmio/librpmio.la \
        @WITH_PYTHON_LIB@
 
-_rpmbmodule_la_SOURCES = rpmbmodule.c rpmsystem-py.h \
+_rpmb_la_SOURCES = rpmbmodule.c rpmsystem-py.h \
        spec-py.c spec-py.h
 
-_rpmsmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmsmodule_la_LIBADD = \
+_rpms_la_LDFLAGS = -module -avoid-version -shared
+_rpms_la_LIBADD = \
         $(top_builddir)/sign/librpmsign.la \
         $(top_builddir)/lib/librpm.la \
         $(top_builddir)/rpmio/librpmio.la \
         @WITH_PYTHON_LIB@
 
-_rpmsmodule_la_SOURCES = rpmsmodule.c rpmsystem-py.h
+_rpms_la_SOURCES = rpmsmodule.c rpmsystem-py.h
 
index f6e1491..ad30570 100644 (file)
@@ -66,8 +66,8 @@ static struct PyModuleDef moduledef = {
     NULL         /* m_free */
 };
 
-PyObject * PyInit__rpm(void);  /* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpmb(void); /* XXX eliminate gcc warning */
+PyObject * PyInit__rpmb(void)
 {
     PyObject *m;
 
index 79eb5b6..41f4941 100644 (file)
@@ -230,7 +230,7 @@ static PyObject *rpmfd_read(rpmfdObject *s, PyObject *args, PyObject *kwds)
 
        if (nb > 0) {
            PyObject *tmp = PyBytes_FromStringAndSize(buf, nb);
-           PyString_ConcatAndDel(&res, tmp);
+           PyBytes_ConcatAndDel(&res, tmp);
            left -= nb;
        }
     } while (nb > 0);
index 17fe79e..9209b54 100644 (file)
@@ -88,7 +88,6 @@ static PyNumberMethods rpmii_as_number = {
        0, /* nb_add */
        0, /* nb_subtract */
        0, /* nb_multiply */
-       0, /* nb_divide */
        0, /* nb_remainder */
        0, /* nb_divmod */
        0, /* nb_power */
index 6c34c98..70bb166 100644 (file)
@@ -149,7 +149,6 @@ static PyNumberMethods rpmmi_as_number = {
        0, /* nb_add */
        0, /* nb_subtract */
        0, /* nb_multiply */
-       0, /* nb_divide */
        0, /* nb_remainder */
        0, /* nb_divmod */
        0, /* nb_power */
index 3eb2403..a8289b5 100644 (file)
@@ -59,15 +59,15 @@ static struct PyModuleDef moduledef = {
     "_rpms",     /* m_name */
     rpms__doc__, /* m_doc */
     0,           /* m_size */
-    NULL,        /* m_methods */
+    modMethods,  /* m_methods */
     NULL,        /* m_reload */
     NULL,        /* m_traverse */
     NULL,        /* m_clear */
     NULL         /* m_free */
 };
 
-PyObject * PyInit__rpm(void);  /* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpms(void); /* XXX eliminate gcc warning */
+PyObject * PyInit__rpms(void)
 {
     PyObject *m;
 
index c7286a2..30f7456 100644 (file)
@@ -50,6 +50,7 @@ typedef Py_ssize_t (*lenfunc)(PyObject *);
 #define PyInt_FromLong PyLong_FromLong
 #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
 #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+#define PyInt_AsSsize_t PyLong_AsSsize_t
 #endif
 
 #endif /* H_SYSTEM_PYTHON */