From e944aa454e60cbff8ab4e8c70dd974083398378f Mon Sep 17 00:00:00 2001 From: Paul Zimmermann Date: Sat, 10 Dec 2022 08:47:51 +0100 Subject: [PATCH 1/6] functions with FILE arguments should be defined only when stdio.h is included --- src/mpc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mpc.h b/src/mpc.h index bb1334f..31c7990 100644 --- a/src/mpc.h +++ b/src/mpc.h @@ -270,6 +270,7 @@ __MPC_DECLSPEC long double _Complex mpc_get_ldc (mpc_srcptr, mpc_rnd_t); __MPC_DECLSPEC int mpc_inp_str (mpc_ptr, FILE *, size_t *, int, mpc_rnd_t); __MPC_DECLSPEC size_t mpc_out_str (FILE *, int, size_t, mpc_srcptr, mpc_rnd_t); __MPC_DECLSPEC void mpcb_out_str (FILE *f, mpcb_srcptr); +__MPC_DECLSPEC void mpcr_out_str (FILE *f, mpcr_srcptr r); #endif __MPC_DECLSPEC int mpcr_inf_p (mpcr_srcptr r); @@ -284,7 +285,6 @@ __MPC_DECLSPEC void mpcr_set_ui64_2si64 (mpcr_ptr r, uint64_t mant, int64_t exp); __MPC_DECLSPEC void mpcr_max (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t); __MPC_DECLSPEC int64_t mpcr_get_exp (mpcr_srcptr r); -__MPC_DECLSPEC void mpcr_out_str (FILE *f, mpcr_srcptr r); __MPC_DECLSPEC void mpcr_mul (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t); __MPC_DECLSPEC void mpcr_mul_2ui (mpcr_ptr r, mpcr_srcptr s, unsigned long int e); -- 2.39.0 From c4ecee561ca9f93ee13e4d6295af8adc77e50208 Mon Sep 17 00:00:00 2001 From: Paul Zimmermann Date: Mon, 12 Dec 2022 10:42:12 +0100 Subject: [PATCH 2/6] added test for case when stdio.h is not included --- src/mpc-impl.h | 2 ++ tests/Makefile.am | 2 +- tests/mpc-tests.h | 2 ++ tests/tdummy.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/tdummy.c diff --git a/src/mpc-impl.h b/src/mpc-impl.h index 2b7bbb2..a915751 100644 --- a/src/mpc-impl.h +++ b/src/mpc-impl.h @@ -27,7 +27,9 @@ along with this program. If not, see http://www.gnu.org/licenses/ . #ifdef HAVE_STDLIB_H #include #endif +#ifndef DONT_INCLUDE_STDIO #include +#endif #include "mpc.h" /* diff --git a/tests/Makefile.am b/tests/Makefile.am index f488bdb..2fe0813 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -45,7 +45,7 @@ check_PROGRAMS = tradius tballs teta \ treimref trootofunity \ tset tsin tsin_cos tsinh tsqr tsqrt tstrtoc tsub tsub_fr \ tsub_ui tsum tswap ttan ttanh tui_div tui_ui_sub \ - tget_version texceptions + tget_version texceptions tdummy check_LTLIBRARIES=libmpc-tests.la libmpc_tests_la_SOURCES = mpc-tests.h check_data.c clear_parameters.c \ diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h index ecd10b7..57ac632 100644 --- a/tests/mpc-tests.h +++ b/tests/mpc-tests.h @@ -22,7 +22,9 @@ along with this program. If not, see http://www.gnu.org/licenses/ . #define __MPC_TESTS_H #include "config.h" +#ifndef DONT_INCLUDE_STDIO #include +#endif #include #include #include /* for the PRIi64 format modifier */ diff --git a/tests/tdummy.c b/tests/tdummy.c new file mode 100644 index 0000000..23072f5 --- /dev/null +++ b/tests/tdummy.c @@ -0,0 +1,33 @@ +/* tdummy -- test file when stdio.h is not included + +Copyright (C) 2022 INRIA + +This file is part of GNU MPC. + +GNU MPC is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +GNU MPC 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 Lesser General Public License for +more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program. If not, see http://www.gnu.org/licenses/ . +*/ + +#define DONT_INCLUDE_STDIO +#include "mpc-tests.h" + +int +main (void) +{ + test_start (); + + test_end (); + + return 0; +} + -- 2.39.0 From 3c582150facc14230a157e927d07ff2398ab5f3e Mon Sep 17 00:00:00 2001 From: Paul Zimmermann Date: Mon, 12 Dec 2022 10:55:05 +0100 Subject: [PATCH 3/6] fixed last commit --- tests/mpc-tests.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h index 57ac632..c6b5679 100644 --- a/tests/mpc-tests.h +++ b/tests/mpc-tests.h @@ -141,6 +141,7 @@ extern int same_mpc_value (mpc_ptr got, mpc_ptr ref, known_signs_t known_signs); /** READ FILE WITH TEST DATA SET **/ +#ifndef DONT_INCLUDE_STDIO extern FILE * open_data_file (const char *file_name); extern void close_data_file (FILE *fp); @@ -155,6 +156,7 @@ extern size_t read_string (FILE *fp, char **buffer_ptr, size_t buffer_length, const char *name); extern void read_mpfr (FILE *fp, mpfr_ptr x, int *known_sign); extern void read_mpc (FILE *fp, mpc_ptr z, known_signs_t *ks); +#endif void set_mpfr_flags (int counter); void check_mpfr_flags (int counter); @@ -287,6 +289,7 @@ typedef struct { void read_description (mpc_fun_param_t* param, const char *file); const char* read_description_findname (mpc_param_t e); +#ifndef DONT_INCLUDE_STDIO /* file functions */ typedef struct { char *pathname; @@ -339,6 +342,7 @@ void tpl_read_mpc (mpc_datafile_context_t* datafile_context, mpc_data_t* z); void tpl_read_mpc_rnd (mpc_datafile_context_t* datafile_context, mpc_rnd_t* rnd); +#endif int tpl_same_mpz_value (mpz_ptr n1, mpz_ptr n2); int tpl_same_mpfr_value (mpfr_ptr x1, mpfr_ptr x2, int known_sign); -- 2.39.0 From 8cd19d81f3e2aebbd58d8204da8ada50e8e8dfc1 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Mon, 12 Dec 2022 11:23:40 +0100 Subject: [PATCH 4/6] Do not explicitly include stdio.h in mpc-impl.h. Several files include it on their own for MPC_ASSERT. * src/mpc-impl.h, src/radius.c: Do not include stdio.h. * tests/teta.c: Include mpc-tests.h instead of mpc-impl.h. * src/balls.c (mpcb_out_str, mpcr_out_str): Define only when _GMP_H_HAVE_FILE is defined, in accordance with mpc.h. * NEWS: Add entry for bug fix. --- NEWS | 4 ++++ src/balls.c | 2 ++ src/mpc-impl.h | 3 --- src/radius.c | 4 +++- tests/teta.c | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index ef6ff8b..c113262 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +Changes in version 1.3.1, released in December 2022: + - Bug fix: It is again possible to include mpc.h without including + stdio.h. + Changes in version 1.3.0 ("Ipomoea batatas"), released in December 2022: - New function: mpc_agm - New rounding modes "away from zero", indicated by the letter "A" and diff --git a/src/balls.c b/src/balls.c index ecaecd5..03a44a8 100644 --- a/src/balls.c +++ b/src/balls.c @@ -21,6 +21,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ . #include "mpc-impl.h" +#ifdef _GMP_H_HAVE_FILE void mpcb_out_str (FILE *f, mpcb_srcptr op) { mpc_out_str (f, 10, 0, op->c, MPC_RNDNN); @@ -28,6 +29,7 @@ void mpcb_out_str (FILE *f, mpcb_srcptr op) mpcr_out_str (f, op->r); fprintf (f, "\n"); } +#endif void diff --git a/src/mpc-impl.h b/src/mpc-impl.h index a915751..3f46121 100644 --- a/src/mpc-impl.h +++ b/src/mpc-impl.h @@ -27,9 +27,6 @@ along with this program. If not, see http://www.gnu.org/licenses/ . #ifdef HAVE_STDLIB_H #include #endif -#ifndef DONT_INCLUDE_STDIO -#include -#endif #include "mpc.h" /* diff --git a/src/radius.c b/src/radius.c index 98ae8d5..88c7d71 100644 --- a/src/radius.c +++ b/src/radius.c @@ -18,7 +18,6 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/ . */ -#include #include #include /* for the PRIi64 format modifier */ #include "mpc-impl.h" @@ -405,6 +404,8 @@ int64_t mpcr_get_exp (mpcr_srcptr r) return MPCR_EXP (r) + 31; } + +#ifdef _GMP_H_HAVE_FILE void mpcr_out_str (FILE *f, mpcr_srcptr r) { if (mpcr_inf_p (r)) @@ -415,6 +416,7 @@ void mpcr_out_str (FILE *f, mpcr_srcptr r) fprintf (f, "±(%" PRIi64 ", %" PRIi64 ")", MPCR_MANT (r), MPCR_EXP (r)); } } +#endif static void mpcr_mul_rnd (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t, diff --git a/tests/teta.c b/tests/teta.c index 1154d66..a8bb317 100644 --- a/tests/teta.c +++ b/tests/teta.c @@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ . */ #include -#include "mpc-impl.h" +#include "mpc-tests.h" static void mpcb_j_err (mpcb_ptr j, mpc_srcptr z, unsigned long int err_re, -- 2.39.0 From 2bf963605442b2693c7adc06f37957984e0ced56 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Mon, 12 Dec 2022 11:46:31 +0100 Subject: [PATCH 5/6] Simplify tdummy test. * tests/tdummy.c: Include mpc.h without stdio.h; the test always succeeds at run time, but may fail during compilation if there is an error in mpc.h. * tests/mpc-tests.h: Drop DONT_INCLUDE_STDIO macro. --- tests/mpc-tests.h | 6 ------ tests/tdummy.c | 7 +------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h index c6b5679..ecd10b7 100644 --- a/tests/mpc-tests.h +++ b/tests/mpc-tests.h @@ -22,9 +22,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ . #define __MPC_TESTS_H #include "config.h" -#ifndef DONT_INCLUDE_STDIO #include -#endif #include #include #include /* for the PRIi64 format modifier */ @@ -141,7 +139,6 @@ extern int same_mpc_value (mpc_ptr got, mpc_ptr ref, known_signs_t known_signs); /** READ FILE WITH TEST DATA SET **/ -#ifndef DONT_INCLUDE_STDIO extern FILE * open_data_file (const char *file_name); extern void close_data_file (FILE *fp); @@ -156,7 +153,6 @@ extern size_t read_string (FILE *fp, char **buffer_ptr, size_t buffer_length, const char *name); extern void read_mpfr (FILE *fp, mpfr_ptr x, int *known_sign); extern void read_mpc (FILE *fp, mpc_ptr z, known_signs_t *ks); -#endif void set_mpfr_flags (int counter); void check_mpfr_flags (int counter); @@ -289,7 +285,6 @@ typedef struct { void read_description (mpc_fun_param_t* param, const char *file); const char* read_description_findname (mpc_param_t e); -#ifndef DONT_INCLUDE_STDIO /* file functions */ typedef struct { char *pathname; @@ -342,7 +337,6 @@ void tpl_read_mpc (mpc_datafile_context_t* datafile_context, mpc_data_t* z); void tpl_read_mpc_rnd (mpc_datafile_context_t* datafile_context, mpc_rnd_t* rnd); -#endif int tpl_same_mpz_value (mpz_ptr n1, mpz_ptr n2); int tpl_same_mpfr_value (mpfr_ptr x1, mpfr_ptr x2, int known_sign); diff --git a/tests/tdummy.c b/tests/tdummy.c index 23072f5..e525609 100644 --- a/tests/tdummy.c +++ b/tests/tdummy.c @@ -18,16 +18,11 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/ . */ -#define DONT_INCLUDE_STDIO -#include "mpc-tests.h" +#include "mpc.h" int main (void) { - test_start (); - - test_end (); - return 0; } -- 2.39.0 From 8fe31f02431b3680f09bf1346787276ddb2274a2 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Mon, 12 Dec 2022 15:30:57 +0100 Subject: [PATCH 6/6] Include header file. This was detected by trying to compile with gmp-5.0.0 and mpfr-4.1.0. * src/balls.c, src/eta.c: Include limits.h. --- src/balls.c | 1 + src/eta.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/balls.c b/src/balls.c index 03a44a8..a18d37f 100644 --- a/src/balls.c +++ b/src/balls.c @@ -18,6 +18,7 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/ . */ +#include /* for CHAR_BIT */ #include "mpc-impl.h" diff --git a/src/eta.c b/src/eta.c index 7d397f0..0651e15 100644 --- a/src/eta.c +++ b/src/eta.c @@ -19,6 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ . */ #include +#include /* for CHAR_BIT */ #include "mpc-impl.h" static void -- 2.39.0