Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pyppmd for openSUSE:Factory 
checked in at 2023-12-15 21:49:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyppmd (Old)
 and      /work/SRC/openSUSE:Factory/.python-pyppmd.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pyppmd"

Fri Dec 15 21:49:30 2023 rev:3 rq:1133184 version:1.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyppmd/python-pyppmd.changes      
2023-06-27 23:18:19.391976527 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyppmd.new.25432/python-pyppmd.changes   
2023-12-15 21:49:42.515501315 +0100
@@ -1,0 +2,10 @@
+Thu Dec 14 20:51:45 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 1.1.0:
+  * Add Python 3.12 support
+  * Minimum required python to be 3.8
+  * Export PPMD8_RESTORE_METHOD_* constants
+  * Drop github actions workflows
+  * README: Add SPDX identifier
+
+-------------------------------------------------------------------

Old:
----
  pyppmd-1.0.0.tar.gz

New:
----
  pyppmd-1.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pyppmd.spec ++++++
--- /var/tmp/diff_new_pack.LKHF8i/_old  2023-12-15 21:49:43.395533695 +0100
+++ /var/tmp/diff_new_pack.LKHF8i/_new  2023-12-15 21:49:43.395533695 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pyppmd
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,18 +16,16 @@
 #
 
 
-%define skip_python2 1
 %{?sle15_python_module_pythons}
 Name:           python-pyppmd
-Version:        1.0.0
+Version:        1.1.0
 Release:        0
 Summary:        PPMd compression/decompression library
 License:        LGPL-2.1-or-later
 URL:            https://codeberg.org/miurahr/pyppmd
 Source:         
https://files.pythonhosted.org/packages/source/p/pyppmd/pyppmd-%{version}.tar.gz
-BuildRequires:  %{python_module devel >= 3.6}
+BuildRequires:  %{python_module devel >= 3.8}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module setuptools >= 58.0}
 BuildRequires:  %{python_module setuptools_scm >= 6.0.1}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes

++++++ pyppmd-1.0.0.tar.gz -> pyppmd-1.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/.flake8 new/pyppmd-1.1.0/.flake8
--- old/pyppmd-1.0.0/.flake8    1970-01-01 01:00:00.000000000 +0100
+++ new/pyppmd-1.1.0/.flake8    2023-11-05 07:13:42.000000000 +0100
@@ -0,0 +1,4 @@
+[flake8]
+max-line-length = 125
+extend-ignore = E203, W503
+ignore = F841
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/CMakeLists.txt 
new/pyppmd-1.1.0/CMakeLists.txt
--- old/pyppmd-1.0.0/CMakeLists.txt     2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/CMakeLists.txt     2023-11-05 07:13:42.000000000 +0100
@@ -5,7 +5,7 @@
 set(CMAKE_CXX_STANDARD 17)
 
 # TARGET PYTHON version
-set(PY_VERSION 3.8)
+set(PY_VERSION 3.12)
 set(Python_FIND_IMPLEMENTATIONS CPython)
 #set(Python_FIND_IMPLEMENTATIONS PyPy)
 set(VENV_PATH "${CMAKE_BINARY_DIR}/venv")
@@ -16,45 +16,60 @@
 set(Python_FIND_STRATEGY VERSION)
 find_package(Python ${PY_VERSION}.0...${PY_VERSION}.99 COMPONENTS Interpreter 
Development)
 set(PY_EXT_FILE _ppmd)
-set(PY_CFFI_FILE _ppmd)
-set(PY_EXT_DIR src/pyppmd/c)
-set(PY_CFFI_DIR src/pyppmd/cffi)
+set(PY_CFFI_FILE _cffi_ppmd)
+set(PY_EXT_DIR pyppmd/c)
+set(PY_CFFI_DIR pyppmd/cffi)
 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/get_ext.py
      "import sysconfig\nprint(sysconfig.get_config_var('EXT_SUFFIX'))\n")
 execute_process(
   COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/get_ext.py
   OUTPUT_VARIABLE PY_EXT_EXT
   OUTPUT_STRIP_TRAILING_WHITESPACE)
-set(PY_EXT ${PY_EXT_DIR}/${PY_EXT_FILE}.${PY_EXT_EXT})
-set(PY_CFFI ${PY_CFFI_DIR}/PY_CFFI_FILE}.${PY_EXT_EXT})
-if(DEBUG_BUILD)
-  if (WIN32)
+
+set(PY_BUILD_LIB_DIR 
build/lib.${PY_PLATFORM}-${Python_VERSION_MAJOR}.${Python_VERSION_MINOR})
+set(PY_EXT_INPLACE src/${PY_EXT_DIR}/${PY_EXT_FILE}.${PY_EXT_EXT})
+set(PY_EXT ${PY_BUILD_LIB_DIR}/${PY_EXT_DIR}/${PY_EXT_FILE}.${PY_EXT_EXT})
+set(PY_CFFI_INPLACE src/${PY_CFFI_DIR}/${PY_CFFI_FILE}.${PY_EXT_EXT})
+set(PY_CFFI ${PY_BUILD_LIB_DIR}/${PY_CFFI_DIR}/${PY_CFFI_FILE}.${PY_EXT_EXT})
+if (WIN32)
+  if(DEBUG_BUILD)
     set(BUILD_EXT_PYTHON ${VENV_PATH}/Scripts/python_d.exe)
-    set(BUILD_EXT_OPTION -g)
   else()
-    set(BUILD_EXT_PYTHON ${Python_EXECUTABLE})
-    set(BUILD_EXT_OPTION -g)
-  endif()
+    set(BUILD_EXT_PYTHON ${VENV_PATH}/bin/python.exe)
+   endif()
+  set(BUILD_EXT_OPTION -g)
 else()
-  set(BUILD_EXT_PYTHON ${Python_EXECUTABLE})
-  set(BUILD_EXT_OPTION)
+    set(BUILD_EXT_PYTHON ${VENV_PATH}/bin/python)
+    set(BUILD_EXT_OPTION -g)
 endif()
 add_custom_target(
   generate_ext
   BYPRODUCTS ${PY_EXT}
-  COMMAND ${BUILD_EXT_PYTHON} setup.py build_ext ${BUILD_EXT_OPTION} --inplace
+  COMMAND ${BUILD_EXT_PYTHON} setup.py build_ext ${BUILD_EXT_OPTION}
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
   DEPENDS venv.stamp
   SOURCES ${pyppmd_sources})
 add_custom_target(
   generate_cffi
-  BYPRODUCTS ${PY_CFFI}
+  BYPRODUCTS ${PY_CFFI_INPLACE}
   COMMAND ${BUILD_EXT_PYTHON} setup.py build_ext ${BUILD_EXT_OPTION} --cffi 
--inplace
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
   DEPENDS venv.stamp
   SOURCES ${pyppmd_sources})
 
 # 
