#
# spec file for package python-pyelftools
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%{?sle15_python_module_pythons}
Name:           python-pyelftools
Version:        0.32
Release:        1.1
Summary:        Library for analyzing ELF files and DWARF debugging information
License:        SUSE-Public-Domain
Group:          Development/Languages/Python
URL:            https://github.com/eliben/pyelftools
Source:         https://files.pythonhosted.org/packages/source/p/pyelftools/pyelftools-%{version}.tar.gz
BuildRequires:  %{python_module pip}
BuildRequires:  %{python_module setuptools}
BuildRequires:  %{python_module wheel}
BuildRequires:  fdupes
BuildRequires:  python-rpm-macros
Requires(post): update-alternatives
Requires(postun): update-alternatives
BuildArch:      noarch
%python_subpackages

%description
pyelftools is a pure python library for analyzing ELF files and DWARF debugging information

%prep
%autosetup -p1 -n pyelftools-%{version}

%build
%pyproject_wheel

%install
%pyproject_install
%python_clone -a %{buildroot}%{_bindir}/readelf.py
%python_expand %fdupes %{buildroot}%{$python_sitelib}

%check
# Tests fails due to missing files.
# https://github.com/eliben/pyelftools/issues/349
#%%python_exec test/run_all_unittests.py
%python_exec test/run_examples_test.py
# May fail due to minor differences in the output of readelf
# https://github.com/eliben/pyelftools/wiki/Hacking-guide#tests
%python_exec test/run_readelf_tests.py || :

%post
%python_install_alternative readelf.py

%postun
%python_uninstall_alternative readelf.py

%files %{python_files}
%license LICENSE
%doc CHANGES
%python_alternative %{_bindir}/readelf.py
%{python_sitelib}/elftools
%{python_sitelib}/pyelftools-%{version}*-info

%changelog
* Wed Mar 19 2025 John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
- Update to 0.32
  * Fix minor typos in README.rst (#546)
  * DW_FORM_implicit_const is an integer const (#547)
  * Fix for crash on CUs with no lineprograms (#549)
  * Update action versions (#550)
  * GNU readelf 2.42, released April 2024 (#551)
  * Exceptions on malformed ELF header contents (#552)
  * 24 bit integer support, forms strx3, addrx3 (#553)
  * cfi: fix not parsing DW_CFA_def_cfa_offset_sf (#555)
  * Parser performanc test (#556)
  * Performance enhancements (#557)
  * Missed some CPU specific section types (#559)
  * Add missing riscv attributes (#560)
  * CIEv4 and FDE ahead of its CIE (#563)
  * Addding relocation type for PPC 32 EABI (#532)
  * Support for .gnu_debuglink DWARF5 Section (#525)
  * Clean up whitespace
  * Added XHASH to ENUM_D_TAG_MIPS (#571)
  * Section type check on dynamic to strtab link (#573)
  * Check for SHN_UNDEF during symbol dumping (#574)
  * PAGESIZE replaced with a constant (#578)
  * examples: Support DWARF5 filename decoding (#582)
  * Fix for parsing error encountered when pyelftools tries to parse
    non GNU notes that conflicting with known GNU note types. (#584)
  * [RISCV] Add GNU note property and CFI support (#587)
  * No crash on note with zero length name (#592)
  * Support for parsing .debug_types section introduced
    in DWARF version 4 (#520)
  * DW_FORM_ref_sig8 support (#595)
  * Describing volatile C++ datatypes (#597)
  * Stripped file and gnu_debuglink support take 2 (#596)
* Thu Mar 21 2024 Dirk Müller <dmueller@suse.com>
- update to 0.31:
  * Fix iter_notes to handle > 4byte segment alignment
  * Fix buffer overrun in NT_GNU_PROPERTY_TYPE_0 parser
  * add enum for v850 relocations
  * support for the gnu note with the aarch64 features
  * full changes see https://github.com/eliben/pyelftools/compare/v0.30...v0.31
* Tue Jan 16 2024 Daniel Garcia <daniel.garcia@suse.com>
- Add %%{?sle15_python_module_pythons}
* Thu Dec 14 2023 Dirk Müller <dmueller@suse.com>
- update to update to 0.30:
  * Optimization: cache instantiation of DWARF structs
  * DWARFv5 CU headers
  * Bug fix in attribute reporting for DWA_FORM_indirect
  * Support for RISC-V attributes
  * Readelf used for testing upgraded to 2.41
  * Support for MIPS64 object files
  * LoongArch support
* Wed Oct  5 2022 Yogalakshmi Arunachalam <yarunachalam@suse.com>
- Update to version 0.29 (2022.08.09)
  - Lots of improvements to DWARFv5 support (#400, #411, #418, #419, #429 and
    additional PRs)
  - Support for compressed relocation sections (#395)
  - Support for supplementary object files - debug fission (#426)
  - Improved support for corrupted ELF headers (#434)
  - Readelf used for testing upgraded to 2.38 (#420)
  - Add auto-testing vs. llvm-dwarfdump (#428)
* Mon Mar 21 2022 Dirk Müller <dmueller@suse.com>
- update to 0.28:
  * Added a method for returning the index of a section by name
  * Allow filtering by section types in iter_sections
  * Support Android compressed rel/rela sections
  * Initial support for PPC64LE
  * Initial DWARF v5 support
  * Fixed parsing for structures containing uids or gids in core
    dumps
  * Allow filtering by segment types in iter_segments
  * Add support for .note.gnu.property
  * Update readelf tests to work with more recent version of
    readelf
  * Add support for note GNU_PROPERTY_X86_FEATURE_1_AND
* Sun Apr  4 2021 Mustafa Çalışkan <musfay@protonmail.com>
- Update to version 0.27:
  * Add a bit more details to dwarf_pubnames_types example
  * Make dwarf_pubnames_types example a bit more general
  * Replace field access with property name access
  * DebugSectionDescriptor.size initialized with decompressed section size (#339)
  * hash.py: observe endianness when reading hashes (#338)
  * DWARFv1 constants in enums, DW_FORM_ref parsing (#335)
  * elf: support for ELF files with a large number of sections (#333)
  * Remove Travis config
* Wed May 20 2020 Petr Gajdos <pgajdos@suse.com>
- %%python3_only -> %%python_alternative
* Thu Mar 19 2020 Marketa Calabkova <mcalabkova@suse.com>
- Update to 0.26
  * Call relocation for ARM v3 (#194)
  * More complete architecture coverage for ENUM_E_MACHINE (#206)
  * Support for .debug_pubtypes and .debug_pubnames sections (#208)
  * Support for DWARF v4 location lists (#214)
  * Decode strings in dynamic string tables (#217)
  * Improve symbol table handling in dynamic segments (#219)
  * Improved handling of location information (#225)
  * Avoid deprecation warnings in Python 3.7+
  * Add DWARF v5 OPs (#240)
  * Handle many new translation forms and constants
  * Lazy DIE parsing to speed up partial parsing of DWARF info (#249)
* Sat May 25 2019 Tomáš Chvátal <tchvatal@suse.com>
- Update to 0.25:
  - Make parsing of SH_TYPE and PT_TYPE fields dependent on the machine
    (e_machine header field), making it possible to support conflicting type
    enums between different machines (#71 and #121).
  - Add parsing and readelf dumping for .eh_frame (#155)
  - Support compressed sections (#152)
  - Better support for parsing core dumps (#147)
  - More comprehensive handling of ARM relocations (#121)
  - Convert all ascii encoding to utf-8 encoding (#182)
  - Don't attempt to hex/string dump SHT_NOBITS sections in readelf (#119).
  - Test with Python 3.6
  - Minor bugfixes (#118)
  - Cleanup: Use argparse instead of optparse
  - Make readelf comparison tests run in parallel using multiprocessing; cuts
    testing time 3-5x
  - Improvements in MIPS flags handling (#165)
* Fri May 18 2018 yousaf.kaukab@suse.com
- Intial package