[Debian-astro-maintainers] Bug#1026237: tcl-fitstcl: FTBFS with cfitsio 4.2.0 / new upstream version 2.5
Aurelien Jarno
aurel32 at debian.org
Fri Dec 16 21:43:25 GMT 2022
Source: tcl-fitstcl
Version: 2.4-4
Severity: important
Tags: ftbfs patch upstream
Hi Ole,
A new version of cfitsio has been released recently, and it fixes a few
security issues, but it also includes a soname change, meaning we have
to do a transition. I would like to try to get it into bookworm. So far
the version 4.2.0 is already in experimental.
I have tried to rebuild all the reverse dependencies and it appears that
unfortunately tcl-fitstcl fails to build against it. It is not fully
surprising, given it accesses internal cfitsio structures. However NASA
just released version 2.5 [1] which adds support for cfitsio 4.2.0 (but
removes support for older versions). The debian package also need some
changes to make it working, I have attached the debdiff I ended up with.
Would it be possible to upload this new version to experimental asap,
and if we can still get a transition slot, synchronize the upload to
unstable with cfitsio?
Thanks,
Aurelien
[1] https://heasarc.gsfc.nasa.gov/docs/software/lheasoft/ftools/fv/fitsTcl_home.html
-------------- next part --------------
diff -Nru tcl-fitstcl-2.4/debian/control tcl-fitstcl-2.5/debian/control
--- tcl-fitstcl-2.4/debian/control 2019-02-28 21:06:35.000000000 +0000
+++ tcl-fitstcl-2.5/debian/control 2022-12-16 21:17:19.000000000 +0000
@@ -5,7 +5,7 @@
Uploaders: Ole Streicher <olebole at debian.org>
Build-Depends: debhelper (>= 12),
dh-autoreconf,
- libcfitsio-dev | libcfitsio3-dev,
+ libcfitsio-dev (>= 4.2.0),
tcl-dev,
wcslib-dev
Standards-Version: 4.3.0
diff -Nru tcl-fitstcl-2.4/debian/patches/Propagate-CPPFLAGS-and-LDFLAGS-for-hardening.patch tcl-fitstcl-2.5/debian/patches/Propagate-CPPFLAGS-and-LDFLAGS-for-hardening.patch
--- tcl-fitstcl-2.4/debian/patches/Propagate-CPPFLAGS-and-LDFLAGS-for-hardening.patch 2019-02-28 21:03:49.000000000 +0000
+++ tcl-fitstcl-2.5/debian/patches/Propagate-CPPFLAGS-and-LDFLAGS-for-hardening.patch 2022-12-16 21:17:19.000000000 +0000
@@ -19,7 +19,7 @@
+ ${CC} -c -o ${<D}/${@F} ${CPPFLAGS} ${CFLAGS} ${DEFS} ${IFLAGS} $<
#
- # $Log: Makefile.in,v $
+ # $Log$
diff --git a/configure.in b/configure.in
index e5c8d3b..fb969eb 100644
--- a/configure.in
diff -Nru tcl-fitstcl-2.4/debian/patches/Remove-the-need-of-a-private-cfitsio-source-copy.patch tcl-fitstcl-2.5/debian/patches/Remove-the-need-of-a-private-cfitsio-source-copy.patch
--- tcl-fitstcl-2.4/debian/patches/Remove-the-need-of-a-private-cfitsio-source-copy.patch 2019-02-28 21:03:49.000000000 +0000
+++ tcl-fitstcl-2.5/debian/patches/Remove-the-need-of-a-private-cfitsio-source-copy.patch 2022-12-16 21:17:19.000000000 +0000
@@ -121,7 +121,7 @@
index 0000000..b4dd982
--- /dev/null
+++ b/eval_defs.h
-@@ -0,0 +1,159 @@
+@@ -0,0 +1,205 @@
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
@@ -134,15 +134,19 @@
+#endif
+#include "fitsio2.h"
+
-+#ifndef FFBISON
-+#include "eval_tab.h"
-+#endif
-+
+#define MAXDIMS 5
+#define MAXSUBS 10
+#define MAXVARNAME 80
+#define CONST_OP -1000
+#define pERROR -1
++#define MAX_STRLEN 256
++#define MAX_STRLEN_S "255"
++
++typedef struct ParseData_struct ParseData;
++typedef void* yyscan_t;
++#ifndef FFBISON
++#include "eval_tab.h"
++#endif
+
+
+typedef struct {
@@ -164,7 +168,7 @@
+ double dbl;
+ long lng;
+ char log;
-+ char str[256];
++ char str[MAX_STRLEN];
+ double *dblptr;
+ long *lngptr;
+ char *logptr;
@@ -175,17 +179,17 @@
+
+typedef struct Node {
+ int operation;
-+ void (*DoOp)(struct Node *this);
++ void (*DoOp)(ParseData *, struct Node *this);
+ int nSubNodes;
+ int SubNodes[MAXSUBS];
+ int type;
+ lval value;
+ } Node;
+
-+typedef struct {
++struct ParseData_struct {
+ fitsfile *def_fptr;
-+ int (*getData)( char *dataName, void *dataValue );
-+ int (*loadData)( int varNum, long fRow, long nRows,
++ int (*getData)( ParseData *, char *dataName, void *dataValue );
++ int (*loadData)( ParseData *, int varNum, long fRow, long nRows,
+ void *data, char *undef );
+
+ int compressed;
@@ -201,11 +205,14 @@
+ int nNodes;
+ int nNodesAlloc;
+ int resultNode;
-+
++
+ long firstRow;
+ long nRows;
+
+ int nCols;
++ long nElements;
++ int nAxis;
++ long nAxes[MAXDIMS];
+ iteratorCol *colData;
+ DataInfo *varData;
+ PixelFilter *pixFilter;
@@ -213,12 +220,13 @@
+ long firstDataRow;
+ long nDataRows;
+ long totalRows;
++ long nPrevDataRows;
+
+ int datatype;
+ int hdutype;
+
+ int status;
-+ } ParseData;
++};
+
+typedef enum {
+ rnd_fct = 1001,
@@ -263,68 +271,196 @@
+ nonnull_fct,
+ angsep_fct,
+ gasrnd_fct,
-+ poirnd_fct
++ poirnd_fct,
++ strmid_fct,
++ strpos_fct,
++ setnull_fct,
++ gtiover_fct,
++ gtifind_fct,
++ elemnum_fct,
++ axiselem_fct,
++ array_fct
+ } funcOp;
+
-+extern ParseData gParse;
++
++typedef struct parseInfo_struct parseInfo;
++
++struct ParseStatusVariables { /* These variables were 'static' in fits_parse_workfn() */
++ void *Data, *Null;
++ int datasize;
++ long lastRow, repeat, resDataSize;
++ LONGLONG jnull;
++ parseInfo *userInfo;
++ long zeros[4];
++};
++
++struct parseInfo_struct {
++ int datatype; /* Data type to cast parse results into for user */
++ void *dataPtr; /* Pointer to array of results, NULL if to use iterCol */
++ void *nullPtr; /* Pointer to nulval, use zero if NULL */
++ long maxRows; /* Max No. of rows to process, -1=all, 0=1 iteration */
++ int anyNull; /* Flag indicating at least 1 undef value encountered */
++ ParseData *parseData; /* Pointer to parser configuration */
++ struct ParseStatusVariables parseVariables;
++};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
-+ int ffparse(void);
-+ int fflex(void);
-+ void ffrestart(FILE*);
-+
-+ void Evaluate_Parser( long firstRow, long nRows );
++/* Not sure why this is needed but it is */
++#define YYSTYPE FITS_PARSER_YYSTYPE
++/* How ParseData is accessed from the lexer, i.e. by yyextra */
++#define YY_EXTRA_TYPE ParseData *
++
++ int fits_parser_yyparse(yyscan_t yyscaner, ParseData *lParse);
++ int fits_parser_yylex(FITS_PARSER_YYSTYPE *, yyscan_t yyscanner);
++ void fits_parser_yyrestart(FILE*, yyscan_t yyscanner);
++ int fits_parser_yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
++ int fits_parser_yylex_destroy (yyscan_t scanner);
++
++ void Evaluate_Parser( ParseData *lParse, long firstRow, long nRows );
++ int fits_parser_allocateCol( ParseData *lParse, int nCol, int *status );
++ int fits_parser_set_temporary_col(ParseData *lParse, parseInfo *Info,
++ long int nrows, void *nulval, int *status);
+
+#ifdef __cplusplus
+ }
+#endif
+
diff --git a/eval_tab.h b/eval_tab.h
new file mode 100644
index 0000000..2715f0f
--- /dev/null
+++ b/eval_tab.h
-@@ -0,0 +1,41 @@
-+typedef union {
+@@ -0,0 +1,130 @@
++/* A Bison parser, made by GNU Bison 3.8. */
++
++/* Bison interface for Yacc-like parsers in C
++
++ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
++ Inc.
++
++ This program is free software: you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation, either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <https://www.gnu.org/licenses/>. */
++
++/* As a special exception, you may create a larger work that contains
++ part or all of the Bison parser skeleton and distribute that work
++ under terms of your choice, so long as that work isn't itself a
++ parser generator using the skeleton or a modified version thereof
++ as a parser skeleton. Alternatively, if you modify or redistribute
++ the parser skeleton itself, you may (at your option) remove this
++ special exception, which will cause the skeleton and the resulting
++ Bison output files to be licensed under the GNU General Public
++ License without this special exception.
++
++ This special exception was added by the Free Software Foundation in
++ version 2.2 of Bison. */
++
++/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
++ especially those whose name start with YY_ or yy_. They are
++ private implementation details that can be changed or removed. */
++
++#ifndef YY_FITS_PARSER_YY_EVAL_TAB_H_INCLUDED
++# define YY_FITS_PARSER_YY_EVAL_TAB_H_INCLUDED
++/* Debug traces. */
++#ifndef FITS_PARSER_YYDEBUG
++# if defined YYDEBUG
++#if YYDEBUG
++# define FITS_PARSER_YYDEBUG 1
++# else
++# define FITS_PARSER_YYDEBUG 0
++# endif
++# else /* ! defined YYDEBUG */
++# define FITS_PARSER_YYDEBUG 0
++# endif /* ! defined YYDEBUG */
++#endif /* ! defined FITS_PARSER_YYDEBUG */
++#if FITS_PARSER_YYDEBUG
++extern int fits_parser_yydebug;
++#endif
++
++/* Token kinds. */
++#ifndef FITS_PARSER_YYTOKENTYPE
++# define FITS_PARSER_YYTOKENTYPE
++ enum fits_parser_yytokentype
++ {
++ FITS_PARSER_YYEMPTY = -2,
++ FITS_PARSER_YYEOF = 0, /* "end of file" */
++ FITS_PARSER_YYerror = 256, /* error */
++ FITS_PARSER_YYUNDEF = 257, /* "invalid token" */
++ BOOLEAN = 258, /* BOOLEAN */
++ LONG = 259, /* LONG */
++ DOUBLE = 260, /* DOUBLE */
++ STRING = 261, /* STRING */
++ BITSTR = 262, /* BITSTR */
++ FUNCTION = 263, /* FUNCTION */
++ BFUNCTION = 264, /* BFUNCTION */
++ IFUNCTION = 265, /* IFUNCTION */
++ GTIFILTER = 266, /* GTIFILTER */
++ GTIOVERLAP = 267, /* GTIOVERLAP */
++ GTIFIND = 268, /* GTIFIND */
++ REGFILTER = 269, /* REGFILTER */
++ COLUMN = 270, /* COLUMN */
++ BCOLUMN = 271, /* BCOLUMN */
++ SCOLUMN = 272, /* SCOLUMN */
++ BITCOL = 273, /* BITCOL */
++ ROWREF = 274, /* ROWREF */
++ NULLREF = 275, /* NULLREF */
++ SNULLREF = 276, /* SNULLREF */
++ OR = 277, /* OR */
++ AND = 278, /* AND */
++ EQ = 279, /* EQ */
++ NE = 280, /* NE */
++ GT = 281, /* GT */
++ LT = 282, /* LT */
++ LTE = 283, /* LTE */
++ GTE = 284, /* GTE */
++ XOR = 285, /* XOR */
++ POWER = 286, /* POWER */
++ NOT = 287, /* NOT */
++ INTCAST = 288, /* INTCAST */
++ FLTCAST = 289, /* FLTCAST */
++ UMINUS = 290, /* UMINUS */
++ ACCUM = 291, /* ACCUM */
++ DIFF = 292 /* DIFF */
++ };
++ typedef enum fits_parser_yytokentype fits_parser_yytoken_kind_t;
++#endif
++
++/* Value type. */
++#if ! defined FITS_PARSER_YYSTYPE && ! defined FITS_PARSER_YYSTYPE_IS_DECLARED
++union FITS_PARSER_YYSTYPE
++{
++#line 212 "eval.y"
++
+ int Node; /* Index of Node */
+ double dbl; /* real value */
+ long lng; /* integer value */
+ char log; /* logical value */
-+ char str[256]; /* string value */
-+} FFSTYPE;
-+#define BOOLEAN 258
-+#define LONG 259
-+#define DOUBLE 260
-+#define STRING 261
-+#define BITSTR 262
-+#define FUNCTION 263
-+#define BFUNCTION 264
-+#define GTIFILTER 265
-+#define REGFILTER 266
-+#define COLUMN 267
-+#define BCOLUMN 268
-+#define SCOLUMN 269
-+#define BITCOL 270
-+#define ROWREF 271
-+#define NULLREF 272
-+#define SNULLREF 273
-+#define OR 274
-+#define AND 275
-+#define EQ 276
-+#define NE 277
-+#define GT 278
-+#define LT 279
-+#define LTE 280
-+#define GTE 281
-+#define POWER 282
-+#define NOT 283
-+#define INTCAST 284
-+#define FLTCAST 285
-+#define UMINUS 286
-+#define ACCUM 287
-+#define DIFF 288
++ char str[MAX_STRLEN]; /* string value */
++
++#line 117 "eval_tab.h"
++
++};
++typedef union FITS_PARSER_YYSTYPE FITS_PARSER_YYSTYPE;
++# define FITS_PARSER_YYSTYPE_IS_TRIVIAL 1
++# define FITS_PARSER_YYSTYPE_IS_DECLARED 1
++#endif
++
++
++
++
++int fits_parser_yyparse (yyscan_t scanner, ParseData *lParse);
+
+
-+extern FFSTYPE fflval;
++#endif /* !YY_FITS_PARSER_YY_EVAL_TAB_H_INCLUDED */
More information about the Debian-astro-maintainers
mailing list