diff --git a/backport-pylibfdt-libfdt.i-fix-backwards-compatibility-of-return-values.patch b/backport-pylibfdt-libfdt.i-fix-backwards-compatibility-of-return-values.patch new file mode 100644 index 0000000000000000000000000000000000000000..48317b826358b084ff51eb6a2258ebbe38ece9b7 --- /dev/null +++ b/backport-pylibfdt-libfdt.i-fix-backwards-compatibility-of-return-values.patch @@ -0,0 +1,88 @@ +From 9a969f3b70b07bbf1c9df44a38d7f8d1d3a6e2a5 Mon Sep 17 00:00:00 2001 +From: Brandon Maier +Date: Sun, 24 Nov 2024 15:48:04 -0600 +Subject: pylibfdt/libfdt.i: fix backwards compatibility of return values + +When our Python functions wrap `fdt_getprop()` they return a list +containing `[*data, length]`. + +In SWIG v4.2 and earlier SWIG would discard `*data` if it is NULL/None. +Causing the return value to just be `length`. + +But starting in SWIG v4.3 it no longer discards `*data`. So the return +value is now `[None, length]`. + +Handle this compatibility issue in libfdt.i by checking if the return +value looks like the older 4.2 return value, and casting it to the newer +style. + +See https://github.com/swig/swig/pull/2907 + +Signed-off-by: Brandon Maier +Signed-off-by: David Gibson +--- + pylibfdt/libfdt.i | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i +index 9f5b6a9..bb9985c 100644 +--- a/pylibfdt/libfdt.i ++++ b/pylibfdt/libfdt.i +@@ -114,11 +114,14 @@ def check_err_null(val, quiet=()): + FdtException if val indicates an error was reported and the error + is not in @quiet. + """ +- # Normally a list is returned which contains the data and its length. +- # If we get just an integer error code, it means the function failed. ++ # Compatibility for SWIG v4.2 and earlier. SWIG 4.2 would drop the first ++ # item from the list if it was None, returning only the second item. + if not isinstance(val, list): +- if -val not in quiet: +- raise FdtException(val) ++ val = [None, val] ++ ++ if val[0] is None: ++ if -val[1] not in quiet: ++ raise FdtException(val[1]) + return val + + class FdtRo(object): +@@ -395,8 +398,8 @@ class FdtRo(object): + """ + pdata = check_err_null( + fdt_get_property_by_offset(self._fdt, prop_offset), quiet) +- if isinstance(pdata, (int)): +- return pdata ++ if pdata[0] is None: ++ return pdata[1] + return Property(pdata[0], pdata[1]) + + def getprop(self, nodeoffset, prop_name, quiet=()): +@@ -417,8 +420,8 @@ class FdtRo(object): + """ + pdata = check_err_null(fdt_getprop(self._fdt, nodeoffset, prop_name), + quiet) +- if isinstance(pdata, (int)): +- return pdata ++ if pdata[0] is None: ++ return pdata[1] + return Property(prop_name, bytearray(pdata[0])) + + def hasprop(self, nodeoffset, prop_name, quiet=()): +@@ -444,10 +447,10 @@ class FdtRo(object): + """ + pdata = check_err_null(fdt_getprop(self._fdt, nodeoffset, prop_name), + quiet + (NOTFOUND,)) +- if isinstance(pdata, (int)): +- if pdata == -NOTFOUND: ++ if pdata[0] is None: ++ if pdata[1] == -NOTFOUND: + return False +- return pdata ++ return pdata[1] + return True + + def get_phandle(self, nodeoffset): +-- +cgit 1.2.3-korg + diff --git a/dtc-1.7.1.tar.xz b/dtc-1.7.1.tar.xz deleted file mode 100644 index 1622f6757cfdd253458b5d4916841ab5955dc77c..0000000000000000000000000000000000000000 Binary files a/dtc-1.7.1.tar.xz and /dev/null differ diff --git a/dtc-1.7.2.tar.xz b/dtc-1.7.2.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..2fc0b01c91d6960b6a53754a118435a67f30e813 Binary files /dev/null and b/dtc-1.7.2.tar.xz differ diff --git a/dtc.spec b/dtc.spec index 9fe43216b3faba7f6aa29c34551faadbcb736952..bb87a8f103845a337cd85a8ffcab5ca79f5b74e9 100644 --- a/dtc.spec +++ b/dtc.spec @@ -1,14 +1,13 @@ -%define _wrong_version_format_terminate_build 0 - Name: dtc -Version: 1.7.1 +Version: 1.7.2 Release: 1 Summary: Device tree compiler License: GPL-2.0-or-later URL: https://devicetree.org/ Source0: https://www.kernel.org/pub/software/utils/%{name}/%{name}-%{version}.tar.xz - +Patch6001: backport-pylibfdt-libfdt.i-fix-backwards-compatibility-of-return-values.patch BuildRequires: gcc make flex bison swig +BuildRequires: pkgconfig(yaml-0.1) >= 0.2.3 BuildRequires: python3-devel python3-setuptools python3-setuptools_scm python3-pip python3-wheel Provides: libfdt = %{version}-%{release} Obsoletes: libfdt < %{version}-%{release} @@ -47,33 +46,19 @@ This package provides python3 bindings for libfdt %build export SETUPTOOLS_SCM_PRETEND_VERSION=%{version} -export EXTRA_CFLAGS="%{build_cflags} " -%if "%toolchain" == "clang" - EXTRA_CFLAGS+="-Wno-error=cast-qual -Wno-error=missing-prototypes -Wno-error=unused-command-line-argument " -%endif -%ifarch ppc64le - EXTRA_CFLAGS+="-fPIC" -%else - EXTRA_CFLAGS+="-fPIE" -%endif -%make_build LDFLAGS="%{build_ldflags}" + +%make_build %install make install DESTDIR=$RPM_BUILD_ROOT PREFIX=$RPM_BUILD_ROOT/usr \ LIBDIR=%{_libdir} BINDIR=%{_bindir} INCLUDEDIR=%{_includedir} V=1 +# we don't want ftdump and it conflicts with freetype-demos, so drop it (rhbz 797805) +rm -f %{buildroot}%{_bindir}/ftdump + %check export SETUPTOOLS_SCM_PRETEND_VERSION=%{version} -export EXTRA_CFLAGS="%{build_cflags} " -%if "%toolchain" == "clang" - EXTRA_CFLAGS+="-Wno-error=cast-qual -Wno-error=missing-prototypes -Wno-error=unused-command-line-argument " -%endif -%ifarch ppc64le - EXTRA_CFLAGS+="-fPIC" -%else - EXTRA_CFLAGS+="-fPIE" -%endif -%make_build check LDFLAGS="%{build_ldflags}" +%make_build %files %license GPL README.license @@ -92,6 +77,9 @@ export EXTRA_CFLAGS="%{build_cflags} " %doc Documentation/manual.txt %changelog +* Thu Jan 23 2025 luckky - 1.7.2-1 +- update to 1.7.2 + * Sun Sep 08 2024 Funda Wang - 1.7.1-1 - update to 1.7.1 diff --git a/dtc.yaml b/dtc.yaml index 410836efb4084f629f57e4e3fb34ef82606e251d..fff8376f267bff5d021b38180a7ba126b3825bbf 100644 --- a/dtc.yaml +++ b/dtc.yaml @@ -1,4 +1,4 @@ version_control: git src_repo: https://git.kernel.org/pub/scm/utils/dtc/dtc.git tag_prefix: ^v -seperator: "." +separator: "."