diff --git a/configure.ac b/configure.ac index c34114825..64cab9a1a 100644 --- a/configure.ac +++ b/configure.ac @@ -1191,6 +1191,70 @@ AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,, GUILE_STRUCT_UTIMBUF +#-------------------------------------------------------------------- +# +# What values do the iconv error handlers have? +# +# The only place that we need iconv in our public interfaces is for +# the error handlers, which are just ints. So we weaken our +# dependency by looking up those values at configure-time. +#-------------------------------------------------------------------- +SCM_I_GSC_ICONVEH_ERROR=0 +SCM_I_GSC_ICONVEH_QUESTION_MARK=1 +SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE=2 +AC_MSG_CHECKING([for iconveh_error]) +AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +#include +int +main (int argc, char *argv[]) +{ + if (argc > 1) + printf ("%d\n", (int)iconveh_error); + return 0; +}])], + [SCM_I_GSC_ICONVEH_ERROR=`./conftest$EXEEXT pretty-please` + AC_MSG_RESULT([$SCM_I_GSC_ICONVEH_ERROR])], + [AC_MSG_FAILURE([failed to get iconveh_error])], + [AC_MSG_WARN([assuming $SCM_I_GSC_ICONVEH_ERROR for cross-compilation])]) + +AC_MSG_CHECKING([for iconveh_question_mark]) +AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +#include +int +main (int argc, char *argv[]) +{ + if (argc > 1) + printf ("%d\n", (int)iconveh_question_mark); + return 0; +}])], + [SCM_I_GSC_ICONVEH_QUESTION_MARK=`./conftest$EXEEXT pretty-please` + AC_MSG_RESULT([$SCM_I_GSC_ICONVEH_QUESTION_MARK])], + [AC_MSG_FAILURE([failed to get iconveh_question_mark])], + [AC_MSG_WARN([assuming $SCM_I_GSC_ICONVEH_QUESTION_MARK for cross-compilation])]) + +AC_MSG_CHECKING([for iconveh_escape_sequence]) +AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +#include +int +main (int argc, char *argv[]) +{ + if (argc > 1) + printf ("%d\n", (int)iconveh_escape_sequence); + return 0; +}])], + [SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE=`./conftest$EXEEXT pretty-please` + AC_MSG_RESULT([$SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE])], + [AC_MSG_FAILURE([failed to get iconveh_escape_sequence])], + [AC_MSG_WARN([assuming $SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE for cross-compilation])]) + +AC_SUBST([SCM_I_GSC_ICONVEH_ERROR]) +AC_SUBST([SCM_I_GSC_ICONVEH_QUESTION_MARK]) +AC_SUBST([SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE]) + + #-------------------------------------------------------------------- # # Which way does the stack grow? diff --git a/libguile/Makefile.am b/libguile/Makefile.am index 4790cd917..4ec7ee5ab 100644 --- a/libguile/Makefile.am +++ b/libguile/Makefile.am @@ -55,13 +55,11 @@ gen_scmconfig_SOURCES = gen-scmconfig.c ## Override default rule; this should be compiled for BUILD host. ## For some reason, OBJEXT does not include the dot gen-scmconfig.$(OBJEXT): gen-scmconfig.c - $(AM_V_GEN) \ - if [ "$(cross_compiling)" = "yes" ]; then \ - $(CC_FOR_BUILD) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) \ - -c -o $@ $<; \ - else \ - $(COMPILE) -c -o $@ $<; \ + $(AM_V_GEN) \ + if [ "$(cross_compiling)" = "yes" ]; then \ + $(CC_FOR_BUILD) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) -c -o $@ $<; \ + else \ + $(COMPILE) -c -o $@ $<; \ fi ## Override default rule; this should run on BUILD host. diff --git a/libguile/gen-scmconfig.c b/libguile/gen-scmconfig.c index 5834346c7..176f25c02 100644 --- a/libguile/gen-scmconfig.c +++ b/libguile/gen-scmconfig.c @@ -123,7 +123,6 @@ #include #include -#include #define pf printf @@ -397,11 +396,11 @@ main (int argc, char *argv[]) pf ("\n"); pf ("/* Constants from uniconv.h. */\n"); - pf ("#define SCM_ICONVEH_ERROR %d\n", (int) iconveh_error); - pf ("#define SCM_ICONVEH_QUESTION_MARK %d\n", - (int) iconveh_question_mark); + pf ("#define SCM_ICONVEH_ERROR %d\n", SCM_I_GSC_ICONVEH_ERROR); + pf ("#define SCM_ICONVEH_QUESTION_MARK %d\n", + SCM_I_GSC_ICONVEH_QUESTION_MARK); pf ("#define SCM_ICONVEH_ESCAPE_SEQUENCE %d\n", - (int) iconveh_escape_sequence); + SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE); printf ("#endif\n"); diff --git a/libguile/gen-scmconfig.h.in b/libguile/gen-scmconfig.h.in index 125720acd..30f43d7b7 100644 --- a/libguile/gen-scmconfig.h.in +++ b/libguile/gen-scmconfig.h.in @@ -31,6 +31,9 @@ #define SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER @SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER@ #define SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS @SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS@ #define SCM_I_GSC_HAVE_STRUCT_DIRENT64 @SCM_I_GSC_HAVE_STRUCT_DIRENT64@ +#define SCM_I_GSC_ICONVEH_ERROR @SCM_I_GSC_ICONVEH_ERROR@ +#define SCM_I_GSC_ICONVEH_QUESTION_MARK @SCM_I_GSC_ICONVEH_QUESTION_MARK@ +#define SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE @SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE@ /* Local Variables: