dnl Common Autoconf sinclude file for kpathsea-using programs. (Have to dnl use the m4 `sinclude' builtin instead of `include', since Autoconf dnl disables `include'.) dnl Write output here, instead of putting a zillion -D's on the command line. AC_CONFIG_HEADER(c-auto.h) AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_INSTALL AC_CHECK_TOOL(AR, ar) AC_ARFLAGS AC_CHECK_TOOL(RANLIB, ranlib, :) ### begin-GG-local # Set default for ARFLAGS test -n "$ARFLAGS" || ARFLAGS="cr" AC_SUBST(ARFLAGS) ### end-GG-local AC_ISC_POSIX AC_HEADER_DIRENT AC_HEADER_STDC AC_FUNC_CLOSEDIR_VOID AC_CHECK_HEADERS(assert.h float.h limits.h memory.h pwd.h stdlib.h \ string.h unistd.h) AC_CHECK_FUNCS(basename bcopy memmove putenv) AC_CHECK_LIB(m,sqrt) AC_C_CONST # This is a GNU libc invention. AC_MSG_CHECKING(whether program_invocation_name is predefined) AC_CACHE_VAL(kb_cv_var_program_inv_name, [AC_TRY_LINK(, [main() { program_invocation_name = "love"; }], kb_cv_var_program_inv_name=yes, kb_cv_var_program_inv_name=no)])dnl AC_MSG_RESULT($kb_cv_var_program_inv_name) if test $kb_cv_var_program_inv_name = yes; then AC_DEFINE(HAVE_PROGRAM_INVOCATION_NAME) fi # Some BSD putenv's, e.g., FreeBSD, do malloc/free's on the environment. # This test program is due to Mike Hibler . # We don't actually need to run this if we don't have putenv, but it # doesn't hurt. AC_MSG_CHECKING(whether putenv uses malloc) AC_CACHE_VAL(kb_cv_func_putenv_malloc, [AC_TRY_RUN([ #define VAR "YOW_VAR" #define STRING1 "GabbaGabbaHey" #define STRING2 "Yow!!" /* should be shorter than STRING1 */ extern char *getenv (); /* in case char* and int don't mix gracefully */ #ifdef __BEOS__ /* FIXME: Should this be for all hosts? */ extern void *malloc (); #endif main () { char *str1, *rstr1, *str2, *rstr2; str1 = getenv (VAR); if (str1) exit (1); str1 = malloc (strlen (VAR) + 1 + strlen (STRING1) + 1); if (str1 == 0) exit (2); strcpy (str1, VAR); strcat (str1, "="); strcat (str1, STRING1); if (putenv (str1) < 0) exit (3); rstr1 = getenv (VAR); if (rstr1 == 0) exit (4); rstr1 -= strlen (VAR) + 1; if (strncmp (rstr1, VAR, strlen (VAR))) exit (5); str2 = malloc (strlen (VAR) + 1 + strlen (STRING2) + 1); if (str2 == 0 || str1 == str2) exit (6); strcpy (str2, VAR); strcat (str2, "="); strcat (str2, STRING2); if (putenv (str2) < 0) exit (7); rstr2 = getenv (VAR); if (rstr2 == 0) exit (8); rstr2 -= strlen (VAR) + 1; #if 0 printf ("rstr1=0x%x, rstr2=0x%x\n", rstr1, rstr2); /* * If string from first call was reused for the second call, * you had better not do a free on the first string! */ if (rstr1 == rstr2) printf ("#define SMART_PUTENV\n"); else printf ("#undef SMART_PUTENV\n"); #endif #ifdef __BEOS__ /* Force this test to result in SMART_PUTENV being defined for BeOS. Although the test fails to detect it, it really does appear that putenv uses malloc/free. The only evidence for this though is that ran segfaults went away when SMART_PUTENV was defined. This may have been only coincidence, or perhaps some other bug that has long since been fixed. It's easy enough to test though by disabling this hack and seeing if unixtex remains stable. */ exit (0); #endif exit (rstr1 == rstr2 ? 0 : 1); }], kb_cv_func_putenv_malloc=yes, kb_cv_func_putenv_malloc=no, kb_cv_func_putenv_malloc=no)])dnl AC_MSG_RESULT($kb_cv_func_putenv_malloc) if test $kb_cv_func_putenv_malloc = yes; then AC_DEFINE(SMART_PUTENV) fi