##################################################################################################
+include_directories(src/lib/buffer src/lib/ppmd)
+set(_sources src/ext/_ppmdmodule.c src/lib/buffer/Buffer.c 
src/lib/buffer/ThreadDecoder.c
+        src/lib/ppmd/Ppmd7.c src/lib/ppmd/Ppmd7Dec.c src/lib/ppmd/Ppmd7Enc.c
+        src/lib/ppmd/Ppmd8.c src/lib/ppmd/Ppmd8Dec.c src/lib/ppmd/Ppmd8Enc.c)
+Python_add_library(_ppmd MODULE WITH_SOABI ${_sources})
+add_custom_target(build_ext
+        BYPRODUCTS ${PY_EXT_INPLACE}
+        COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:_ppmd> 
${CMAKE_SOURCE_DIR}/src/${PY_EXT_DIR}
+        DEPENDS _ppmd venv.stamp
+        )
+
+# 
##################################################################################################
 # create virtualenv
 file(
         WRITE ${CMAKE_CURRENT_BINARY_DIR}/requirements.txt
@@ -66,19 +81,24 @@
 pytest-cov
 pytest-timeout
 cffi
+py-cpuinfo
+tox
 ")
 if (WIN32)
   set(PIP_COMMAND ${VENV_PATH}/Scripts/pip.exe)
 else()
   set(PIP_COMMAND ${VENV_PATH}/bin/pip)
 endif()
-add_custom_target(
-        venv.stamp
-        BYPRODUCTS venv.stamp
+add_custom_command(OUTPUT venv.stamp
         COMMAND ${Python_EXECUTABLE} -m venv ${VENV_PATH}
         COMMAND ${PIP_COMMAND} install -r ${CMAKE_BINARY_DIR}/requirements.txt
         COMMAND ${CMAKE_COMMAND} -E touch venv.stamp)
-set(VPKG_PATH_A 
"${VENV_PATH}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/")
+set(SRC_PATH "${CMAKE_SOURCE_DIR}/src")
+if ("${Python_INTERPRETER_ID}" STREQUAL "PyPy")
+  set(VPKG_PATH_A 
"${VENV_PATH}/lib/pypy${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/")
+else()
+  set(VPKG_PATH_A 
"${VENV_PATH}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/")
+endif()
 set(VPKG_PATH_B "${VENV_PATH}/Lib/site-packages/")
 
 # 
##################################################################################################
@@ -88,43 +108,7 @@
   "
 #include <string>
 #include <filesystem>
-#include <Python.h>
-int main(int argc, char **argv) {
-    std::string args;
-    if ( argc > 1) {
-        args.append(\"[\");
-        for (int i = 1; i < argc; i++) {
-            if (i > 2)
-                args.append(\",\");
-            args.append(\"\\\"\");
-            args.append(argv[i]);
-            args.append(\"\\\"\");
-        }
-        args.append(\"]\");
-    }
-    std::filesystem::path vsite_path_a = \"${VPKG_PATH_A}\";
-    std::filesystem::path vsite_path_b = \"${VPKG_PATH_B}\";
-    std::string pycode =
-        \"import sys\\n\"
-        \"sys.path.append('src')\\n\"
-        \"sys.path.append('\" + vsite_path_a.string() + \"')\\n\"
-        \"sys.path.append('\" + vsite_path_b.string() + \"')\\n\"
-        \"import pytest\\n\"
-        \"pytest.main(\" + args + \")\\n\";
-    wchar_t * program_name = Py_DecodeLocale(argv[0], NULL);
-    Py_SetProgramName(program_name);
-    Py_Initialize();
-    PyRun_SimpleString(&*pycode.begin());
-    Py_Finalize();
-    return 0;
-}")
-file(
-    WRITE ${CMAKE_CURRENT_BINARY_DIR}/pypytest_runner.cpp
-     "
-#include <string>
-#include <cstring>
-#include <filesystem>
-#include <PyPy.h>
+#include <unistd.h>
 int main(int argc, char **argv) {
     std::string args;
     if ( argc > 1) {
@@ -138,30 +122,31 @@
         }
         args.append(\"]\");
     }
+    std::filesystem::path src_path = \"${SRC_PATH}\";
     std::filesystem::path vsite_path_a = \"${VPKG_PATH_A}\";
     std::filesystem::path vsite_path_b = \"${VPKG_PATH_B}\";
     std::string pycode =
         \"import sys\\n\"
-        \"sys.path.append('src')\\n\"
+        \"sys.path.append('\" + src_path.string() + \"')\\n\"
         \"sys.path.append('\" + vsite_path_a.string() + \"')\\n\"
         \"sys.path.append('\" + vsite_path_b.string() + \"')\\n\"
         \"import pytest\\n\"
         \"pytest.main(\" + args + \")\\n\";
-    rpython_startup_code();
-    pypy_setup_home(NULL, 1);
-    char * cstr = new char [pycode.length()+1];
-    std::strcpy (cstr, pycode.c_str());
-    pypy_execute_source(cstr);
+    execl(\"${Python_EXECUTABLE}\", \"${Python_EXECUTABLE}\", \"-c\", 
pycode.c_str(), (char*)0);
     return 0;
 }")
+add_executable(pytest_runner ${CMAKE_CURRENT_BINARY_DIR}/pytest_runner.cpp)
 if ("${Python_INTERPRETER_ID}" STREQUAL "PyPy")
-  add_executable(pytest_runner ${CMAKE_CURRENT_BINARY_DIR}/pypytest_runner.cpp)
+  add_dependencies(pytest_runner generate_cffi)
 else()
-  add_executable(pytest_runner ${CMAKE_CURRENT_BINARY_DIR}/pytest_runner.cpp)
+  add_dependencies(pytest_runner generate_ext build_ext)
 endif()
 target_include_directories(pytest_runner PRIVATE ${Python_INCLUDE_DIRS})
 target_link_libraries(pytest_runner PRIVATE ${Python_LIBRARIES})
-add_dependencies(pytest_runner venv.stamp generate_ext generate_cffi)
+add_custom_target(run_pytest
+        COMMAND $<TARGET_FILE:pytest_runner> --verbose
+        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+        DEPENDS pytest_runner)
 
 # 
##################################################################################################
 # for build test and analytics
@@ -189,3 +174,8 @@
 target_include_directories(pyppmd PRIVATE ${Python_INCLUDE_DIRS})
 target_link_libraries(pyppmd PRIVATE ${Python_LIBRARIES})
 # 
##################################################################################################
+add_custom_target(run_tox
+        COMMAND  ${CMAKE_COMMAND} -E env VIRTUAL_ENV=${VENV_PATH} 
${VENV_PATH}/bin/python -m tox
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        DEPENDS venv.stamp
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/Changelog.rst 
new/pyppmd-1.1.0/Changelog.rst
--- old/pyppmd-1.0.0/Changelog.rst      2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/Changelog.rst      2023-11-05 07:13:42.000000000 +0100
@@ -7,6 +7,23 @@
 `Unreleased`_
 =============
 
+`v1.1.0`_
+=========
+
+Added
+-----
+* Add Python 3.12 support
+
+Changed
+-------
+* Minimum required python to be 3.8
+* Export PPMD8_RESTORE_METHOD_* constants
+* Drop setup.cfg
+* Drop github actions workflows
+* README: Add SPDX identifier
+* CI run on python 3.10, 3.11 and 3.12
+
+
 `v1.0.0`_
 =========
 
@@ -86,9 +103,10 @@
 
 
 .. History links
-.. _Unreleased: https://github.com/miurahr/pyppmd/compare/v1.0.0...HEAD
-.. _v1.0.0: https://github.com/miurahr/pyppmd/compare/v0.18.3...v1.0.0
-.. _v0.18.3: https://github.com/miurahr/pyppmd/compare/v0.18.2...v0.18.3
-.. _v0.18.2: https://github.com/miurahr/pyppmd/compare/v0.18.1...v0.18.2
-.. _v0.18.1: https://github.com/miurahr/pyppmd/compare/v0.18.0...v0.18.1
-.. _v0.18.0: https://github.com/miurahr/pyppmd/compare/v0.17.4...v0.18.0
+.. _Unreleased: https://codeberg.org/miurahr/pyppmd/compare/v1.1.0...HEAD
+.. _v1.1.0: https://codeberg.org/miurahr/pyppmd/compare/v1.0.0...v1.1.0
+.. _v1.0.0: https://codeberg.org/miurahr/pyppmd/compare/v0.18.3...v1.0.0
+.. _v0.18.3: https://codeberg.org/miurahr/pyppmd/compare/v0.18.2...v0.18.3
+.. _v0.18.2: https://codeberg.org/miurahr/pyppmd/compare/v0.18.1...v0.18.2
+.. _v0.18.1: https://codeberg.org/miurahr/pyppmd/compare/v0.18.0...v0.18.1
+.. _v0.18.0: https://codeberg.org/miurahr/pyppmd/compare/v0.17.4...v0.18.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/MANIFEST.in new/pyppmd-1.1.0/MANIFEST.in
--- old/pyppmd-1.0.0/MANIFEST.in        2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/MANIFEST.in        2023-11-05 07:13:42.000000000 +0100
@@ -2,6 +2,7 @@
 include *.txt
 include tox.ini
 include LICENSE
+include .flake8
 
 recursive-include docs *.bat
 recursive-include docs *.py
@@ -22,4 +23,6 @@
 
 exclude .gitignore
 exclude .gitattributes
-prune .github
\ No newline at end of file
+exclude .woodpecker.yml
+prune ci
+prune issue_template
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/PKG-INFO new/pyppmd-1.1.0/PKG-INFO
--- old/pyppmd-1.0.0/PKG-INFO   2022-08-02 10:29:01.995124300 +0200
+++ new/pyppmd-1.1.0/PKG-INFO   2023-11-05 07:14:44.089068200 +0100
@@ -1,13 +1,14 @@
 Metadata-Version: 2.1
 Name: pyppmd
-Version: 1.0.0
+Version: 1.1.0
 Summary: PPMd compression/decompression library
-Home-page: http://github.com/miurahr/pyppmd
-Author: Hiroshi Miura
 Author-email: Hiroshi Miura <miur...@linux.com>
 License: LGPL-2.1-or-later
-Project-URL: Source, https://github.com/miurahr/pyppmd
-Keywords: ppmd,7-zip,compression
+Project-URL: Source, https://codeberg.org/miurahr/pyppmd
+Project-URL: Homepage, https://pyppmd.readthedocs.io/
+Project-URL: Documentation, https://pyppmd.readthedocs.io/en/stable/
+Project-URL: Bug Tracker, https://codeberg.org/miurahr/pyppmd/issues
+Project-URL: Changelog, https://pyppmd.readthedocs.io/en/latest/changelog.html
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
 Classifier: Operating System :: MacOS :: MacOS X
@@ -26,33 +27,48 @@
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/x-rst
+License-File: LICENSE
 Provides-Extra: test
+Requires-Dist: pytest>=6.0; extra == "test"
+Requires-Dist: pytest-benchmark; extra == "test"
+Requires-Dist: pytest-cov; extra == "test"
+Requires-Dist: pytest-timeout; extra == "test"
+Requires-Dist: hypothesis; extra == "test"
+Requires-Dist: coverage[toml]>=5.2; extra == "test"
 Provides-Extra: check
+Requires-Dist: mypy>=0.812; extra == "check"
+Requires-Dist: mypy_extensions>=0.4.3; extra == "check"
+Requires-Dist: check-manifest; extra == "check"
+Requires-Dist: flake8<5; extra == "check"
+Requires-Dist: flake8-isort; extra == "check"
+Requires-Dist: flake8-black; extra == "check"
+Requires-Dist: readme-renderer; extra == "check"
+Requires-Dist: pygments; extra == "check"
+Requires-Dist: isort>=5.0.3; extra == "check"
 Provides-Extra: docs
+Requires-Dist: sphinx>=2.3; extra == "docs"
+Requires-Dist: sphinx_rtd_theme; extra == "docs"
 Provides-Extra: fuzzer
-License-File: LICENSE
+Requires-Dist: atheris; extra == "fuzzer"
+Requires-Dist: hypothesis; extra == "fuzzer"
 
 PyPPMd
 ======
 
 
-.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
-  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
-
 .. image:: https://badge.fury.io/py/pyppmd.svg
   :target: https://badge.fury.io/py/pyppmd
 
 .. image:: https://img.shields.io/conda/vn/conda-forge/pyppmd
   :target: https://anaconda.org/conda-forge/pyppmd
 
-.. image:: 
https://github.com/miurahr/pyppmd/workflows/Run%20Tox%20tests/badge.svg
-  :target: https://github.com/miurahr/pyppmd/actions
-
-.. image:: 
https://coveralls.io/repos/github/miurahr/pyppmd/badge.svg?branch=main
-  :target: https://coveralls.io/github/miurahr/pyppmd?branch=main
+.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
+  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
 
+.. image:: 
https://dev.azure.com/miurahr/CodeBerg/_apis/build/status%2FCodeBerg-pyppmd-CI?branchName=main
+  :target: 
https://dev.azure.com/miurahr/CodeBerg/_build/latest?definitionId=29&branchName=main
 
 Introduction
 ------------
@@ -70,7 +86,7 @@
 Development status
 ------------------
 
-A development status is considered as ``Beta``.
+A project status is considered as ``Stable``.
 
 Extra input byte
 ----------------
@@ -103,9 +119,12 @@
 Some codes are derived from p7zip/7zip and pyzstd project.
 Details are shown in LicenseNotices.rst
 
+- SPDX-License-Identifier: LGPL-2.1-or-later
+- SPDX-URL: https://spdx.org/licenses/LGPL-2.1-or-later.html
+
 PyPPMd is licensed under GNU Lesser General Public License v2.1 or later.
 
-- Copyright (C) 2020-2022 Hiroshi Miura
+- Copyright (C) 2020-2023 Hiroshi Miura
 - Copyright (C) 2020-2021 Ma Lin
 - Copyright (C) 2010-2012 Lockless Inc.
 - Copyright (C) 1999-2017 Igor Pavlov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/README.rst new/pyppmd-1.1.0/README.rst
--- old/pyppmd-1.0.0/README.rst 2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/README.rst 2023-11-05 07:13:42.000000000 +0100
@@ -2,21 +2,17 @@
 ======
 
 
-.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
-  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
-
 .. image:: https://badge.fury.io/py/pyppmd.svg
   :target: https://badge.fury.io/py/pyppmd
 
 .. image:: https://img.shields.io/conda/vn/conda-forge/pyppmd
   :target: https://anaconda.org/conda-forge/pyppmd
 
-.. image:: 
https://github.com/miurahr/pyppmd/workflows/Run%20Tox%20tests/badge.svg
-  :target: https://github.com/miurahr/pyppmd/actions
-
-.. image:: 
https://coveralls.io/repos/github/miurahr/pyppmd/badge.svg?branch=main
-  :target: https://coveralls.io/github/miurahr/pyppmd?branch=main
+.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
+  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
 
+.. image:: 
https://dev.azure.com/miurahr/CodeBerg/_apis/build/status%2FCodeBerg-pyppmd-CI?branchName=main
+  :target: 
https://dev.azure.com/miurahr/CodeBerg/_build/latest?definitionId=29&branchName=main
 
 Introduction
 ------------
@@ -34,7 +30,7 @@
 Development status
 ------------------
 
-A development status is considered as ``Beta``.
+A project status is considered as ``Stable``.
 
 Extra input byte
 ----------------
@@ -67,9 +63,12 @@
 Some codes are derived from p7zip/7zip and pyzstd project.
 Details are shown in LicenseNotices.rst
 
+- SPDX-License-Identifier: LGPL-2.1-or-later
+- SPDX-URL: https://spdx.org/licenses/LGPL-2.1-or-later.html
+
 PyPPMd is licensed under GNU Lesser General Public License v2.1 or later.
 
-- Copyright (C) 2020-2022 Hiroshi Miura
+- Copyright (C) 2020-2023 Hiroshi Miura
 - Copyright (C) 2020-2021 Ma Lin
 - Copyright (C) 2010-2012 Lockless Inc.
 - Copyright (C) 1999-2017 Igor Pavlov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/SECURITY.rst 
new/pyppmd-1.1.0/SECURITY.rst
--- old/pyppmd-1.0.0/SECURITY.rst       2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/SECURITY.rst       2023-11-05 07:13:42.000000000 +0100
@@ -9,9 +9,9 @@
 +---------+--------------------+
 | Version | Status             |
 +=========+====================+
-| 0.18.x  | Development        |
+| 1.0.x   | Development        |
 +---------+--------------------+
-| < 0.18  | not supported      |
+| < 1.0   | not supported      |
 +---------+--------------------+
 
 Reporting a Vulnerability
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyppmd-1.0.0/ci/azure-pipelines/CodeBerg-pyppmd-CI.yml 
new/pyppmd-1.1.0/ci/azure-pipelines/CodeBerg-pyppmd-CI.yml
--- old/pyppmd-1.0.0/ci/azure-pipelines/CodeBerg-pyppmd-CI.yml  2022-08-02 
10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/ci/azure-pipelines/CodeBerg-pyppmd-CI.yml  1970-01-01 
01:00:00.000000000 +0100
@@ -1,244 +0,0 @@
-# Variable 'python.version' was defined in the Variables tab
-# Multi-job configuration must be converted to matrix strategy: 
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml#multi-job-configuration
-variables:
-- name: BuildParameters.versionSpec
-  value: $(python.version)
-trigger:
-  branches:
-    include:
-    - releases/*
-    - main
-resources:
-  repositories:
-  - repository: self
-    type: git
-    ref: refs/heads/main
-jobs:
-- job: Job_5
-  displayName: Check
-  pool:
-    vmImage: ubuntu-latest
-  strategy:
-    matrix:
-      "python 3.8":
-        - python.version: 3.8
-      "python 3.9":
-        - python.version: 3.9
-      "python 3.10":
-      - python.version: 3.10
-  steps:
-  - checkout: self
-    clean: true
-  - task: UsePythonVersion@0
-    displayName: Use Python $(python.version)
-    inputs:
-      versionSpec: $(BuildParameters.versionSpec)
-      disableDownloadFromRegistry: true
-  - task: Bash@3
-    displayName: Install dependencies and run tox
-    inputs:
-      targetType: inline
-      script: >-
-        python -m pip install --upgrade pip setuptools setuptools_scm[toml] 
coverage[toml] tox importlib_metadata build
-        python -m tox -e py
-  - task: Bash@3
-    displayName: build sdist
-    inputs:
-      targetType: inline
-      script: >-
-        python -m build --sdist
-    condition: eq(variables['python.version'], '3.8')
-  - task: PublishBuildArtifacts@1
-    displayName: Publish Artifact
-    inputs:
-      PathtoPublish: dist
-      ArtifactName: wheelhouse
-    condition: eq(variables['python.version'], '3.8')
-- job: Job_1
-  displayName: linux
-  dependsOn: Job_5
-  pool:
-    vmImage: ubuntu-latest
-  steps:
-  - checkout: self
-    clean: true
-  - task: UsePythonVersion@0
-    displayName: Use Python 3.x
-    inputs:
-      disableDownloadFromRegistry: true
-  - task: Bash@3
-    displayName: Install dependencies
-    inputs:
-      targetType: inline
-      script: >
-        set -o errexit
-        python3 -m pip install --upgrade pip
-        pip3 install cibuildwheel==2.8.1
-  - task: Bash@3
-    displayName: Build wheels
-    inputs:
-      targetType: inline
-      script: cibuildwheel --output-dir wheelhouse .
-    env:
-      CIBW_PRERELEASE_PYTHONS: True
-  - task: PublishBuildArtifacts@1
-    displayName: Publish Artifact
-    inputs:
-      PathtoPublish: wheelhouse
-      ArtifactName: wheelhouse
-- job: Job_2
-  displayName: macos
-  dependsOn: Job_5
-  pool:
-    vmImage: macos-latest
-  steps:
-  - checkout: self
-    clean: true
-  - task: UsePythonVersion@0
-    displayName: Use Python 3.x
-    inputs:
-      disableDownloadFromRegistry: true
-  - task: Bash@3
-    displayName: Install dependencies
-    inputs:
-      targetType: inline
-      script: >
-        set -o errexit
-        python3 -m pip install --upgrade pip
-        python3 -m pip install cibuildwheel==2.8.0
-  - task: Bash@3
-    displayName: Build wheels
-    inputs:
-      targetType: inline
-      script: >
-        cibuildwheel --output-dir wheelhouse .
-    env:
-      CIBW_PRERELEASE_PYTHONS: True
-  - task: PublishBuildArtifacts@1
-    displayName: Publish Artifact
-    inputs:
-      PathtoPublish: wheelhouse
-      ArtifactName: wheelhouse
-- job: Job_3
-  displayName: windows
-  dependsOn: Job_5
-  pool:
-    vmImage: windows-latest
-  steps:
-  - checkout: self
-    clean: true
-  - task: UsePythonVersion@0
-    displayName: Use Python 3.x
-    inputs:
-      disableDownloadFromRegistry: true
-  - task: Bash@3
-    displayName: Install dependecies
-    inputs:
-      targetType: inline
-      script: >
-        set -o errexit
-        python -m pip install --upgrade pip
-        pip install cibuildwheel==2.8.0
-  - task: Bash@3
-    displayName: Build wheels
-    inputs:
-      targetType: inline
-      script: cibuildwheel --output-dir wheelhouse .
-    env:
-      CIBW_PRERELEASE_PYTHONS: True
-  - task: PublishBuildArtifacts@1
-    displayName: Publish Artifact
-    inputs:
-      PathtoPublish: wheelhouse
-      ArtifactName: wheelhouse
-- job: Job_6
-  displayName: linux(aarch64)
-  dependsOn: Job_5
-  pool:
-    name: Azure Pipelines
-  steps:
-    - checkout: self
-      clean: true
-    - task: UsePythonVersion@0
-      displayName: Use Python 3.x
-    - task: DockerInstaller@0
-      displayName: Install Docker 20.10.17
-      inputs:
-        dockerVersion: 20.10.17
-    - task: Bash@3
-      displayName: Install dependecies and qemu
-      inputs:
-        targetType: inline
-        script: >
-          set -o errexit
-          python -m pip install --upgrade pip
-          docker pull tonistiigi/binfmt:latest
-          docker run --rm --privileged tonistiigi/binfmt:latest --install arm64
-          pip install cibuildwheel==2.8.0
-    - task: Bash@3
-      displayName: Build wheels
-      inputs:
-        targetType: inline
-        script: cibuildwheel --output-dir wheelhouse .
-      env:
-        CIBW_PRERELEASE_PYTHONS: True
-        CIBW_ARCHS: aarch64
-    - task: PublishBuildArtifacts@1
-      displayName: Publish Artifact
-      inputs:
-        PathtoPublish: wheelhouse
-        ArtifactName: wheelhouse
-- job: Job_4
-  displayName: Publish to PyPI
-  dependsOn:
-  - Job_1
-  - Job_2
-  - Job_3
-  - Job_6
-  pool:
-    vmImage: ubuntu-latest
-  steps:
-  - checkout: self
-    clean: true
-  - task: UsePythonVersion@0
-    displayName: Use Python 3.x
-  - task: DownloadBuildArtifacts@1
-    displayName: Download Build Artifacts
-    inputs:
-      artifactName: wheelhouse
-      itemPattern: >
-        **
-      downloadPath: wheelhouse
-  - task: Bash@3
-    displayName: Install Dependencies
-    inputs:
-      targetType: inline
-      script: >
-        python -m pip install twine
-  - task: TwineAuthenticate@1
-    displayName: Twine Authenticate (testpypi)
-    condition: and(not(startsWith(variables['build.sourceBranch'], 
'refs/tags/v')), startsWith(variables['build.sourceBranch'], 
'refs/heads/releases/'))
-    inputs:
-      pythonUploadServiceConnection: 38ba9668-be53-494d-b8b5-ce3dc32fd309
-  - task: Bash@3
-    displayName: Upload to Python Package Index(test)
-    condition: and(succeeded(), 
not(startsWith(variables['build.sourceBranch'], 'refs/tags/v')), 
startsWith(variables['build.sourceBranch'], 'refs/heads/releases/'))
-    inputs:
-      targetType: inline
-      script: >+
-        python -m twine upload  --repository testpypi --config-file 
$(PYPIRC_PATH) wheelhouse/wheelhouse/*
-
-  - task: TwineAuthenticate@1
-    displayName: Twine Authenticate (pypi)
-    condition: startsWith(variables['build.sourceBranch'], 'refs/tags/v')
-    inputs:
-      pythonUploadServiceConnection: 7bcc3d9c-d109-445a-b785-5890d404db02
-  - task: Bash@3
-    displayName: Upload to Python Package Index
-    condition: and(succeeded(), startsWith(variables['build.sourceBranch'], 
'refs/tags/v'))
-    inputs:
-      targetType: inline
-      script: >+
-        python -m twine upload  --repository pypi --config-file $(PYPIRC_PATH) 
wheelhouse/wheelhouse/*
-
-...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/issue_template/bug_report.md 
new/pyppmd-1.1.0/issue_template/bug_report.md
--- old/pyppmd-1.0.0/issue_template/bug_report.md       2022-08-02 
10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/issue_template/bug_report.md       1970-01-01 
01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
----
-name: "Bug report"
-about: "Create a report to help us improve"
-title: '[BUG]'
-labels:
-- bugs
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**Related issue**
-(if exist)
-
-**To Reproduce**
-Steps to reproduce the behavior:
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Environment (please complete the following information):**
- - OS: [e.g. Windows 10, Ubuntu Linux 18.04.01]
- - Python [e.g. 3.6, pypy3.6.9-7.3.0]
- - project version: [e.g. v0.2, commit #123456 on main]
-
-**Test data(please attach in the report):**
-A minimum test data to reproduce your problem.
-
-**Additional context**
-Add any other context about the problem here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/issue_template/feature_request.md 
new/pyppmd-1.1.0/issue_template/feature_request.md
--- old/pyppmd-1.0.0/issue_template/feature_request.md  2022-08-02 
10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/issue_template/feature_request.md  1970-01-01 
01:00:00.000000000 +0100
@@ -1,19 +0,0 @@
----
-name: "Feature request"
-about: "Suggest an idea for this project"
-title: '[FEATURE]'
-labels:
-- enhancement
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always 
frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features 
you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/pyproject.toml 
new/pyppmd-1.1.0/pyproject.toml
--- old/pyppmd-1.0.0/pyproject.toml     2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/pyproject.toml     2023-11-05 07:13:42.000000000 +0100
@@ -1,6 +1,6 @@
 [project]
 name = "pyppmd"
-requires-python = ">=3.6"
+requires-python = ">=3.8"
 description = "PPMd compression/decompression library"
 readme = "README.rst"
 license = {text = "LGPL-2.1-or-later"}
@@ -42,7 +42,8 @@
     "mypy>=0.812",
     "mypy_extensions>=0.4.3",
     "check-manifest",
-    "flake8",
+    "flake8<5",
+    "flake8-isort",
     "flake8-black",
     "readme-renderer",
     "pygments",
@@ -58,18 +59,25 @@
 ]
 
 [project.urls]
-Source = "https://github.com/miurahr/pyppmd";
+Source = "https://codeberg.org/miurahr/pyppmd";
+Homepage = "https://pyppmd.readthedocs.io/";
+Documentation = "https://pyppmd.readthedocs.io/en/stable/";
+"Bug Tracker" = "https://codeberg.org/miurahr/pyppmd/issues";
+Changelog = "https://pyppmd.readthedocs.io/en/latest/changelog.html";
 
 [build-system]
-requires = ["setuptools>=58", "wheel", "setuptools_scm[toml]>=6.0.1"]
+requires = ["setuptools>=59", "setuptools_scm[toml]>=6.4.2"]
 build-backend = "setuptools.build_meta"
 
-[tools.setuptools_scm]
+[tool.setuptools_scm]
 local_scheme = "no-local-version"
 
+[tool.setuptools.package-data]
+pyppmd = ["py.typed"]
+
 [tool.black]
 line-length = 125
-target-version = ['py38']
+target-version = ['py310']
 
 [tool.coverage.paths]
 source = ["src", "**/site-packages"]
@@ -115,54 +123,49 @@
 manylinux-ppc64le-image = "manylinux2014"
 manylinux-s390x-image = "manylinux2014"
 manylinux-pypy_x86_64-image = "manylinux2014"
-manylinux-pypy_i686-image = "manylinux2014"
 manylinux-pypy_aarch64-image = "manylinux2014"
 
 musllinux-x86_64-image = "musllinux_1_1"
-musllinux-i686-image = "musllinux_1_1"
 musllinux-aarch64-image = "musllinux_1_1"
 musllinux-ppc64le-image = "musllinux_1_1"
 musllinux-s390x-image = "musllinux_1_1"
 
 [tool.cibuildwheel.linux]
-archs = ["auto", "aarch64"]
+archs = ["auto64", "aarch64"]
 
 [tool.cibuildwheel.macos]
-archs = ["x86_64", "arm64"]
+archs = ["x86_64", "universal2", "arm64"]
 
 [tool.tox]
 legacy_tox_ini = """
 [tox]
-envlist = check, py{36,37,38,39,310,311}, pypy3, docs, coveralls
+envlist = check, py{38,39,310,311,312}, pypy{38,39}, docs
 
 [testenv]
-passenv = TRAVIS TRAVIS_* APPVEYOR APPVEYOR_* GITHUB_* PYTEST_ADDOPTS 
COVERALLS_* SETUPTOOLS_USE_DISTUTILS
+passenv =
+    PYTEST_ADDOPTS
+    SETUPTOOLS_USE_DISTUTILS
 extras = test
 commands =
     python -m pytest -vv -s
 
+[testenv:pypy38]
+basepython = pypy3.8
+
+[testenv:pypy39]
+basepython = pypy3.9
+
 [testenv:check]
-basepython = python3.8
+basepython = python3.10
 extras = check
 ignore_errors=true
 commands =
     check-manifest {toxinidir}
     flake8 src tests setup.py
-    isort --quiet --check-only --diff src tests setup.py
 
 [testenv:docs]
-basepython = python3.8
+basepython = python3.10
 extras = docs
 commands =
     sphinx-build {posargs:-E} -b html docs build/html
-
-[gh-actions]
-python =
-    3.6: py36
-    3.7: py37
-    3.8: py38, check, docs
-    3.9: py39
-    3.10: py310
-    3.11: py311
-    pypy-3: pypy3
 """
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/setup.cfg new/pyppmd-1.1.0/setup.cfg
--- old/pyppmd-1.0.0/setup.cfg  2022-08-02 10:29:01.995124300 +0200
+++ new/pyppmd-1.1.0/setup.cfg  2023-11-05 07:14:44.089068200 +0100
@@ -1,71 +1,3 @@
-[metadata]
-name = pyppmd
-description = PPMd compression/decompression library
-long_description = file: README.rst
-long_description_content_type = text/x-rst
-keywords = ppmd, 7-zip, compression
-license = LGPL-2.1+
-author = Hiroshi Miura
-author_email = miur...@linux.com
-url = http://github.com/miurahr/pyppmd
-classifiers = 
-       Development Status :: 5 - Production/Stable
-       License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
-       Operating System :: MacOS :: MacOS X
-       Operating System :: Microsoft :: Windows
-       Operating System :: POSIX
-       Operating System :: POSIX :: Linux
-       Programming Language :: Python
-       Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.6
-       Programming Language :: Python :: 3.7
-       Programming Language :: Python :: 3.8
-       Programming Language :: Python :: 3.9
-       Programming Language :: Python :: 3.10
-       Programming Language :: Python :: 3.11
-       Programming Language :: Python :: 3 :: Only
-       Programming Language :: Python :: Implementation :: CPython
-       Programming Language :: Python :: Implementation :: PyPy
-       Topic :: Software Development :: Libraries :: Python Modules
-
-[options]
-python_requires = >=3.6
-setup_requires = 
-       setuptools-scm>=6.0.1
-       setuptools>=58.0
-
-[options.package_data]
-pyppmd = py.typed
-
-[options.extras_require]
-test = 
-       pytest>=6.0
-       pytest-benchmark
-       pytest-cov
-       pytest-timeout
-       hypothesis
-       coverage[toml]>=5.2
-check = 
-       mypy>=0.812
-       mypy_extensions>=0.4.3
-       check-manifest
-       flake8
-       flake8-black
-       readme-renderer
-       pygments
-       isort>=5.0.3
-docs = 
-       sphinx>=2.3
-       sphinx_rtd_theme
-fuzzer = 
-       atheris
-       hypothesis
-
-[flake8]
-max-line-length = 125
-extend-ignore = E203, W503
-ignore = F841
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/setup.py new/pyppmd-1.1.0/setup.py
--- old/pyppmd-1.0.0/setup.py   2022-08-02 10:28:09.000000000 +0200
+++ new/pyppmd-1.1.0/setup.py   2023-11-05 07:13:42.000000000 +0100
@@ -7,22 +7,20 @@
 from setuptools.command.build_ext import build_ext
 from setuptools.command.egg_info import egg_info
 
-sources = [
-    "src/lib/ppmd/Ppmd7.c",
-    "src/lib/ppmd/Ppmd8.c",
-    "src/lib/ppmd/Ppmd8Dec.c",
-    "src/lib/ppmd/Ppmd7Enc.c",
-    "src/lib/ppmd/Ppmd8Enc.c",
-    "src/lib/ppmd/Ppmd7Dec.c",
-    "src/lib/buffer/Buffer.c",
-    "src/lib/buffer/ThreadDecoder.c",
-]
-_ppmd_extension = Extension("pyppmd._ppmd", sources)
 kwargs = {
     "include_dirs": ["src/lib/ppmd", "src/lib/buffer"],
     "library_dirs": [],
     "libraries": [],
-    "sources": sources,
+    "sources": [
+            "src/lib/ppmd/Ppmd7.c",
+            "src/lib/ppmd/Ppmd8.c",
+            "src/lib/ppmd/Ppmd8Dec.c",
+            "src/lib/ppmd/Ppmd7Enc.c",
+            "src/lib/ppmd/Ppmd8Enc.c",
+            "src/lib/ppmd/Ppmd7Dec.c",
+            "src/lib/buffer/Buffer.c",
+            "src/lib/buffer/ThreadDecoder.c",
+        ],
     "define_macros": [],
 }
 
@@ -45,8 +43,7 @@
     sys.path.append("src/ext")
     import ffi_build
 
-    ffi_build.set_kwargs(**kwargs)
-    binary_extension = ffi_build.ffibuilder.distutils_extension()
+    binary_extension = ffi_build.get_extension(**kwargs)
 else:  # C implementation
     # packages
     packages = ["pyppmd", "pyppmd.c"]
@@ -88,7 +85,6 @@
 
 
 setup(
-    use_scm_version={"local_scheme": "no-local-version"},
     ext_modules=[binary_extension],
     package_dir={"": "src"},
     packages=packages,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/src/ext/ffi_build.py 
new/pyppmd-1.1.0/src/ext/ffi_build.py
--- old/pyppmd-1.0.0/src/ext/ffi_build.py       2022-08-02 10:28:09.000000000 
+0200
+++ new/pyppmd-1.1.0/src/ext/ffi_build.py       2023-11-05 07:13:42.000000000 
+0100
@@ -1,19 +1,23 @@
 import sys
-
-import cffi  # type: ignore  # noqa
+try:
+    from cffi import FFI  # type: ignore  # noqa
+except ImportError:
+    # PyPy includes cffi by default
+    msg = ('To build the CFFI implementation of pyzstd module, need to '
+           'install cffi module like this: "sudo python3 -m pip install '
+           'cffi". On CPython, CFFI implementation is slower than C '
+           'implementation.')
+    raise ImportError(msg)
 
 
 def is_64bit() -> bool:
     return sys.maxsize > 1 << 32
 
 
-ffibuilder = cffi.FFI()
-
 # ----------- PPMd interfaces ---------------------
 # Interface.h
 # Buffer.h
-ffibuilder.cdef(
-    r"""
+defs = r"""
 typedef unsigned char Byte;
 typedef short Int16;
 typedef unsigned short UInt16;
@@ -49,12 +53,10 @@
     size_t pos;         /**< position where writing stopped. Will be updated. 
Necessarily 0 <= pos <= size */
 } OutBuffer;
 """
-)
 
 # Ppmd.h
 # Ppmd7.h
-ffibuilder.cdef(
-    r"""
+defs += r"""
 /* SEE-contexts for PPM-contexts with masked symbols */
 typedef struct
 {
@@ -71,19 +73,17 @@
   UInt16 SuccessorHigh;
 } CPpmd_State;
 """
-)
 
 if is_64bit():
-    ffibuilder.cdef("typedef UInt32 CPpmd_State_Ref;")
-    ffibuilder.cdef("typedef UInt32 CPpmd_Void_Ref;")
-    ffibuilder.cdef("typedef UInt32 CPpmd7_Context_Ref;")
+    defs += "typedef UInt32 CPpmd_State_Ref;\n"
+    defs += "typedef UInt32 CPpmd_Void_Ref;\n"
+    defs += "typedef UInt32 CPpmd7_Context_Ref;\n"
 else:
-    ffibuilder.cdef("typedef CPpmd_State * CPpmd_State_Ref;")
-    ffibuilder.cdef("typedef void * CPpmd_Void_Ref;")
-    ffibuilder.cdef("struct CPpmd7_Context_; typedef struct CPpmd7_Context_ * 
CPpmd7_Context_Ref;")
+    defs += "typedef CPpmd_State * CPpmd_State_Ref;\n"
+    defs += "typedef void * CPpmd_Void_Ref;\n"
+    defs += "struct CPpmd7_Context_; typedef struct CPpmd7_Context_ * 
CPpmd7_Context_Ref;\n"
 
-ffibuilder.cdef(
-    r"""
+defs += r"""
 typedef struct CPpmd7_Context_
 {
   UInt16 NumStats;
@@ -126,16 +126,14 @@
   IByteOut *Stream;
 } CPpmd7z_RangeEnc;
 """
-)
 
 # Ppmd8.h
 if is_64bit():
-    ffibuilder.cdef("typedef UInt32 CPpmd8_Context_Ref;")
+    defs += "typedef UInt32 CPpmd8_Context_Ref;\n"
 else:
-    ffibuilder.cdef("typedef struct CPpmd8_Context_ * CPpmd8_Context_Ref;")
+    defs += "typedef struct CPpmd8_Context_ * CPpmd8_Context_Ref;\n"
 
-ffibuilder.cdef(
-    r"""
+defs += r"""
 typedef struct CPpmd8_Context_
 {
   Byte NumStats;
@@ -178,11 +176,9 @@
   UInt16 BinSumm[25][64];
 } CPpmd8;
 """
-)
 
 if sys.platform.startswith("win32"):
-    ffibuilder.cdef(
-        r"""
+    defs += r"""
 typedef struct _pthread_cleanup _pthread_cleanup;
 struct _pthread_cleanup
 {
@@ -205,16 +201,14 @@
 };
 typedef struct _pthread_v *pthread_t;
     """
-    )
 elif sys.platform.startswith("darwin"):
-    ffibuilder.cdef(r"typedef void* pthread_t;")
+    defs += "typedef void* pthread_t;\n"
 elif sys.platform.startswith("linux"):
-    ffibuilder.cdef(r"typedef unsigned long int pthread_t;")
+    defs += "typedef unsigned long int pthread_t;\n"
 else:
-    pass  # todo
+    pass
 
-ffibuilder.cdef(
-    r"""
+defs += r"""
 typedef struct ppmd_info_s {
     void *cPpmd;
     void *rc;
@@ -231,11 +225,9 @@
 int Ppmd8T_decode(CPpmd8 *cPpmd8, OutBuffer *out, int max_length, ppmd_info 
*args);
 void Ppmd8T_Free(CPpmd8 *cPpmd8, ppmd_info *args, IAlloc *allocator);
 """
-)
 
 # ----------- python binding API ---------------------
-ffibuilder.cdef(
-    r"""
+defs += r"""
 extern "Python" void *raw_alloc(size_t);
 extern "Python" void raw_free(void *);
 
@@ -289,7 +281,6 @@
 Bool Ppmd8_RangeDec_Init(CPpmd8 *ppmd);
 int Ppmd8_DecodeSymbol(CPpmd8 *ppmd);
 """
-)
 
 source = r"""
 #include "Ppmd7.h"
@@ -398,9 +389,34 @@
 """
 
 
-def set_kwargs(**kwargs):
+ffibuilder = FFI()
+
+
+def get_extension(**kwargs):
+    ffibuilder.cdef(defs)
     ffibuilder.set_source(source=source, **kwargs)
+    return ffibuilder.distutils_extension()
 
 
-if __name__ == "__main__":  # not when running with setuptools
+if __name__ == "__main__":
+    # when running without setuptools
+    kwargs = {
+        "include_dirs": ["src/lib/ppmd", "src/lib/buffer"],
+        "library_dirs": [],
+        "libraries": [],
+        "sources": [
+            "src/lib/ppmd/Ppmd7.c",
+            "src/lib/ppmd/Ppmd8.c",
+            "src/lib/ppmd/Ppmd8Dec.c",
+            "src/lib/ppmd/Ppmd7Enc.c",
+            "src/lib/ppmd/Ppmd8Enc.c",
+            "src/lib/ppmd/Ppmd7Dec.c",
+            "src/lib/buffer/Buffer.c",
+            "src/lib/buffer/ThreadDecoder.c",
+        ],
+        "define_macros": [],
+        "module_name": "pyppmd.cffi._cffi_ppmd",
+    }
+    ffibuilder.cdef(defs)
+    ffibuilder.set_source(source=source, **kwargs)
     ffibuilder.compile(verbose=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/src/pyppmd/__init__.py 
new/pyppmd-1.1.0/src/pyppmd/__init__.py
--- old/pyppmd-1.0.0/src/pyppmd/__init__.py     2022-08-02 10:28:09.000000000 
+0200
+++ new/pyppmd-1.1.0/src/pyppmd/__init__.py     2023-11-05 07:13:42.000000000 
+0100
@@ -30,7 +30,17 @@
         msg = "pyppmd module: Neither C implementation nor CFFI " 
"implementation can be imported."
         raise ImportError(msg)
 
-__all__ = ("compress", "decompress", "Ppmd7Encoder", "Ppmd7Decoder", 
"Ppmd8Encoder", "Ppmd8Decoder", "PpmdError")
+__all__ = (
+    "compress",
+    "decompress",
+    "PPMD8_RESTORE_METHOD_RESTART",
+    "PPMD8_RESTORE_METHOD_CUT_OFF",
+    "Ppmd7Encoder",
+    "Ppmd7Decoder",
+    "Ppmd8Encoder",
+    "Ppmd8Decoder",
+    "PpmdError",
+)
 
 __doc__ = """\
 Python bindings to PPMd compression library, the API is similar to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/src/pyppmd.egg-info/PKG-INFO 
new/pyppmd-1.1.0/src/pyppmd.egg-info/PKG-INFO
--- old/pyppmd-1.0.0/src/pyppmd.egg-info/PKG-INFO       2022-08-02 
10:29:01.000000000 +0200
+++ new/pyppmd-1.1.0/src/pyppmd.egg-info/PKG-INFO       2023-11-05 
07:14:44.000000000 +0100
@@ -1,13 +1,14 @@
 Metadata-Version: 2.1
 Name: pyppmd
-Version: 1.0.0
+Version: 1.1.0
 Summary: PPMd compression/decompression library
-Home-page: http://github.com/miurahr/pyppmd
-Author: Hiroshi Miura
 Author-email: Hiroshi Miura <miur...@linux.com>
 License: LGPL-2.1-or-later
-Project-URL: Source, https://github.com/miurahr/pyppmd
-Keywords: ppmd,7-zip,compression
+Project-URL: Source, https://codeberg.org/miurahr/pyppmd
+Project-URL: Homepage, https://pyppmd.readthedocs.io/
+Project-URL: Documentation, https://pyppmd.readthedocs.io/en/stable/
+Project-URL: Bug Tracker, https://codeberg.org/miurahr/pyppmd/issues
+Project-URL: Changelog, https://pyppmd.readthedocs.io/en/latest/changelog.html
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
 Classifier: Operating System :: MacOS :: MacOS X
@@ -26,33 +27,48 @@
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/x-rst
+License-File: LICENSE
 Provides-Extra: test
+Requires-Dist: pytest>=6.0; extra == "test"
+Requires-Dist: pytest-benchmark; extra == "test"
+Requires-Dist: pytest-cov; extra == "test"
+Requires-Dist: pytest-timeout; extra == "test"
+Requires-Dist: hypothesis; extra == "test"
+Requires-Dist: coverage[toml]>=5.2; extra == "test"
 Provides-Extra: check
+Requires-Dist: mypy>=0.812; extra == "check"
+Requires-Dist: mypy_extensions>=0.4.3; extra == "check"
+Requires-Dist: check-manifest; extra == "check"
+Requires-Dist: flake8<5; extra == "check"
+Requires-Dist: flake8-isort; extra == "check"
+Requires-Dist: flake8-black; extra == "check"
+Requires-Dist: readme-renderer; extra == "check"
+Requires-Dist: pygments; extra == "check"
+Requires-Dist: isort>=5.0.3; extra == "check"
 Provides-Extra: docs
+Requires-Dist: sphinx>=2.3; extra == "docs"
+Requires-Dist: sphinx_rtd_theme; extra == "docs"
 Provides-Extra: fuzzer
-License-File: LICENSE
+Requires-Dist: atheris; extra == "fuzzer"
+Requires-Dist: hypothesis; extra == "fuzzer"
 
 PyPPMd
 ======
 
 
-.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
-  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
-
 .. image:: https://badge.fury.io/py/pyppmd.svg
   :target: https://badge.fury.io/py/pyppmd
 
 .. image:: https://img.shields.io/conda/vn/conda-forge/pyppmd
   :target: https://anaconda.org/conda-forge/pyppmd
 
-.. image:: 
https://github.com/miurahr/pyppmd/workflows/Run%20Tox%20tests/badge.svg
-  :target: https://github.com/miurahr/pyppmd/actions
-
-.. image:: 
https://coveralls.io/repos/github/miurahr/pyppmd/badge.svg?branch=main
-  :target: https://coveralls.io/github/miurahr/pyppmd?branch=main
+.. image:: https://readthedocs.org/projects/pyppmd/badge/?version=latest
+  :target: https://pyppmd.readthedocs.io/en/latest/?badge=latest
 
+.. image:: 
https://dev.azure.com/miurahr/CodeBerg/_apis/build/status%2FCodeBerg-pyppmd-CI?branchName=main
+  :target: 
https://dev.azure.com/miurahr/CodeBerg/_build/latest?definitionId=29&branchName=main
 
 Introduction
 ------------
@@ -70,7 +86,7 @@
 Development status
 ------------------
 
-A development status is considered as ``Beta``.
+A project status is considered as ``Stable``.
 
 Extra input byte
 ----------------
@@ -103,9 +119,12 @@
 Some codes are derived from p7zip/7zip and pyzstd project.
 Details are shown in LicenseNotices.rst
 
+- SPDX-License-Identifier: LGPL-2.1-or-later
+- SPDX-URL: https://spdx.org/licenses/LGPL-2.1-or-later.html
+
 PyPPMd is licensed under GNU Lesser General Public License v2.1 or later.
 
-- Copyright (C) 2020-2022 Hiroshi Miura
+- Copyright (C) 2020-2023 Hiroshi Miura
 - Copyright (C) 2020-2021 Ma Lin
 - Copyright (C) 2010-2012 Lockless Inc.
 - Copyright (C) 1999-2017 Igor Pavlov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/src/pyppmd.egg-info/SOURCES.txt 
new/pyppmd-1.1.0/src/pyppmd.egg-info/SOURCES.txt
--- old/pyppmd-1.0.0/src/pyppmd.egg-info/SOURCES.txt    2022-08-02 
10:29:01.000000000 +0200
+++ new/pyppmd-1.1.0/src/pyppmd.egg-info/SOURCES.txt    2023-11-05 
07:14:44.000000000 +0100
@@ -1,3 +1,4 @@
+.flake8
 CMakeLists.txt
 Changelog.rst
 LICENSE
@@ -5,9 +6,7 @@
 README.rst
 SECURITY.rst
 pyproject.toml
-setup.cfg
 setup.py
-ci/azure-pipelines/CodeBerg-pyppmd-CI.yml
 docs/Makefile
 docs/api_guide.rst
 docs/authors.rst
@@ -21,8 +20,6 @@
 docs/ppmd7.rst
 docs/ppmd8.rst
 docs/security_policy.rst
-issue_template/bug_report.md
-issue_template/feature_request.md
 src/ext/_ppmdmodule.c
 src/ext/ffi_build.py
 src/lib/buffer/Buffer.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyppmd-1.0.0/src/pyppmd.egg-info/requires.txt 
new/pyppmd-1.1.0/src/pyppmd.egg-info/requires.txt
--- old/pyppmd-1.0.0/src/pyppmd.egg-info/requires.txt   2022-08-02 
10:29:01.000000000 +0200
+++ new/pyppmd-1.1.0/src/pyppmd.egg-info/requires.txt   2023-11-05 
07:14:44.000000000 +0100
@@ -3,7 +3,8 @@
 mypy>=0.812
 mypy_extensions>=0.4.3
 check-manifest
-flake8
+flake8<5
+flake8-isort
 flake8-black
 readme-renderer
 pygments

Reply via email to