+: see if locale.h is available
+set locale.h i_locale
+eval $inhdr
+
+: check for nl_langinfo_l item
+$cat <<EOM
+
+Checking to see if you have nl_langinfo_l(), and that it is thread-safe
+EOM
+$cat >try.c <<EOCP
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#include <string.h>
+#$i_langinfo I_LANGINFO
+#ifdef I_LANGINFO
+# include <langinfo.h>
+#endif
+#$i_pthread I_PTHREAD
+#ifdef I_PTHREAD
+# include <pthread.h>
+#endif
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+# include <locale.h>
+#endif
+
+void *
+thread_start(void * arg)
+{
+ nl_langinfo(RADIXCHAR);
+}
+
+int main() {
+ char * main_buffer;
+ char save_main_buffer[1000];
+ pthread_t subthread;
+ pthread_attr_t attr;
+
+ main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0));
+
+ /* If too large for our generous allowance, just assume we don't have
+ * it. */
+ if (strlen(main_buffer) >= sizeof(save_main_buffer)) {
+ exit(1);
+ }
+
+ strcpy(save_main_buffer, main_buffer);
+
+ if (pthread_attr_init(&attr) != 0) {
+ exit(1);
+ }
+
+ if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) {
+ exit(1);
+ }
+
+ if (pthread_join(subthread, NULL) != 0) {
+ exit(1);
+ }
+
+ exit(! (strcmp(main_buffer, save_main_buffer) == 0));
+}
+EOCP
+case "$usethreads" in
+ define)
+ set try
+ if eval $compile; then
+ echo "Your system has nl_langinfo_l()..." >&4
+ d_nl_langinfo_l="$define"
+ echo "$d_nl_langinfo_l" >&4
+ if $run ./try; then
+ echo "and it is thread-safe (just as I'd hoped)." >&4
+ d_thread_safe_nl_langinfo_l="$define"
+ echo "$d_thread_safe_nl_langinfo_l" >&4
+ else
+ echo "but it isn't thread-safe." >&4
+ fi
+ else
+ echo "your system does not have nl_langinfo_l()" >&4
+ fi
+ ;;
+ *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4
+esac
+if test X"$d_nl_langinfo_l" = X; then
+ d_nl_langinfo_l="$undef"
+fi
+if test X"$d_thread_safe_nl_langinfo_l" = X; then
+ d_thread_safe_nl_langinfo_l="$undef"
+fi
+$rm_try
+
+: Look for non 'int'-sized bitfields
+case "$d_non_int_bitfields" in
+'')
+echo " " >&4
+echo "Checking whether your compiler can handle struct bitfields that aren't 'int' or 'unsigned int' ..." >&4
+$cat >try.c <<'EOCP'
+#include <stdio.h>
+struct foo {
+ unsigned char byte:1;
+ unsigned short halfword:1;
+} bar;
+EOCP
+if $cc $ccflags -c try.c >try.out 2>&1 ; then
+ if $compiler_warning try.out >/dev/null 2>&1; then
+ echo "Your C compiler doesn't support struct bitfields that aren't 'int' or 'unsigned int'." >&4
+ val="$undef"
+ else
+ echo "Your C compiler supports struct bitfields besides 'int' and 'unsigned int'." >&4
+ val="$define"
+ fi
+else
+ echo "Your C compiler doesn't seem to understand struct bitfields that aren't 'int' or 'unsigned int' at all." >&4
+ val="$undef"
+fi
+;;
+*) val="$d_non_int_bitfields" ;;
+esac
+set d_non_int_bitfields
+eval $setvar
+$rm_try
+