diff options
author | Andy Wingo <wingo@pobox.com> | 2011-04-12 13:12:56 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-04-28 22:39:20 +0200 |
commit | ad378da9757ebc503a9d6237afbc74dacea1b348 (patch) | |
tree | 9573d7b21f071ba0dc9d33a5e2bf5c34f398c73d | |
parent | e6efefad0811e975e6a501829a0871d030b0ab88 (diff) | |
download | guile-ad378da9757ebc503a9d6237afbc74dacea1b348.tar.gz |
check for iconveh values at configure-time
* configure.ac: Check for the iconveh values here, instead of relying on
gen-scmconfig to know them. That doesn't work in general because
gen-scmconfig runs on the build machine, not the target machine.
* libguile/Makefile.am (gen-scmconfig.$(OBJEXT)): Revert rule to the
revision before 533d8212.
* libguile/gen-scmconfig.h.in (SCM_I_GSC_ICONVEH_ERROR):
(SCM_I_GSC_ICONVEH_QUESTION_MARK):
(SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE):
* libguile/gen-scmconfig.c: Use configure-time substitutions to set
SCM_ICONVEH_ERROR_HANDLER et al.
-rw-r--r-- | configure.ac | 64 | ||||
-rw-r--r-- | libguile/Makefile.am | 12 | ||||
-rw-r--r-- | libguile/gen-scmconfig.c | 9 | ||||
-rw-r--r-- | libguile/gen-scmconfig.h.in | 3 |
4 files changed, 76 insertions, 12 deletions
diff --git a/configure.ac b/configure.ac index c34114825..64cab9a1a 100644 --- a/configure.ac +++ b/configure.ac @@ -1193,6 +1193,70 @@ 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 <uniconv.h> +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 <uniconv.h> +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 <uniconv.h> +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? # # Following code comes from Autoconf 2.61's internal _AC_LIBOBJ_ALLOCA 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 <stdio.h> #include <string.h> -#include <uniconv.h> #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: |