commit:     f29006c0342e1eeabb3ad285fb6fd6cf5608f127
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 10 22:55:10 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Dec 11 04:40:22 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f29006c0

sci-libs/cfitsio: Fix build with modern dev-lang/cfortran

Closes: https://bugs.gentoo.org/803350
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
Part-of: https://github.com/gentoo/gentoo/pull/44984
Closes: https://github.com/gentoo/gentoo/pull/44984
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 sci-libs/cfitsio/cfitsio-4.6.3.ebuild              |   4 +-
 .../files/cfitsio-4.6.3-system-fortran.patch       | 145 +++++++++++++++++++++
 2 files changed, 148 insertions(+), 1 deletion(-)

diff --git a/sci-libs/cfitsio/cfitsio-4.6.3.ebuild 
b/sci-libs/cfitsio/cfitsio-4.6.3.ebuild
index 3b1eff8596d3..029e21beae86 100644
--- a/sci-libs/cfitsio/cfitsio-4.6.3.ebuild
+++ b/sci-libs/cfitsio/cfitsio-4.6.3.ebuild
@@ -28,9 +28,11 @@ RDEPEND="
 # Bug #803350
 DEPEND="
        ${RDEPEND}
-       <dev-lang/cfortran-20110621
+       dev-lang/cfortran
 "
 
+PATCHES=( "${FILESDIR}/${P}-system-fortran.patch" ) # bug #803350
+
 pkg_setup() {
        fortran-2_pkg_setup
 }

