From 081d7946faa61fc306f13b99d8e6af921d1af111 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Wed, 18 Jun 2014 11:56:23 +0000 Subject: texk/*/: Drop the obsolete ACLOCAL_AMFLAGS git-svn-id: svn://tug.org/texlive/trunk@34287 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/mendexk/ChangeLog | 6 ++ Build/source/texk/mendexk/Makefile.am | 2 - Build/source/texk/mendexk/Makefile.in | 1 - Build/source/texk/mendexk/c-auto.in | 3 + Build/source/texk/mendexk/configure | 35 ++++++++ Build/source/texk/mendexk/configure.ac | 11 +++ Build/source/texk/mendexk/fwrite.c | 146 +++++++++++++++++++-------------- 7 files changed, 141 insertions(+), 63 deletions(-) (limited to 'Build/source/texk/mendexk') diff --git a/Build/source/texk/mendexk/ChangeLog b/Build/source/texk/mendexk/ChangeLog index 7782fc84f0c..f5dc6dbee3e 100644 --- a/Build/source/texk/mendexk/ChangeLog +++ b/Build/source/texk/mendexk/ChangeLog @@ -1,3 +1,9 @@ +2014-06-16 Peter Breitenlohner + + * Makefile.am: Drop the obsolete ACLOCAL_AMFLAGS. + * configure.ac: Check for C99 variadic macros. + * fwrite.c: Better handling of snprintf(). + 2014-05-13 Peter Breitenlohner * fread.c (copy_multibyte_char): Avoid ambiguous operation. diff --git a/Build/source/texk/mendexk/Makefile.am b/Build/source/texk/mendexk/Makefile.am index b9b4add0044..69d1ae0a6a3 100644 --- a/Build/source/texk/mendexk/Makefile.am +++ b/Build/source/texk/mendexk/Makefile.am @@ -3,8 +3,6 @@ ## Copyright (C) 2010-2014 Peter Breitenlohner ## You may freely use, modify and/or distribute this file. ## -ACLOCAL_AMFLAGS = -I ../../m4 - AM_CPPFLAGS = $(PTEXENC_INCLUDES) $(KPATHSEA_INCLUDES) AM_CFLAGS = $(WARNING_CFLAGS) diff --git a/Build/source/texk/mendexk/Makefile.in b/Build/source/texk/mendexk/Makefile.in index 3b0027d4b46..7690edaa4b9 100644 --- a/Build/source/texk/mendexk/Makefile.in +++ b/Build/source/texk/mendexk/Makefile.in @@ -534,7 +534,6 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I ../../m4 AM_CPPFLAGS = $(PTEXENC_INCLUDES) $(KPATHSEA_INCLUDES) AM_CFLAGS = $(WARNING_CFLAGS) mendex_SOURCES = \ diff --git a/Build/source/texk/mendexk/c-auto.in b/Build/source/texk/mendexk/c-auto.in index 6f34cd18961..b8852321593 100644 --- a/Build/source/texk/mendexk/c-auto.in +++ b/Build/source/texk/mendexk/c-auto.in @@ -105,6 +105,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to 1 if you have C99 variadic macros. */ +#undef HAVE___VA_ARGS__ + /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR diff --git a/Build/source/texk/mendexk/configure b/Build/source/texk/mendexk/configure index 13ed4d842d2..f0d03a1e1d6 100755 --- a/Build/source/texk/mendexk/configure +++ b/Build/source/texk/mendexk/configure @@ -12912,6 +12912,41 @@ fi ac_config_headers="$ac_config_headers c-auto.h:c-auto.in" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C99 variadic macros are supported" >&5 +$as_echo_n "checking if C99 variadic macros are supported... " >&6; } +if ${kpse_cv_have___VA_ARGS__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#define foo(format, ...) printf(format, __VA_ARGS__) +int +main () +{ +foo("%s\n", "Hi, there"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + kpse_cv_have___VA_ARGS__=yes +else + kpse_cv_have___VA_ARGS__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $kpse_cv_have___VA_ARGS__" >&5 +$as_echo "$kpse_cv_have___VA_ARGS__" >&6; } +case $kpse_cv_have___VA_ARGS__ in #( + yes) : + +$as_echo "#define HAVE___VA_ARGS__ 1" >>confdefs.h + ;; #( + *) : + ;; +esac + kpse_save_CPPFLAGS=$CPPFLAGS kpse_save_LIBS=$LIBS diff --git a/Build/source/texk/mendexk/configure.ac b/Build/source/texk/mendexk/configure.ac index ebb9f00b24e..63d76c1a2a3 100644 --- a/Build/source/texk/mendexk/configure.ac +++ b/Build/source/texk/mendexk/configure.ac @@ -17,6 +17,17 @@ KPSE_COMMON([mendexk], [no-define]) AC_CONFIG_HEADERS([c-auto.h:c-auto.in]) +AC_CACHE_CHECK([if C99 variadic macros are supported], + [kpse_cv_have___VA_ARGS__], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#define foo(format, ...) printf(format, __VA_ARGS__)]], + [[foo("%s\n", "Hi, there");]])], + [kpse_cv_have___VA_ARGS__=yes], + [kpse_cv_have___VA_ARGS__=no])]) +AS_CASE([$kpse_cv_have___VA_ARGS__], + [yes], [AC_DEFINE([HAVE___VA_ARGS__], 1, + [Define to 1 if you have C99 variadic macros.])]) + KPSE_KPATHSEA_FLAGS KPSE_PTEXENC_FLAGS diff --git a/Build/source/texk/mendexk/fwrite.c b/Build/source/texk/mendexk/fwrite.c index 80e7b77cbba..81030e7e94a 100644 --- a/Build/source/texk/mendexk/fwrite.c +++ b/Build/source/texk/mendexk/fwrite.c @@ -17,13 +17,39 @@ static int range_check(struct index ind, int count, char *lbuff); static void linecheck(char *lbuff, char *tmpbuff); static void crcheck(char *lbuff, FILE *fp); -/* OS X defines snprintf() as macro that chokes on using TAIL_LEN */ -#ifdef __APPLE__ -#undef snprintf -#endif - #define BUFFERLEN 4096 -#define TAIL_LEN(x) ((x)+strlen(x)), (BUFFERLEN-strlen(x)) + +#ifdef HAVE___VA_ARGS__ +/* Use C99 variadic macros if they are supported. */ +#define SPRINTF(buf, ...) \ + snprintf(buf, sizeof(buf), __VA_ARGS__) +#define SAPPENDF(buf, ...) \ + snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), __VA_ARGS__) +#else +/* Alternatively use static inline functions (all buffers have size BUFFERLEN). */ +static inline int SPRINTF(char *buf, const char *format, ...) +{ + va_list argptr; + int n; + + va_start(argptr, format); + n = vsnprintf(buf, BUFFERLEN, format, argptr); + va_end(argptr); + + return n; +} +static inline int SAPPENDF(char *buf, const char *format, ...) +{ + va_list argptr; + int n; + + va_start(argptr, format); + n = vsnprintf(buf + strlen(buf), BUFFERLEN - strlen(buf), format, argptr); + va_end(argptr); + + return n; +} +#endif static void fprint_euc_char(FILE *fp, const char a, const char b) { @@ -127,7 +153,7 @@ void indwrite(char *filename, struct index *ind, int pagenum) fprintf(fp,"%s%s%s",lethead_prefix,symhead_negative,lethead_suffix); } } - snprintf(lbuff,BUFFERLEN,"%s%s",item_0,ind[i].idx[0]); + SPRINTF(lbuff,"%s%s",item_0,ind[i].idx[0]); } else if (alphabet(ind[i].dic[0][0])) { if (lethead_flag>0) { @@ -136,7 +162,7 @@ void indwrite(char *filename, struct index *ind, int pagenum) else if (lethead_flag<0) { fprintf(fp,"%s%c%s",lethead_prefix,ind[i].dic[0][0]+32,lethead_suffix); } - snprintf(lbuff,BUFFERLEN,"%s%s",item_0,ind[i].idx[0]); + SPRINTF(lbuff,"%s%s",item_0,ind[i].idx[0]); } else if (japanese(ind[i].dic[0])) { if (lethead_flag) { @@ -153,7 +179,7 @@ void indwrite(char *filename, struct index *ind, int pagenum) } fputs(lethead_suffix,fp); } - snprintf(lbuff,BUFFERLEN,"%s%s",item_0,ind[i].idx[0]); + SPRINTF(lbuff,"%s%s",item_0,ind[i].idx[0]); for (hpoint=0;hpoint<(strlen(datama)/2);hpoint++) { if ((unsigned char)ind[i].dic[0][1]<(unsigned char)datama[hpoint*2+1]) { break; @@ -162,18 +188,18 @@ void indwrite(char *filename, struct index *ind, int pagenum) } switch (ind[i].words) { case 1: - snprintf(TAIL_LEN(lbuff),"%s",delim_0); + SAPPENDF(lbuff,"%s",delim_0); break; case 2: - snprintf(TAIL_LEN(lbuff),"%s%s",item_x1,ind[i].idx[1]); - snprintf(TAIL_LEN(lbuff),"%s",delim_1); + SAPPENDF(lbuff,"%s%s",item_x1,ind[i].idx[1]); + SAPPENDF(lbuff,"%s",delim_1); break; case 3: - snprintf(TAIL_LEN(lbuff),"%s%s",item_x1,ind[i].idx[1]); - snprintf(TAIL_LEN(lbuff),"%s%s",item_x2,ind[i].idx[2]); - snprintf(TAIL_LEN(lbuff),"%s",delim_2); + SAPPENDF(lbuff,"%s%s",item_x1,ind[i].idx[1]); + SAPPENDF(lbuff,"%s%s",item_x2,ind[i].idx[2]); + SAPPENDF(lbuff,"%s",delim_2); break; default: @@ -229,41 +255,41 @@ void indwrite(char *filename, struct index *ind, int pagenum) switch (ind[i].words) { case 1: - snprintf(TAIL_LEN(lbuff),"%s%s%s",item_0,ind[i].idx[0],delim_0); + SAPPENDF(lbuff,"%s%s%s",item_0,ind[i].idx[0],delim_0); break; case 2: if (strcmp(ind[i-1].idx[0],ind[i].idx[0])!=0 || strcmp(ind[i-1].dic[0],ind[i].dic[0])!=0) { - snprintf(TAIL_LEN(lbuff),"%s%s%s",item_0,ind[i].idx[0],item_x1); + SAPPENDF(lbuff,"%s%s%s",item_0,ind[i].idx[0],item_x1); } else { if (ind[i-1].words==1) { - snprintf(TAIL_LEN(lbuff),"%s",item_01); + SAPPENDF(lbuff,"%s",item_01); } else { - snprintf(TAIL_LEN(lbuff),"%s",item_1); + SAPPENDF(lbuff,"%s",item_1); } } - snprintf(TAIL_LEN(lbuff),"%s",ind[i].idx[1]); - snprintf(TAIL_LEN(lbuff),"%s",delim_1); + SAPPENDF(lbuff,"%s",ind[i].idx[1]); + SAPPENDF(lbuff,"%s",delim_1); break; case 3: if (strcmp(ind[i-1].idx[0],ind[i].idx[0])!=0 || strcmp(ind[i-1].dic[0],ind[i].dic[0])!=0) { - snprintf(TAIL_LEN(lbuff),"%s%s",item_0,ind[i].idx[0]); - snprintf(TAIL_LEN(lbuff),"%s%s%s",item_x1,ind[i].idx[1],item_x2); + SAPPENDF(lbuff,"%s%s",item_0,ind[i].idx[0]); + SAPPENDF(lbuff,"%s%s%s",item_x1,ind[i].idx[1],item_x2); } else if (ind[i-1].words==1) { - snprintf(TAIL_LEN(lbuff),"%s%s%s",item_01,ind[i].idx[1],item_x2); + SAPPENDF(lbuff,"%s%s%s",item_01,ind[i].idx[1],item_x2); } else if (strcmp(ind[i-1].idx[1],ind[i].idx[1])!=0 || strcmp(ind[i-1].dic[1],ind[i].dic[1])!=0) { - if (ind[i-1].words==2) snprintf(TAIL_LEN(lbuff),"%s%s%s",item_1,ind[i].idx[1],item_12); - else snprintf(TAIL_LEN(lbuff),"%s%s%s",item_1,ind[i].idx[1],item_x2); + if (ind[i-1].words==2) SAPPENDF(lbuff,"%s%s%s",item_1,ind[i].idx[1],item_12); + else SAPPENDF(lbuff,"%s%s%s",item_1,ind[i].idx[1],item_x2); } else { - snprintf(TAIL_LEN(lbuff),"%s",item_2); + SAPPENDF(lbuff,"%s",item_2); } - snprintf(TAIL_LEN(lbuff),"%s%s",ind[i].idx[2],delim_2); + SAPPENDF(lbuff,"%s%s",ind[i].idx[2],delim_2); break; default: @@ -300,25 +326,25 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff) || ind[num].p[j].enc[0]==range_close) ind[num].p[j].enc++; if (strlen(ind[num].p[j].enc)>0) { - snprintf(buff,BUFFERLEN,"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); + SPRINTF(buff,"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); } if (strlen(suffix_3p)>0 && (pnumconv(ind[num].p[cc].page,ind[num].p[cc].attr[0])-pnumconv(ind[num].p[j].page,ind[num].p[j].attr[0]))==2) { - snprintf(TAIL_LEN(buff),"%s%s",ind[num].p[j].page,suffix_3p); + SAPPENDF(buff,"%s%s",ind[num].p[j].page,suffix_3p); } else if (strlen(suffix_mp)>0 && (pnumconv(ind[num].p[cc].page,ind[num].p[cc].attr[0])-pnumconv(ind[num].p[j].page,ind[num].p[j].attr[0]))>=2) { - snprintf(TAIL_LEN(buff),"%s%s",ind[num].p[j].page,suffix_mp); + SAPPENDF(buff,"%s%s",ind[num].p[j].page,suffix_mp); } else if (strlen(suffix_2p)>0 && (pnumconv(ind[num].p[cc].page,ind[num].p[cc].attr[0])-pnumconv(ind[num].p[j].page,ind[num].p[j].attr[0]))==1) { - snprintf(TAIL_LEN(buff),"%s%s",ind[num].p[j].page,suffix_2p); + SAPPENDF(buff,"%s%s",ind[num].p[j].page,suffix_2p); } else { - snprintf(TAIL_LEN(buff),"%s%s",ind[num].p[j].page,delim_r); - snprintf(TAIL_LEN(buff),"%s",ind[num].p[cc].page); + SAPPENDF(buff,"%s%s",ind[num].p[j].page,delim_r); + SAPPENDF(buff,"%s",ind[num].p[cc].page); } - snprintf(TAIL_LEN(tmpbuff),"%s",buff); + SAPPENDF(tmpbuff,"%s",buff); buff[0]='\0'; if (strlen(ind[num].p[j].enc)>0) { - snprintf(TAIL_LEN(tmpbuff),"%s",encap_suffix); + SAPPENDF(tmpbuff,"%s",encap_suffix); } linecheck(lbuff,tmpbuff); j=cc; @@ -326,53 +352,53 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff) goto PRINT; } else { - snprintf(TAIL_LEN(tmpbuff),"%s",delim_n); + SAPPENDF(tmpbuff,"%s",delim_n); linecheck(lbuff,tmpbuff); } } else if (strlen(ind[num].p[j].enc)>0) { /* normal encap */ if (ind[num].p[j].enc[0]==range_close) { - snprintf(errbuff,BUFFERLEN,"Warning: Unmatched range closing operator \'%c\',",range_close); - for (i=0;i0) { - snprintf(TAIL_LEN(tmpbuff),"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); - snprintf(TAIL_LEN(tmpbuff),"%s%s%s",ind[num].p[j].page,encap_suffix,delim_n); + SAPPENDF(tmpbuff,"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); + SAPPENDF(tmpbuff,"%s%s%s",ind[num].p[j].page,encap_suffix,delim_n); linecheck(lbuff,tmpbuff); } else { - snprintf(TAIL_LEN(tmpbuff),"%s%s",ind[num].p[j].page,delim_n); + SAPPENDF(tmpbuff,"%s%s",ind[num].p[j].page,delim_n); linecheck(lbuff,tmpbuff); } } else { /* no encap */ - snprintf(TAIL_LEN(tmpbuff),"%s%s",ind[num].p[j].page,delim_n); + SAPPENDF(tmpbuff,"%s%s",ind[num].p[j].page,delim_n); linecheck(lbuff,tmpbuff); } } if (ind[num].p[j].enc[0]==range_open) { - snprintf(errbuff,BUFFERLEN,"Warning: Unmatched range opening operator \'%c\',",range_open); - for (k=0;k0) { - snprintf(TAIL_LEN(tmpbuff),"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); - snprintf(TAIL_LEN(tmpbuff),"%s%s",ind[num].p[j].page,encap_suffix); + SAPPENDF(tmpbuff,"%s%s%s",encap_prefix,ind[num].p[j].enc,encap_infix); + SAPPENDF(tmpbuff,"%s%s",ind[num].p[j].page,encap_suffix); } else { - snprintf(TAIL_LEN(tmpbuff),"%s",ind[num].p[j].page); + SAPPENDF(tmpbuff,"%s",ind[num].p[j].page); } linecheck(lbuff,tmpbuff); @@ -389,8 +415,8 @@ static int range_check(struct index ind, int count, char *lbuff) for (i=count;i0) { - snprintf(tmpbuff,BUFFERLEN,"%s%s%s",encap_prefix,ind.p[j].enc,encap_infix); - snprintf(TAIL_LEN(tmpbuff),"%s%s%s",ind.p[j].page,encap_suffix,delim_n); + SPRINTF(tmpbuff,"%s%s%s",encap_prefix,ind.p[j].enc,encap_infix); + SAPPENDF(tmpbuff,"%s%s%s",ind.p[j].page,encap_suffix,delim_n); linecheck(lbuff,tmpbuff); } } } if (j==ind.num+1) { - snprintf(errbuff,BUFFERLEN,"Warning: Unmatched range opening operator \'%c\',",range_open); - for (k=0;kline_max) { - snprintf(TAIL_LEN(lbuff),"\n%s%s",indent_space,tmpbuff); + SAPPENDF(lbuff,"\n%s%s",indent_space,tmpbuff); line_length=indent_length+strlen(tmpbuff); tmpbuff[0]='\0'; } else { - snprintf(TAIL_LEN(lbuff),"%s",tmpbuff); + SAPPENDF(lbuff,"%s",tmpbuff); line_length+=strlen(tmpbuff); tmpbuff[0]='\0'; } -- cgit v1.2.3