1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

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.
This commit is contained in:
Andy Wingo 2011-04-12 13:12:56 +02:00
parent e6efefad08
commit ad378da975
4 changed files with 76 additions and 12 deletions

View file

@ -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 <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?

View file

@ -57,9 +57,7 @@ gen_scmconfig_SOURCES = gen-scmconfig.c
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 $@ $<; \
$(CC_FOR_BUILD) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) -c -o $@ $<; \
else \
$(COMPILE) -c -o $@ $<; \
fi

View file

@ -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_ERROR %d\n", SCM_I_GSC_ICONVEH_ERROR);
pf ("#define SCM_ICONVEH_QUESTION_MARK %d\n",
(int) iconveh_question_mark);
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");

View file

@ -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: