Accepting request 1224617 from home:StefanBruens:branches:science

- Fix building without octave. The requires_eq macro must expand
  correctly, even when its result is discarded.
- Add compatibility with SWIG 4.3.0, add
  * lalsuite_fix_swig_4_3_0_compat.patch
  * lalsuite_fix_swig_4_3_0_compat_2.patch

OBS-URL: https://build.opensuse.org/request/show/1224617
OBS-URL: https://build.opensuse.org/package/show/science/lal?expand=0&rev=39
This commit is contained in:
Dmitry Roshchin 2024-11-18 08:12:47 +00:00 committed by Git OBS Bridge
commit 859a89a8f7
11 changed files with 728 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

8
_constraints Normal file
View File

@ -0,0 +1,8 @@
<constraints>
<hardware>
<physicalmemory>
<size unit="G">4</size>
</physicalmemory>
</hardware>
</constraints>

3
_multibuild Normal file
View File

@ -0,0 +1,3 @@
<multibuild>
<package>test</package>
</multibuild>

3
lal-7.4.1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5c840d00e91a51d03d3d8cdc358fd8e5597929e52eecefd15c49cc9833fc1ace
size 2366072

3
lal-7.5.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9bb692013c534880cf3eeb7c8e45c2a32bd6d74e7cf0c6918f638bc15bd0cf5d
size 2358600

3
lal-7.6.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c173ff3112065706dc0ad1cc5062b32ae72a25de1a079bad9d198f657b82e463
size 2384632

300
lal.changes Normal file
View File

