--- Begin Message ---
Source: libfreecontact-perl
Version: 0.08-10
Severity: important
Tags: ftbfs forky sid patch upstream
User: [email protected]
Usertags: perl-5.42-transition
This package fails to build with Perl 5.42 (currently in experimental.)
https://perl.debian.net/rebuild-logs/perl-5.42/libfreecontact-perl_0.08-10/libfreecontact-perl_0.08-10+b1_amd64-2025-08-20T07:27:17Z.build
dh_auto_build -a
make -j2
make[1]: Entering directory
'/build/libfreecontact-perl-WzTMqo/libfreecontact-perl-0.08'
Running Mkbootstrap for FreeContact ()
chmod 644 "FreeContact.bs"
"/usr/bin/perl" "/usr/share/perl/5.42/ExtUtils/xsubpp" -C++ -hiertype
-noprototypes -typemap '/usr/share/perl/5.42/ExtUtils/typemap' -typemap
'/build/libfreecontact-perl-WzTMqo/libfreecontact-perl-0.08/perlobject.map'
-typemap '/build/libfreecontact-perl-WzTMqo/libfreecontact-perl-0.08/typemap'
-typemap '/build/libfreecontact-perl-WzTMqo/libfreecontact-perl-0.08/typemap'
FreeContact.xs > FreeContact.xsc
cp lib/FreeContact.pm blib/lib/FreeContact.pm
AutoSplitting blib/lib/FreeContact.pm (blib/lib/auto/FreeContact)
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- FreeContact.bs
blib/arch/auto/FreeContact/FreeContact.bs 644
Could not find a typemap for C type 'ali_t&'.
The following C types are mapped by the current typemap:
'AV *', 'Boolean', 'CV *', 'FILE *', 'FileHandle', 'HV *', 'I16', 'I32',
'I8', 'IV', 'InOutStream', 'InputStream', 'NV', 'OutputStream', 'PerlIO *',
'Result', 'STRLEN', 'SV *', 'SVREF', 'SysRet', 'SysRetLong', 'Time_t *', 'U16',
'U32', 'U8', 'UV', 'ali_t', 'bool', 'bool_t', 'caddr_t', 'char', 'char *',
'char **', 'const char *', 'cont_res_t', 'double', 'double *', 'float',
'freq_vec_t', 'freq_vec_t *', 'int', 'long', 'predictor *', 'short', 'size_t',
'ssize_t', 'time_res_t *', 'time_t', 'unsigned', 'unsigned char', 'unsigned
char *', 'unsigned int', 'unsigned long', 'unsigned long *', 'unsigned short',
'void *', 'wchar_t', 'wchar_t *'
in /usr/bin/perl -MExtUtils::XSpp::Cmd -e xspp -- --typemap=typemap.xsp
FreeContact.xsp, line 71
[...]
make[1]: *** [Makefile:367: FreeContact.c] Error 1
make[1]: Leaving directory
'/build/libfreecontact-perl-WzTMqo/libfreecontact-perl-0.08'
dh_auto_build: error: make -j2 returned exit code 2
There have been significant changes in the ExtUtils::ParseXS module
since Perl 5.40, making it more robust against invalid syntax and
the like.
It looks like this module has been relying on ExtUtils::ParseXS ignoring
invalid XS syntax with the C++ references. While there's apparently some
support for those in ExtUtils::XSpp, the problematic parts are passed
straight through to plain XS with the %{ .. %} markers.
A fix/workaround is to just remove the ampersands from the XS code.
That's how ExtUtils::ParseXS has been parsing them until now anyway.
The attached patch does this. I verified that the generated C code stays
identical on Perl 5.40 with this, and has no significant differences on
5.42 either.
I'm not fully certain this is correct, but at least it's not any worse
than it has been until now. And the FreeContact module seems to be dead
upstream, at least its home page and FTP site are gone.
If you want to test changes against Perl 5.42 in experimental and run
into uninstallability problems, there is a test repository of rebuilt
Debian sid packages for amd64 available at <https://perl.debian.net/>.
Thanks for your work on Debian,
--
Niko Tyni [email protected]
>From 8b7527df13a6b1f5ad6a719f2e545ef9aa554aae Mon Sep 17 00:00:00 2001
From: Niko Tyni <[email protected]>
Date: Sat, 30 Aug 2025 19:14:24 +0100
Subject: [PATCH] Remove C++ reference markers from XS code
These code blocks are not handled as XS++ but passed to XS as-is
due to the %{ ... %} markers. The code was always invalid XS code,
and ExtUtils::ParseXS has recently become stricter about parsing it.
Just drop the ampersands, at least as a workaround. This is how
the code was parsed earlier anyway.
---
FreeContact.xsp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/FreeContact.xsp b/FreeContact.xsp
index f002df1..c9e2d85 100644
--- a/FreeContact.xsp
+++ b/FreeContact.xsp
@@ -39,7 +39,7 @@ get_ps_psicov_sd()
%{
void
-predictor::_get_seq_weights( freq_vec_t* __aliw, double* __wtot, ali_t& __ali, double __clustpc, bool __veczw = true, int __num_threads = 0 )
+predictor::_get_seq_weights( freq_vec_t* __aliw, double* __wtot, ali_t __ali, double __clustpc, bool __veczw = true, int __num_threads = 0 )
PREINIT:
freq_vec_t aliw;
double wtot = 0;
@@ -71,7 +71,7 @@ predictor::_get_seq_weights( freq_vec_t* __aliw, double* __wtot, ali_t& __ali, d
%{
cont_res_t
predictor::_run( __ali, __cp, __density, __gapth, __mincontsep, __pseudocnt, __pscnt_weight, __estimate_ivcov, __shrink_lambda, __cov20, __apply_gapth, __rho, __veczw = true, __num_threads = 0, __icme_timeout = 1800, __timing = NULL )
- ali_t& __ali
+ ali_t __ali
double __cp
double __density
double __gapth
@@ -114,7 +114,7 @@ predictor::_run( __ali, __cp, __density, __gapth, __mincontsep, __pseudocnt, __p
%{
cont_res_t
-predictor::_run_with_seq_weights(ali_t& __ali, freq_vec_t &__aliw, double __wtot, double __density, double __gapth, U16 __mincontsep, double __pseudocnt, double __pscnt_weight, bool __estimate_ivcov, double __shrink_lambda, bool __cov20, bool __apply_gapth, double __rho, int __num_threads = 0, time_t __icme_timeout = 1800, time_res_t *__timing = NULL)
+predictor::_run_with_seq_weights(ali_t __ali, freq_vec_t __aliw, double __wtot, double __density, double __gapth, U16 __mincontsep, double __pseudocnt, double __pscnt_weight, bool __estimate_ivcov, double __shrink_lambda, bool __cov20, bool __apply_gapth, double __rho, int __num_threads = 0, time_t __icme_timeout = 1800, time_res_t *__timing = NULL)
PREINIT:
time_res_t timing;
CODE:
--
2.49.0
--- End Message ---