From 340c1990ce1774c964839fe3495af8ca4bfb617c Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Mon, 28 Nov 2022 12:55:29 -0800 Subject: [PATCH] Checkpoint on fixing compiling with musl gentoo Restored use of the #define FPOS_POS_LEN symbol. This refers to the length of the __pos element (if the __pos element exists), the fpos_t type (if that type exists). Changed SWAP_HALF_IN_FILEPOS(dest, src) mato to use FILEPOS_LEN Little Endian when FILEPOS is a simple scalar type (i.e., HAVE_FILEPOS_SCALAR is defined). Changed #define HAVE_FPOS to HAVE_FGETSETPOS. Corrected comment in have_fpos_pos.h. The HAVE_FPOS_POS symbol was NOT related to fgetpos & fsetpos but rather if we we have an __pos element in FILEPOS. Changed #define HAVE_NO_FPOS to HAVE_NO_FGETSETPOS. Improved comments in have_fpos_pos.h to show why and how HAVE_FPOS_POS, FPOS_POS_BITS, and FPOS_POS_LEN were defined or undefed. Changed showfiles builtin to print sizes cast to (long int) with the "%ld" printf format to avoid implementations that do not support the "%lld" printf format specifier. --- CHANGES | 25 +++++++++++++++++++-- Makefile | 22 +++++++++--------- Makefile.simple | 22 +++++++++--------- file.c | 2 +- file.h | 2 +- fposval.c | 3 +-- have_fpos.c | 8 +++---- have_fpos_pos.c | 60 ++++++++++++++++++++++++++++--------------------- 8 files changed, 86 insertions(+), 58 deletions(-) diff --git a/CHANGES b/CHANGES index 7819c9f..4a20e03 100644 --- a/CHANGES +++ b/CHANGES @@ -38,8 +38,6 @@ The following are the changes from calc version 2.14.1.2 to date: file failed to compile incorrectly, producing a potentially incorrect have_uid_t.h file for such systems. - Renamed #define FPOS_POS_LEN symbol to FPOSPOS_LEN. - Added full_debug rule to Makefile. This does the work of the old debug rule in a more verbose mode by using Q= H=@ S= E= V=@. @@ -50,6 +48,29 @@ The following are the changes from calc version 2.14.1.2 to date: The full_debug rule will no longer stop when one of the sub-tasks failed (exit non-zero). + Restored use of the #define FPOS_POS_LEN symbol. This refers to + the length of the __pos element (if the __pos element exists), + the fpos_t type (if that type exists). + + Changed SWAP_HALF_IN_FILEPOS(dest, src) mato to use FILEPOS_LEN Little + Endian when FILEPOS is a simple scalar type (i.e., HAVE_FILEPOS_SCALAR + is defined). + + Changed #define HAVE_FPOS to HAVE_FGETSETPOS. + + Corrected comment in have_fpos_pos.h. The HAVE_FPOS_POS symbol was + NOT related to fgetpos & fsetpos but rather if we we have an __pos + element in FILEPOS. + + Changed #define HAVE_NO_FPOS to HAVE_NO_FGETSETPOS. + + Improved comments in have_fpos_pos.h to show why and how + HAVE_FPOS_POS, FPOS_POS_BITS, and FPOS_POS_LEN were defined or undefed. + + Changed showfiles builtin to print sizes cast to (long int) with + the "%ld" printf format to avoid implementations that do not support + the "%lld" printf format specifier. + The following are the changes from calc version 2.14.1.0 to 2.14.1.0: diff --git a/Makefile b/Makefile index a666bab..b5d0731 100644 --- a/Makefile +++ b/Makefile @@ -280,14 +280,14 @@ LONG_BITS= # Determine if we have the ANSI C fgetpos and fsetpos alternate interface # to the ftell() and fseek() (with whence set to SEEK_SET) functions. # -# If HAVE_FPOS is empty, this Makefile will run the have_fpos program -# to determine if there is are fgetpos and fsetpos functions. If HAVE_FPOS -# is set to -DHAVE_NO_FPOS, then calc will use ftell() and fseek(). +# If HAVE_FGETSETPOS is empty, this Makefile will run the have_fpos program +# to determine if there is are fgetpos and fsetpos functions. If HAVE_FGETSETPOS +# is set to -DHAVE_NO_FGETSETPOS, then calc will use ftell() and fseek(). # -# If in doubt, leave HAVE_FPOS empty and this Makefile will figure it out. +# If in doubt, leave HAVE_FGETSETPOS empty and this Makefile will figure it out. # -HAVE_FPOS= -#HAVE_FPOS= -DHAVE_NO_FPOS +HAVE_FGETSETPOS= +#HAVE_FGETSETPOS= -DHAVE_NO_FGETSETPOS # Determine if we have an __pos element of a file position (fpos_t) structure. # @@ -3190,7 +3190,7 @@ have_fpos.h: have_fpos.c banned.h have_ban_pragma.h ${MAKE_FILE} ${LOC_MKF} ${Q} echo '' >> $@ ${Q} echo '/* do we have fgetpos & fsetpos functions? */' >> $@ ${Q} ${RM} -f have_fpos.o have_fpos${EXT} - -${Q} ${LCC} ${HAVE_FPOS} ${ICFLAGS} have_fpos.c -c ${S} \ + -${Q} ${LCC} ${HAVE_FGETSETPOS} ${ICFLAGS} have_fpos.c -c ${S} \ || ${TRUE} -${Q} ${LCC} ${ILDFLAGS} have_fpos.o -o have_fpos${EXT} ${S} \ || ${TRUE} @@ -3199,7 +3199,7 @@ have_fpos.h: have_fpos.c banned.h have_ban_pragma.h ${MAKE_FILE} ${LOC_MKF} -${Q} if [ -s fpos_tmp ]; then \ ${CAT} fpos_tmp >> $@; \ else \ - echo '#undef HAVE_FPOS /* no */' >> $@; \ + echo '#undef HAVE_FGETSETPOS /* no */' >> $@; \ echo '' >> $@; \ echo 'typedef long FILEPOS;' >> $@; \ fi @@ -3231,9 +3231,9 @@ have_fpos_pos.h: have_fpos_pos.c have_fpos.h have_posscl.h \ ${Q} echo '#define CALC_HAVE_FPOS_POS_H' >> $@ ${Q} echo '' >> $@ ${Q} echo '' >> $@ - ${Q} echo '/* do we have fgetpos & fsetpos functions? */' >> $@ + ${Q} echo '/* do we have an __pos element in FILEPOS? */' >> $@ ${Q} ${RM} -f have_fpos_pos.o have_fpos_pos${EXT} - -${Q} ${LCC} ${HAVE_FPOS} ${HAVE_FPOS_POS} ${ICFLAGS} \ + -${Q} ${LCC} ${HAVE_FGETSETPOS} ${HAVE_FPOS_POS} ${ICFLAGS} \ have_fpos_pos.c -c ${S} \ || ${TRUE} -${Q} ${LCC} ${ILDFLAGS} have_fpos_pos.o -o have_fpos_pos${EXT} ${S} \ @@ -4825,7 +4825,7 @@ env: @echo 'HAVE_ARC4RANDOM=${HAVE_ARC4RANDOM}'; echo '' @echo 'HAVE_CONST=${HAVE_CONST}'; echo '' @echo 'HAVE_ENVIRON=${HAVE_ENVIRON}'; echo '' - @echo 'HAVE_FPOS=${HAVE_FPOS}'; echo '' + @echo 'HAVE_FGETSETPOS=${HAVE_FGETSETPOS}'; echo '' @echo 'HAVE_FPOS_POS=${HAVE_FPOS_POS}'; echo '' @echo 'HAVE_GETPGID=${HAVE_GETPGID}'; echo '' @echo 'HAVE_GETPRID=${HAVE_GETPRID}'; echo '' diff --git a/Makefile.simple b/Makefile.simple index 3854beb..0267dbd 100644 --- a/Makefile.simple +++ b/Makefile.simple @@ -220,14 +220,14 @@ LONG_BITS= # Determine if we have the ANSI C fgetpos and fsetpos alternate interface # to the ftell() and fseek() (with whence set to SEEK_SET) functions. # -# If HAVE_FPOS is empty, this Makefile will run the have_fpos program -# to determine if there is are fgetpos and fsetpos functions. If HAVE_FPOS -# is set to -DHAVE_NO_FPOS, then calc will use ftell() and fseek(). +# If HAVE_FGETSETPOS is empty, this Makefile will run the have_fpos program +# to determine if there is are fgetpos and fsetpos functions. If HAVE_FGETSETPOS +# is set to -DHAVE_NO_FGETSETPOS, then calc will use ftell() and fseek(). # -# If in doubt, leave HAVE_FPOS empty and this Makefile will figure it out. +# If in doubt, leave HAVE_FGETSETPOS empty and this Makefile will figure it out. # -HAVE_FPOS= -#HAVE_FPOS= -DHAVE_NO_FPOS +HAVE_FGETSETPOS= +#HAVE_FGETSETPOS= -DHAVE_NO_FGETSETPOS # Determine if we have an __pos element of a file position (fpos_t) structure. # @@ -2504,7 +2504,7 @@ have_fpos.h: have_fpos.c banned.h have_ban_pragma.h ${MAKE_FILE} ${LOC_MKF} ${Q} echo '' >> $@ ${Q} echo '/* do we have fgetpos & fsetpos functions? */' >> $@ ${Q} ${RM} -f have_fpos.o have_fpos${EXT} - -${Q} ${LCC} ${HAVE_FPOS} ${ICFLAGS} have_fpos.c -c ${S} \ + -${Q} ${LCC} ${HAVE_FGETSETPOS} ${ICFLAGS} have_fpos.c -c ${S} \ || ${TRUE} -${Q} ${LCC} ${ILDFLAGS} have_fpos.o -o have_fpos${EXT} ${S} \ || ${TRUE} @@ -2513,7 +2513,7 @@ have_fpos.h: have_fpos.c banned.h have_ban_pragma.h ${MAKE_FILE} ${LOC_MKF} -${Q} if [ -s fpos_tmp ]; then \ ${CAT} fpos_tmp >> $@; \ else \ - echo '#undef HAVE_FPOS /* no */' >> $@; \ + echo '#undef HAVE_FGETSETPOS /* no */' >> $@; \ echo '' >> $@; \ echo 'typedef long FILEPOS;' >> $@; \ fi @@ -2545,9 +2545,9 @@ have_fpos_pos.h: have_fpos_pos.c have_fpos.h have_posscl.h \ ${Q} echo '#define CALC_HAVE_FPOS_POS_H' >> $@ ${Q} echo '' >> $@ ${Q} echo '' >> $@ - ${Q} echo '/* do we have fgetpos & fsetpos functions? */' >> $@ + ${Q} echo '/* do we have an __pos element in FILEPOS? */' >> $@ ${Q} ${RM} -f have_fpos_pos.o have_fpos_pos${EXT} - -${Q} ${LCC} ${HAVE_FPOS} ${HAVE_FPOS_POS} ${ICFLAGS} \ + -${Q} ${LCC} ${HAVE_FGETSETPOS} ${HAVE_FPOS_POS} ${ICFLAGS} \ have_fpos_pos.c -c ${S} \ || ${TRUE} -${Q} ${LCC} ${ILDFLAGS} have_fpos_pos.o -o have_fpos_pos${EXT} ${S} \ @@ -4113,7 +4113,7 @@ env: @echo 'HAVE_ARC4RANDOM=${HAVE_ARC4RANDOM}'; echo '' @echo 'HAVE_CONST=${HAVE_CONST}'; echo '' @echo 'HAVE_ENVIRON=${HAVE_ENVIRON}'; echo '' - @echo 'HAVE_FPOS=${HAVE_FPOS}'; echo '' + @echo 'HAVE_FGETSETPOS=${HAVE_FGETSETPOS}'; echo '' @echo 'HAVE_FPOS_POS=${HAVE_FPOS_POS}'; echo '' @echo 'HAVE_GETPGID=${HAVE_GETPGID}'; echo '' @echo 'HAVE_GETPRID=${HAVE_GETPRID}'; echo '' diff --git a/file.c b/file.c index ffab850..09af7be 100644 --- a/file.c +++ b/file.c @@ -2022,7 +2022,7 @@ showfiles(void) math_chr('\n'); continue; } - printf(" size = %lld\n", (long long int)sizes[i]); + printf(" size = %ld\n", (long int)sizes[i]); for (j = i + 1; j < idnum; j++) { if (listed[j] || sizes[j] == -1) continue; diff --git a/file.h b/file.h index 7697440..c0b1ddb 100644 --- a/file.h +++ b/file.h @@ -71,7 +71,7 @@ typedef struct { * Some obscure systems without fgetpos/fsetpos may not have a simple * scalar type. In these cases the f_tell macro below will fail. */ -#if defined(HAVE_FPOS) +#if defined(HAVE_FGETSETPOS) #define f_seek_set(stream, loc) fsetpos((FILE*)(stream), (FILEPOS*)(loc)) #define f_tell(stream, loc) fgetpos((FILE*)(stream), (FILEPOS*)(loc)) diff --git a/fposval.c b/fposval.c index 0fd7818..89ff7af 100644 --- a/fposval.c +++ b/fposval.c @@ -137,8 +137,7 @@ main(int UNUSED(argc), char **argv) * systems a FILEPOS is not a scalar hence we must memcpy. */ printf("#define SWAP_HALF_IN_FILEPOS(dest, src)\t%s\n", - "\\\n\tmemcpy((void *)(dest), (void *)(src), " - "sizeof(FPOSPOS_LEN))"); + "\\\n\tmemcpy((void *)(dest), (void *)(src), FILEPOS_LEN)"); #endif /* HAVE_FILEPOS_SCALAR */ #endif /* CALC_BYTE_ORDER == BIG_ENDIAN */ putchar('\n'); diff --git a/have_fpos.c b/have_fpos.c index 403baad..2aa9b00 100644 --- a/have_fpos.c +++ b/have_fpos.c @@ -25,7 +25,7 @@ */ /* - * If the symbol HAVE_NO_FPOS is defined, we will output nothing. + * If the symbol HAVE_NO_FGETSETPOS is defined, we will output nothing. * If we are able to compile this program, then we must have the * fgetpos and fsetpos functions and we will output the * appropriate have_fpos.h file body. @@ -40,7 +40,7 @@ int main(void) { -#if !defined(HAVE_NO_FPOS) +#if !defined(HAVE_NO_FGETSETPOS) fpos_t pos; /* file position */ /* get the current position */ @@ -50,8 +50,8 @@ main(void) (void) fsetpos(stdin, &pos); /* print a have_fpos.h body that says we have the functions */ - printf("#undef HAVE_FPOS\n"); - printf("#define HAVE_FPOS 1 /* yes */\n\n"); + printf("#undef HAVE_FGETSETPOS\n"); + printf("#define HAVE_FGETSETPOS 1 /* yes */\n\n"); printf("typedef fpos_t FILEPOS;\n"); #endif /* exit(0); */ diff --git a/have_fpos_pos.c b/have_fpos_pos.c index 9135e2c..f619791 100644 --- a/have_fpos_pos.c +++ b/have_fpos_pos.c @@ -24,12 +24,6 @@ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ */ -/* - * If the symbol HAVE_NO_FPOS is defined, we will output nothing. - * If the HAVE_FILEPOS_SCALAR is defined, we will output nothing. - * If we are able to compile this program, then we must have the - * __pos element in a non-scalar FILEPOS. - */ #include #include "have_fpos.h" @@ -42,29 +36,43 @@ int main(void) { -#if !defined(HAVE_NO_FPOS) && !defined(HAVE_FILEPOS_SCALAR) - fpos_t pos; /* file position */ +#if defined(HAVE_FILEPOS_SCALAR) - /* print a __pos element in fpos_t */ - printf("#undef HAVE_FPOS_POS\n"); - printf("#define HAVE_FPOS_POS 1 /* yes */\n\n"); - - /* determine __pos element size */ - printf("#undef FPOS_POS_BITS\n"); - printf("#undef FPOSPOS_LEN\n"); -# if defined(FPOS_POS_BITS) - printf("#define FPOS_POS_BITS %d\n", FPOS_POS_BITS); - printf("#define FPOSPOS_LEN %d\n", int(FPOS_POS_BITS/8)); -# else - printf("#define FPOS_POS_BITS %lu\n", sizeof(pos.__pos)*8); - printf("#define FPOSPOS_LEN %lu\n", sizeof(pos.__pos)); -# endif - -#else - /* we have no __pos element */ + printf("/* HAVE_FILEPOS_SCALAR is defined, we assume FILEPOS is scalar */\n"); + printf("/* we assume we have no __pos in FILEPOS */\n"); printf("#undef HAVE_FPOS_POS\t/* no */\n"); printf("#undef FPOS_POS_BITS\n"); - printf("#undef FPOSPOS_LEN\n"); + printf("#undef FPOS_POS_LEN\n"); + +#else + + printf("/* HAVE_FILEPOS_SCALAR is undefined, we assume FILEPOS is not scalar */\n"); +# if defined(HAVE_NO_FPOS_POS) + printf("/* HAVE_NO_FPOS_POS defiled, we assume we have no __pos in FILEPOS */\n"); + printf("#undef HAVE_FPOS_POS\t/* no */\n"); + printf("#undef FPOS_POS_BITS\n"); + printf("#undef FPOS_POS_LEN\n"); + +# elif defined(FPOS_POS_BITS) + printf("/* FPOS_POS_BITS defiled, assume we have __pos in FILEPOS */\n"); + printf("#undef HAVE_FPOS_POS\n"); + printf("#define HAVE_FPOS_POS 1 /* yes */\n"); + printf("#undef FPOS_POS_BITS\n"); + printf("#define FPOS_POS_BITS %d\n", FPOS_POS_BITS); + printf("#undef FPOS_POS_LEN\n"); + printf("#define FPOS_POS_LEN %d\n", int(FPOS_POS_BITS/8)); +# else + fpos_t pos; /* file position */ + + memset(&pos, 0, sizeof(pos)); /* zeroize pos to "set it" */ + printf("/* we successfully compiled with a fpos_t type wit an __pos element */\n"); + printf("#undef HAVE_FPOS_POS\n"); + printf("#define HAVE_FPOS_POS 1 /* yes */\n"); + printf("#undef FPOS_POS_BITS\n"); + printf("#define FPOS_POS_BITS %lu\n", sizeof(pos.__pos)*8); + printf("#undef FPOS_POS_LEN\n"); + printf("#define FPOS_POS_LEN %lu\n", sizeof(pos.__pos)); +# endif #endif /* exit(0); */ return 0;