@ -0,0 +1,300 @@
-------------------------------------------------------------------
Sun Nov 17 02:58:29 UTC 2024 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Fix building without octave. The requires_eq macro must expand
correctly, even when its result is discarded.
- Add compatibility with SWIG 4.3.0, add
* lalsuite_fix_swig_4_3_0_compat.patch
* lalsuite_fix_swig_4_3_0_compat_2.patch
-------------------------------------------------------------------
Sun Sep 8 20:22:02 UTC 2024 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.6.0:
* No release notes.
* Numpy 2 compatibilty.
-------------------------------------------------------------------
Sat Jul 20 01:52:02 UTC 2024 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.5.0:
* No release notes.
-------------------------------------------------------------------
Thu Jan 18 15:13:14 UTC 2024 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.4.1:
* No release notes.
- Enable builds on non-x84_64 archs, issue fixed.
-------------------------------------------------------------------
Fri May 26 14:30:47 UTC 2023 - Atri Bhattacharya <badshah400@gmail.com>
- Fix a couple of incorrect hashbangs on executable scripts.
-------------------------------------------------------------------
Tue Apr 18 10:35:22 UTC 2023 - pgajdos@suse.com
- version update to 7.3.1
* no changelog found
- python-six is not required
https://trello.com/c/MO53MocR/143-remove-python3-six
- deleted patches
- replace_numpy_object.patch (upstreamed)
- swig_4_1_compat.patch (upstreamed)
-------------------------------------------------------------------
Sat Jan 28 06:06:33 UTC 2023 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Fix build after numpy 1.24 API changes, add
replace_numpy_object.patch
- Explicitly add python3-py dependency, no longer pulled in by
pytest
- Replace broken python_compileall macro by correct compileall
invocation (>= 3.9 only, skip with 3.8), make reproducible
- Disable build on all architecture where char is unsigned
-------------------------------------------------------------------
Sat Nov 26 02:40:59 UTC 2022 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Update to version 7.2.4:
* No release notes.
- Fix build with Swig 4.1.0, add swig_4_1_compat.patch
-------------------------------------------------------------------
Fri Aug 19 11:54:33 UTC 2022 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.2.0:
* No release notes.
- Update source URL.
-------------------------------------------------------------------
Thu Jun 23 22:58:37 UTC 2022 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.1.7:
* No release notes.
-------------------------------------------------------------------
Sun Jan 2 23:16:49 UTC 2022 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.1.5:
* No release notes.
- Disable python2 since this is no longer supported by upstream.
-------------------------------------------------------------------
Fri Sep 10 14:48:22 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Fix test flavour after renaming srcrpm in previous commit.
-------------------------------------------------------------------
Sun May 16 15:14:20 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Fix srcrpm name for test flavor.
-------------------------------------------------------------------
Wed Apr 21 10:59:16 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Split tests into a multibuild flavor to avoid circular
BuildRequires with python-ligo-lw and other test requirements.
-------------------------------------------------------------------
Fri Feb 26 22:23:19 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.1.2:
* no release notes.
-------------------------------------------------------------------
Fri Feb 12 20:32:18 UTC 2021 - Ben Greiner <code@bnavigator.de>
- Update to 7.1.1
* no release notes
- Skip python36 build. Due to NEP 29, python36-numpy and scipy in
TW are no more.
-------------------------------------------------------------------
Thu Jan 21 22:58:57 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Recommend rather than require python-ligo-lw and
python-ligo-segments to avoid circular dependencies (these pkgs
also require lal).
-------------------------------------------------------------------
Mon Jan 18 21:09:11 UTC 2021 - Benjamin Greiner <code@bnavigator.de>
- Fix the test suite setup to actually call the tests
-------------------------------------------------------------------
Mon Jan 18 13:49:55 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Drop lscsoft-glue BuildRequires: no longer required and prevents
circular dependency with lscsoft-glue which indeed needs lal for
its tests.
-------------------------------------------------------------------
Mon Dec 21 22:11:03 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.1.0:
* No release notes.
- Drop lal-implicit-conversion-XLALError.patch: fixed properly
upstream.
- Add BuildRequires: python3-ligo-lw, needed for new tests.
- Disable octave bindings: does not support octave >= 6.
-------------------------------------------------------------------
Fri Oct 30 09:52:37 UTC 2020 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Build without octave bindings on Leap 15.x, requires SWIG 4.0
-------------------------------------------------------------------
Sun Oct 25 17:56:07 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Specfile cleanups with spec-cleaner.
- Update URL in keeping with upstream change.
-------------------------------------------------------------------
Sat Aug 15 08:25:42 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Run tests as part of %check; add necessary BuildRequires:
python3-scipy, python3-six, python3-freezegun,
python3-python-dateutil, python3-ligo-segments, and
python3-pytest for python3 tests to succeed (don't run tests for
python2).
- Add Requires: python-six, python-freezegun,
python-python-dateutil, python-scipy, and python-ligo-segments
as tests show these packages are needed for the python modules
to work meaningfully.
- ExcludeArch 32-bit, as tests fail and upstream confirms that it
is not supported
(https://git.ligo.org/lscsoft/lalsuite/-/issues/371).
-------------------------------------------------------------------
Mon Jul 6 21:17:26 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 7.0.0:
* No release notes.
- Re-enable octave support; compilation error seems to be fixed
upstream.
-------------------------------------------------------------------
Tue Jun 30 09:30:36 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Disable octave support as compilation error with current swig.
-------------------------------------------------------------------
Sat Jun 6 12:09:59 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Add lal-implicit-conversion-XLALError.patch to fix an implicit
conversion error flagged by GCC 10.
-------------------------------------------------------------------
Fri May 15 13:07:39 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Drop ExclusiveArch: x86_64: recent versions build on other archs
just fine.
- swig >= 4.0 is required when building octave support (for octave
>= 5.0).
-------------------------------------------------------------------
Thu Apr 23 13:33:00 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Add Requires: python-numpy, python-lscsoft-glue required by the
python module.
-------------------------------------------------------------------
Fri Apr 3 01:15:58 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 6.22.0.
- Drop lal-build-octave44-with-swig3.patch: Incorporated upstream;
drop BuildRequires: libtool and don't run autoreconf before
configure required due to this patch.
-------------------------------------------------------------------
Sun Feb 2 22:59:09 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 6.21.0:
* O3b release
- Rebase lal-build-octave44-with-swig3.patch to conform to
upstream's reworking for swig and octave version tests.
-------------------------------------------------------------------
Mon Sep 30 15:11:36 UTC 2019 - Atri Bhattacharya <badshah400@gmail.com>
- Build both python2 and python3 flavours.
-------------------------------------------------------------------
Mon Jul 22 12:25:58 UTC 2019 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 6.20.2
* MKL FFT fixes
- Changes from version 6.20.1:
* O3 point release.
- Changes from version 6.20.0:
* O3 release.
- Update shared lib package names in keeping with upstream so
versioning.
- Rebase lal-build-octave44-with-swig3.patch to conform to
upstream's reworking for swig and octave version tests.
-------------------------------------------------------------------
Fri Feb 8 13:32:33 UTC 2019 - badshah400@gmail.com
- Switch builds to python2.
-------------------------------------------------------------------
Thu Feb 7 14:28:59 UTC 2019 - badshah400@gmail.com
- Add fftw3 and gsl to -devel package's Requires.
- Drop -devel pkg requirement for octave-lal.
-------------------------------------------------------------------
Sun Jan 27 15:00:41 UTC 2019 - badshah400@gmail.com
- Add zlib-devel Requires for -devel pkg: required for compiling
code that makes use of lalsupport.
-------------------------------------------------------------------
Sat Jan 26 21:27:42 UTC 2019 - badshah400@gmail.com
- Update to version 6.19.1.
-------------------------------------------------------------------
Sat Jan 26 20:27:31 UTC 2019 - badshah400@gmail.com
- Add _constraints file to ensure enough memory during building.
-------------------------------------------------------------------
Fri Jan 25 16:46:55 UTC 2019 - badshah400@gmail.com
- Add lal-build-octave44-with-swig3.patch: allow building octave
bindings with swig 3.0.x rather than requiring swig 4.x.
-------------------------------------------------------------------
Wed Nov 28 17:20:43 UTC 2018 - badshah400@gmail.com
- Update to version 6.19.0.
- Drop patches incorporated upstream:
* lal-int-in-boolean-context.patch
* lal-implicit-fallthrough.patch
* lal-format-truncate.patch
- New BuildRequires: python-numpy-devel
- Update lalsupport shlib version: 11 -> 12.
- Exclusively build on x86_64 arch; other archs not supported.
- Update URL: upstream URL changed.
-------------------------------------------------------------------
Fri Jun 15 11:22:10 UTC 2018 - badshah400@gmail.com
- Add patches from upstream to fix compilation against gcc >= 7.1:
* lal-int-in-boolean-context.patch: Avoid '*' in boolean
expressions to avoid int-in-boolean-context warnings from gcc.
* lal-implicit-fallthrough.patch: Avoid implict-fallthrough
warnings when compiling against GCC >= 7.
* lal-format-truncate.patch: GCC >= 7 does not allow snprintf()
return values to go unchecked when it believes there is a risk
of the result being truncated; update patch to include
additional fix.
-------------------------------------------------------------------
Fri Jun 15 11:22:07 UTC 2018 - badshah400@gmail.com
- Initial package.

252
lal.spec Normal file
View File

@ -0,0 +1,252 @@
#
# spec file for package lal
#
# Copyright (c) 2024 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/
#
%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "test"
%bcond_without test
%define psuffix -test
%else
%bcond_with test
%define psuffix %{nil}
%endif
# NEP 29: numpy, scipy do not have a python36 flavor package in TW
%define skip_python36 1
# Py2 no longer supported by upstream
%define skip_python2 1
%define shliblal liblal20
%define shliblalsupport liblalsupport14
# No support for octave >= 6
%bcond_with octave
Name: lal%{psuffix}
Version: 7.6.0
Release: 0
Summary: A collection of various gravitational wave data analysis routines
License: GPL-2.0-only
Group: Productivity/Scientific/Physics
URL: https://wiki.ligo.org/Computing/LALSuite
Source: https://software.igwn.org/sources/source/lalsuite/lal-%{version}.tar.xz
# PATCH-FIX-UPSTREAM
Patch0: https://git.ligo.org/lscsoft/lalsuite/-/commit/9dba245ab3692ecf691247a442704f13c075ed34.patch#/lalsuite_fix_swig_4_3_0_compat.patch
# PATCH-FIX-UPSTREAM
Patch1: https://git.ligo.org/lscsoft/lalsuite/-/commit/e12d57e893882c1603778018139ed9060579c8a7.patch#/lalsuite_fix_swig_4_3_0_compat_2.patch
BuildRequires: %{python_module devel}
BuildRequires: %{python_module numpy-devel}
BuildRequires: %{python_module numpy}
BuildRequires: %{python_module xml}
BuildRequires: bc
BuildRequires: fdupes
BuildRequires: hdf5-devel
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: pkgconfig(fftw3)
BuildRequires: pkgconfig(gsl)
BuildRequires: pkgconfig(zlib)
Requires: python-freezegun
Requires: python-numpy
Requires: python-python-dateutil
Requires: python-scipy
Recommends: python-ligo-lw
Recommends: python-ligo-segments
%if %{with octave}
BuildRequires: octave-devel
BuildRequires: swig >= 4.0
%else
BuildRequires: swig >= 3.0
%endif
%if %{with test}
# SECTION For tests (only the default python3 flavor)
BuildRequires: python3-freezegun
BuildRequires: python3-ligo-lw
BuildRequires: python3-ligo-segments
# python3-py - remove with next update -- https://git.ligo.org/lscsoft/lalsuite/-/merge_requests/2033
BuildRequires: python3-py
BuildRequires: python3-pytest
BuildRequires: python3-python-dateutil
BuildRequires: python3-scipy
# /SECTION
%endif
%python_subpackages
%description
The LSC Algorithm Library Suite (LALSuite) is comprised of various
gravitational wave data analysis routines written in C following the ISO/IEC
9899:1999 standard.
%package -n %{shliblal}
Summary: Shared library for LAL
Group: System/Libraries
%description -n %{shliblal}
The LSC Algorithm Library Suite (LALSuite) is comprised of various
gravitational wave data analysis routines written in C following the ISO/IEC
9899:1999 standard.
This package provides the shared library for lal.
%package -n %{shliblalsupport}
Summary: Shared library for LALSupport
Group: System/Libraries
%description -n %{shliblalsupport}
The LSC Algorithm Library Suite (LALSuite) is comprised of various
gravitational wave data analysis routines written in C following the ISO/IEC
9899:1999 standard.
This package provides the shared library for lalsupport.
%package -n %{name}-devel
Summary: Headers and source files for building against lal
Group: Productivity/Scientific/Physics
Requires: %{shliblalsupport} = %{version}
Requires: %{shliblal} = %{version}
Requires: pkgconfig(fftw3)
Requires: pkgconfig(gsl)
Requires: pkgconfig(zlib)
%description -n %{name}-devel
The LSC Algorithm Library Suite (LALSuite) is comprised of various
gravitational wave data analysis routines written in C following the ISO/IEC
9899:1999 standard.
This package provides the header files and sources need for building software against lal.
%package -n octave-lal
Summary: Octave module for lal
Group: Productivity/Scientific/Physics
%if %{with octave}
%requires_eq octave-cli
%endif
%description -n octave-lal
The LSC Algorithm Library Suite (LALSuite) is comprised of various
gravitational wave data analysis routines written in C following the ISO/IEC
9899:1999 standard.
This package provides the octave module for lal.
%prep
%autosetup -p2 -n lal-%{version}
%build
%{python_expand # Necessary to run configure with all python flavors
export PYTHON=$python
mkdir ../${PYTHON}_build
cp -pr ./ ../${PYTHON}_build
pushd ../${PYTHON}_build
%configure \
%{?with_octave:--enable-swig-octave} \
%{!?with_octave:--disable-swig-octave}
%make_build
popd
}
%install
%if %{without test}
%{python_expand # all python flavors as configured above
export PYTHON=$python
pushd ../${PYTHON}_build
%make_install
popd
}
rm %{buildroot}%{_sysconfdir}/*
find %{buildroot} -type f -name "*.la" -delete -print
find %{buildroot}%{_libdir} -name "*.a" -delete -print
%{python_expand # FIX env HASHBANGS
sed -Ei "1{/^#!\/usr\/bin\/env python/d}" \
%{buildroot}%{$python_sitearch}/lal/{gpstime,series,antenna}.py
rm %{buildroot}%{$python_sitearch}/lal/__pycache__/{gpstime,series,antenna}*.pyc
# Only compileall >= 3.9 has '-s strip_prefix' option
if [ %{$python_version_nodots} -ge 39 ]; then \
for d in %{buildroot}%{$python_sitelib} %{buildroot}%{$python_sitearch}; do \
if [ -d $d ]; then \
$python -m compileall -s %{buildroot} $d; \
$python -O -m compileall -s %{buildroot} $d; \
fi; \
done \
fi;
}
# python_compileall is broken, see https://github.com/openSUSE/python-rpm-macros/issues/150
#%%{?python_compileall}
%{python_expand # Verify we don't have broken cache files
# "-exec false {} +" makes the return code nonzero on match
find %{buildroot}%{$python_sitearch} -iname \*pyc -type f \( -exec grep 'home/abuild' '{}' \; -and -exec false '{}' \+ \)
}
%python_expand %fdupes %{buildroot}%{$python_sitearch}/
# Fix broken hashbang
sed -Ei "1{s|(python3\.?[0-9]*)|%{_bindir}/\1|}" %{buildroot}%{_bindir}/lal_{path2cache,searchsum2cache}
%endif
%check
%if %{with test}
%{python_expand # Run tests from the build dir of the primary python3 flavor only
if [ "$python_" = "python3_" -o "%{$python_provides}" = "python3" ]; then
export PYTHON=$python
pushd ../${PYTHON}_build
%make_build check
popd
fi
}
%endif
%if %{without test}
%post -n %{shliblal} -p /sbin/ldconfig
%post -n %{shliblalsupport} -p /sbin/ldconfig
%postun -n %{shliblal} -p /sbin/ldconfig
%postun -n %{shliblalsupport} -p /sbin/ldconfig
%files %{python_files}
%{python_sitearch}/lal/
%files -n %{shliblal}
%{_libdir}/liblal.so.*
%files -n %{shliblalsupport}
%{_libdir}/liblalsupport.so.*
%files -n %{name}-devel
%doc AUTHORS README.md
%license COPYING
%{_bindir}/*
%{_includedir}/lal/
%{_libdir}/liblal.so
%{_libdir}/liblalsupport.so
%{_libdir}/pkgconfig/*.pc
%{_mandir}/man7/*.7%{?ext_man}
%if %{with octave}
%files -n octave-lal
%dir %{_libdir}/octave/*/site
%dir %{_libdir}/octave/*/site/oct
%dir %{_libdir}/octave/*/site/oct/*
%{_libdir}/octave/*/site/oct/*/*.oct
%endif
%endif
%changelog

View File

@ -0,0 +1,33 @@
From 9dba245ab3692ecf691247a442704f13c075ed34 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 24 Oct 2024 18:06:30 +1100
Subject: [PATCH] common/swig/generate_swig_iface.py: prefer "stringval" before
"value" attribute
- As of SWIG 4.3.0 "value" attribute contains quote characters
- "stringval" attribute appears to still contain the raw string
---
common/swig/generate_swig_iface.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/common/swig/generate_swig_iface.py b/common/swig/generate_swig_iface.py
index 530b026d5d..eaee2d41ce 100644
--- a/common/swig/generate_swig_iface.py
+++ b/common/swig/generate_swig_iface.py
@@ -195,9 +195,11 @@ class SwigSymbols(object):
"""Parse a swiglal macro
"""
cdecl_name = get_swig_attr(cdecl, 'name')
- cdecl_value = get_swig_attr(cdecl, 'value')
+ cdecl_value = get_swig_attr(cdecl, 'stringval')
if not cdecl_value:
- raise ValueError("cdecl '{}' has no value".format(cdecl_name))
+ cdecl_value = get_swig_attr(cdecl, 'value')
+ if not cdecl_value:
+ raise ValueError("cdecl '{}' has no value".format(cdecl_name))
macro = re.sub(r'\s', '', cdecl_value)
if cdecl_name == '__swiglal__':
if macro in clear_macros:
--
GitLab

View File

@ -0,0 +1,99 @@
From e12d57e893882c1603778018139ed9060579c8a7 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 24 Oct 2024 21:37:48 +1100
Subject: [PATCH] lal/swig/SWIGCommon.i: refactor SWIGLAL_MAYBE_RETURN_INT
typemap
- New behaviour of SWIG_Python_AppendOutput() makes it more difficult
to not add XLAL error code at start of output argument list
- Instead, always add XLAL error code at start of output argument list,
them remove it later in "newfree" typemap
---
lal/swig/SWIGCommon.i | 23 +++++------------------
lal/swig/SWIGOctave.i | 6 ++++--
lal/swig/SWIGPython.i | 16 +++++++++++++---
3 files changed, 22 insertions(+), 23 deletions(-)
diff --git a/lal/swig/SWIGCommon.i b/lal/swig/SWIGCommon.i
index bb6dc62e6e..3ce595e232 100644
--- a/lal/swig/SWIGCommon.i
+++ b/lal/swig/SWIGCommon.i
@@ -1650,24 +1650,11 @@ if (strides[I-1] == 0) {
/// ignored in the wrappings. Functions which fit this criteria but do return a useful <tt>int</tt> can
/// use <b>SWIGLAL(RETURN_VALUE(int, ...))</b> to disable this behaviour.
///
-/// For functions, since <tt>%feature("new")</tt> is set, the <tt>out</tt> typemap will have <tt>$owner=1</tt>,
-/// and the <tt>newfree</tt> typemap is also applied. The <tt>out</tt> typemap ignores the <tt>int</tt> return value
-/// by setting the output argument list to <tt>VOID_Object</tt>; the wrapping function them proceeds to
-/// add other output arguments to the list, if any. After this, the <tt>newfree</tt> typemap is triggered,
-/// which appends the <tt>int</tt> return if the output argument list is empty, using the
-/// scripting-language-specific macro \b swiglal_append_output_if_empty(). For structs,
-/// <tt>$owner=0</tt>, so the int return is set straight away, and the <tt>newfree</tt> typemap is never
-/// applied.
-///
-%typemap(out, noblock=1, fragment=SWIG_From_frag(int)) int SWIGLAL_MAYBE_RETURN_INT {
-%#if $owner
- %set_output(VOID_Object);
-%#else
- %set_output(SWIG_From(int)($1));
-%#endif
-}
-%typemap(newfree, noblock=1, fragment=SWIG_From_frag(int)) int SWIGLAL_MAYBE_RETURN_INT {
- swiglal_append_output_if_empty(SWIG_From(int)($1));
+/// For functions, the <tt>newfree</tt> typemap is applied, which calls the scripting-language-specific macro
+/// \b swiglal_maybe_return_int(). For structs, the <tt>newfree</tt> typemap is never applied.
+///
+%typemap(newfree, noblock=1) int SWIGLAL_MAYBE_RETURN_INT {
+ swiglal_maybe_return_int();
}
///
diff --git a/lal/swig/SWIGOctave.i b/lal/swig/SWIGOctave.i
index d2ef3cbdbc..8c0ea50da4 100644
--- a/lal/swig/SWIGOctave.i
+++ b/lal/swig/SWIGOctave.i
@@ -65,9 +65,11 @@ extern "C++" {
#define swiglal_get_reference(v) (v)
%}
-// Append an argument to the output argument list of an Octave SWIG-wrapped function, if the list is empty.
+// Remove the first argument (i.e. the XLAL error code) from the output argument list of an
+// Octave SWIG-wrapped function, if the list has more than one output argument.
%header %{
-#define swiglal_append_output_if_empty(v) if (_outp->length() == 0) _outp = SWIG_Octave_AppendOutput(_outp, v)
+#define swiglal_maybe_return_int() \
+ if (_out.length() > 1) _out = _out.slice(1, _out.length() - 1)
%}
// Evaluates true if an octave_value represents a null pointer, false otherwise.
diff --git a/lal/swig/SWIGPython.i b/lal/swig/SWIGPython.i
index 2482a8580f..8f332822d1 100644
--- a/lal/swig/SWIGPython.i
+++ b/lal/swig/SWIGPython.i
@@ -86,10 +86,20 @@ import_array();
SWIGINTERNINLINE PyObject* swiglal_get_reference(PyObject* v) { Py_XINCREF(v); return v; }
%}
-// Append an argument to the output argument list of an Python SWIG-wrapped function, if the list is
-// empty.
+// Remove the first argument (i.e. the XLAL error code) from the output argument list of a
+// Python SWIG-wrapped function, if the list has more than one output argument.
%header %{
-#define swiglal_append_output_if_empty(v) if (resultobj == Py_None) resultobj = SWIG_Python_AppendOutput(resultobj, v)
+SWIGINTERN PyObject* swiglal_py_remove_first_output(PyObject *result) {
+ PySequence_DelItem(result, 0);
+ if (PySequence_Size(result) == 1) {
+ PyObject *obj = result;
+ result = PySequence_GetItem(obj, 0);
+ Py_DECREF(obj);
+ }
+ return result;
+}
+#define swiglal_maybe_return_int() \
+ if (PySequence_Check(resultobj) && PySequence_Size(resultobj) > 1) resultobj = swiglal_py_remove_first_output(resultobj)
%}
// Evaluates true if a PyObject represents a null pointer, false otherwise.
--
GitLab