diff --git a/sci-libs/cfitsio/files/cfitsio-4.6.3-system-fortran.patch 
b/sci-libs/cfitsio/files/cfitsio-4.6.3-system-fortran.patch
new file mode 100644
index 000000000000..3a93d7b09d25
--- /dev/null
+++ b/sci-libs/cfitsio/files/cfitsio-4.6.3-system-fortran.patch
@@ -0,0 +1,145 @@
+Source:
+https://salsa.debian.org/debian-astro-team/cfitsio/-/blob/master/debian/patches/02-system-cfortran.patch
+
+Use system cfortran header.
+
+--- a/f77_wrap.h
++++ b/f77_wrap.h
+@@ -1,6 +1,6 @@
+ #define UNSIGNED_BYTE
+ 
+-#include "cfortran.h"
++#include <cfortran/cfortran.h>
+ 
+ /************************************************************************
+    Some platforms creates longs as 8-byte integers.  On other machines, ints
+@@ -29,16 +29,16 @@
+ #undef LONGV_cfT
+ #undef PLONG_cfT
+ 
+-#define    LONGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,LONGV,A,B,C,D,E)
+-#define    PLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PLONG,A,B,C,D,E)
++#define    LONGV_cfSTR(N,T,A,B,C,D,E) 
CFORTRAN_XCAT_(CFARGS,N)(T,LONGV,A,B,C,D,E)
++#define    PLONG_cfSTR(N,T,A,B,C,D,E) 
CFORTRAN_XCAT_(CFARGS,N)(T,PLONG,A,B,C,D,E)
+ #define    LONGVVVVVVV_cfTYPE    int
+ #define    PLONG_cfTYPE          int
+-#define    LONGV_cfQ(B)          long *B, _(B,N);
++#define    LONGV_cfQ(B)          long *B, CFORTRAN_XCAT_(B,N);
+ #define    PLONG_cfQ(B)          long B;
+-#define    LONGV_cfT(M,I,A,B,D)  ( (_(B,N) = * _3(M,_LONGV_A,I)), \
+-                                  B = F2Clongv(_(B,N),A) )
++#define    LONGV_cfT(M,I,A,B,D)  ( (CFORTRAN_XCAT_(B,N) = * 
CFORTRAN_XCAT_3(M,_LONGV_A,I)), \
++                                  B = F2Clongv(CFORTRAN_XCAT_(B,N),A) )
+ #define    PLONG_cfT(M,I,A,B,D)  ((B=*A),&B)
+-#define    LONGV_cfR(A,B,D)      C2Flongv(_(B,N),A,B);
++#define    LONGV_cfR(A,B,D)      C2Flongv(CFORTRAN_XCAT_(B,N),A,B);
+ #define    PLONG_cfR(A,B,D)      *A=B;
+ #define    LONGV_cfH(S,U,B)
+ #define    PLONG_cfH(S,U,B)
+@@ -93,7 +93,7 @@ extern unsigned long gMinStrLen;
+                                          A->dsc$w_length, \
+                                          num_elem(A->dsc$a_pointer, \
+                                                   A->dsc$w_length, \
+-                                                  _3(M,_STRV_A,I) ) )
++                                                  
CFORTRAN_XCAT_3(M,_STRV_A,I) ) )
+ #else
+ #ifdef CRAYFortran
+ #define       PPSTRING_cfT(M,I,A,B,D)     (unsigned char*)_fcdtocp(A)
+@@ -103,20 +103,20 @@ extern unsigned long gMinStrLen;
+ #endif
+ 
+ #define _cfMAX(A,B)  ( (A>B) ? A : B )
+-#define  STRINGV_cfQ(B)      char **B; unsigned int _(B,N), _(B,M);
++#define  STRINGV_cfQ(B)      char **B; unsigned int CFORTRAN_XCAT_(B,N), 
CFORTRAN_XCAT_(B,M);
+ #define  STRINGV_cfR(A,B,D)  free(B[0]); free(B);
+ #define  TTSTR(    A,B,D)  \
+             ((B=(char*)malloc(_cfMAX(D,gMinStrLen)+1))[D]='\0',memcpy(B,A,D), 
\
+                kill_trailing(B,' '))
+ #define  TTTTSTRV( A,B,D,E)  ( \
+-            _(B,N)=_cfMAX(E,1), \
+-            _(B,M)=_cfMAX(D,gMinStrLen)+1, \
+-            B=(char**)malloc(_(B,N)*sizeof(char*)), \
+-            B[0]=(char*)malloc(_(B,N)*_(B,M)), \
+-            vindex(B,_(B,M),_(B,N),f2cstrv2(A,B[0],D,_(B,M),_(B,N))) \
++            CFORTRAN_XCAT_(B,N)=_cfMAX(E,1), \
++            CFORTRAN_XCAT_(B,M)=_cfMAX(D,gMinStrLen)+1, \
++            B=(char**)malloc(CFORTRAN_XCAT_(B,N)*sizeof(char*)), \
++            B[0]=(char*)malloc(CFORTRAN_XCAT_(B,N)*CFORTRAN_XCAT_(B,M)), \
++            
vindex(B,CFORTRAN_XCAT_(B,M),CFORTRAN_XCAT_(B,N),f2cstrv2(A,B[0],D,CFORTRAN_XCAT_(B,M),CFORTRAN_XCAT_(B,N)))
 \
+             )
+ #define  RRRRPSTRV(A,B,D)    \
+-            c2fstrv2(B[0],A,_(B,M),D,_(B,N)), \
++            c2fstrv2(B[0],A,CFORTRAN_XCAT_(B,M),D,CFORTRAN_XCAT_(B,N)), \
+             free(B[0]), \
+             free(B);
+ 
+@@ -169,10 +169,10 @@ static char *f2cstrv2(char *fstr, char*
+ #undef   BYTE_cfSTR
+ #undef   BYTEV_cfSTR
+ 
+-#define   BYTE_cfINT(N,A,B,X,Y,Z)      _(CFARGS,N)(A,BYTE,B,X,Y,Z,0)
+-#define   BYTEV_cfINT(N,A,B,X,Y,Z)     _(CFARGS,N)(A,BYTEV,B,X,Y,Z,0)
+-#define   BYTE_cfSTR(N,T,A,B,C,D,E)    _(CFARGS,N)(T,BYTE,A,B,C,D,E)
+-#define   BYTEV_cfSTR(N,T,A,B,C,D,E)   _(CFARGS,N)(T,BYTEV,A,B,C,D,E)
++#define   BYTE_cfINT(N,A,B,X,Y,Z)      
CFORTRAN_XCAT_(CFARGS,N)(A,BYTE,B,X,Y,Z,0)
++#define   BYTEV_cfINT(N,A,B,X,Y,Z)     
CFORTRAN_XCAT_(CFARGS,N)(A,BYTEV,B,X,Y,Z,0)
++#define   BYTE_cfSTR(N,T,A,B,C,D,E)    
CFORTRAN_XCAT_(CFARGS,N)(T,BYTE,A,B,C,D,E)
++#define   BYTEV_cfSTR(N,T,A,B,C,D,E)   
CFORTRAN_XCAT_(CFARGS,N)(T,BYTEV,A,B,C,D,E)
+ #define   BYTE_cfSEP(T,B)              INT_cfSEP(T,B)
+ #define   BYTEV_cfSEP(T,B)             INT_cfSEP(T,B)
+ #define   BYTE_cfH(S,U,B)              STRING_cfH(S,U,B)
+@@ -211,11 +211,11 @@ static char *f2cstrv2(char *fstr, char*
+ 
+ #undef  LOGICALV_cfSTR
+ #undef  LOGICALV_cfT
+-#define LOGICALV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,LOGICALV,A,B,C,D,E)
+-#define LOGICALV_cfQ(B)               char *B; unsigned int _(B,N);
+-#define LOGICALV_cfT(M,I,A,B,D)       (_(B,N)= * _3(M,_LOGV_A,I), \
+-                                            B=F2CcopyLogVect(_(B,N),A))
+-#define LOGICALV_cfR(A,B,D)           C2FcopyLogVect(_(B,N),A,B);
++#define LOGICALV_cfSTR(N,T,A,B,C,D,E) 
CFORTRAN_XCAT_(CFARGS,N)(T,LOGICALV,A,B,C,D,E)
++#define LOGICALV_cfQ(B)               char *B; unsigned int 
CFORTRAN_XCAT_(B,N);
++#define LOGICALV_cfT(M,I,A,B,D)       (CFORTRAN_XCAT_(B,N)= * 
CFORTRAN_XCAT_3(M,_LOGV_A,I), \
++                                            
B=F2CcopyLogVect(CFORTRAN_XCAT_(B,N),A))
++#define LOGICALV_cfR(A,B,D)           C2FcopyLogVect(CFORTRAN_XCAT_(B,N),A,B);
+ #define LOGICALV_cfH(S,U,B)
+ 
+ static char *F2CcopyLogVect(long size, int *A)
+@@ -268,20 +268,20 @@ extern fitsfile *gFitsFiles[];       /*
+                              memchr(A,'\0',D) ? A : TTSTR(A,B,D)
+ 
+ #define FCALLSCFUN0(T0,CN,UN,LN) \
+-  CFextern _(T0,_cfFZ)(UN,LN) void ABSOFT_cf2(T0)); \
+-  CFextern _(T0,_cfFZ)(UN,LN) void ABSOFT_cf2(T0))  \
+-  {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) _(T0,_cfI)}
++  CFextern CFORTRAN_XCAT_(T0,_cfFZ)(UN,LN) void ABSOFT_cf2(T0)); \
++  CFextern CFORTRAN_XCAT_(T0,_cfFZ)(UN,LN) void ABSOFT_cf2(T0))  \
++  {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) 
CFORTRAN_XCAT_(T0,_cfI)}
+ 
+ #define FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)   
 \
+-  CFextern _(T0,_cfF)(UN,LN)                                                  
 \
++  CFextern CFORTRAN_XCAT_(T0,_cfF)(UN,LN)                                     
              \
+   
CFARGT14(NCF,DCF,ABSOFT_cf2(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)); \
+-  CFextern _(T0,_cfF)(UN,LN)                                                  
 \
++  CFextern CFORTRAN_XCAT_(T0,_cfF)(UN,LN)                                     
              \
+   CFARGT14(NCF,DCF,ABSOFT_cf2(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)) 
 \
+   {                 CFARGT14S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)  
 \
+   _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0)      CN(  TCF(LN,T1,1,0) 
TCF(LN,T2,2,1) \
+     TCF(LN,T3,3,1) TCF(LN,T4,4,1) TCF(LN,T5,5,1) TCF(LN,T6,6,1) 
TCF(LN,T7,7,1) \
+     TCF(LN,T8,8,1) TCF(LN,T9,9,1) TCF(LN,TA,10,1) TCF(LN,TB,11,1) 
TCF(LN,TC,12,1) \
+     TCF(LN,TD,13,1) TCF(LN,TE,14,1) );                          
_Icf(0,K,T0,0,0) \
+-    CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)        
_(T0,_cfI) \
++    CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)        
CFORTRAN_XCAT_(T0,_cfI) \
+   }
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -12,7 +12,7 @@ soname_version = @version_info@
+ soname_version_lnx = ${soname_version}.0.0
+ 
+ include_HEADERS = fitsio.h fitsio2.h longnam.h drvrsmem.h \
+-      cfortran.h f77_wrap.h region.h
++      f77_wrap.h region.h
+ 
+ F77_WRAPPERS = f77_wrap1.c f77_wrap2.c f77_wrap3.c f77_wrap4.c
+ 

Reply via email to