?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 2017 Karl Williamson ?RCS: ?RCS: You may distribute under the terms of either the GNU General Public ?RCS: License or the Artistic License, as specified in the README file. ?RCS: ?MAKE:d_nl_langinfo_l d_thread_safe_nl_langinfo_l: Compile cat rm_try Oldconfig \ i_pthread i_stdlib i_langinfo i_locale \ usethreads run ?MAKE: -pick add $@ %< ?S:d_nl_langinfo_l: ?S: This variable contains the eventual value of the ?S: HAS_NL_LANGINFO_L symbol, which indicates if the ?S: nl_langinfo_l() function exists. ?S:. ?S:d_thread_safe_nl_langinfo_l: ?S: This variable contains the eventual value of the ?S: HAS_THREAD_SAFE_NL_LANGINFO_L symbol, which indicates if the ?S: nl_langinfo_l() function exists and is thread-safe. ?S:. ?C:HAS_NL_LANGINFO_L: ?C: This symbol, when defined, indicates presence of the nl_langinfo_l() ?C: function ?C:. ?C:HAS_THREAD_SAFE_NL_LANGINFO_L: ?C: This symbol, when defined, indicates presence of the nl_langinfo_l() ?C: function, and that it is thread-safe. ?C:. ?H:#$d_nl_langinfo_l HAS_NL_LANGINFO_L /**/ ?H:#$d_thread_safe_nl_langinfo_l HAS_THREAD_SAFE_NL_LANGINFO_L /**/ ?H:. ?F:!try : check for nl_langinfo_l item $cat <try.c < #endif #include #$i_langinfo I_LANGINFO #ifdef I_LANGINFO # include #endif #$i_pthread I_PTHREAD #ifdef I_PTHREAD # include #endif #$i_locale I_LOCALE #ifdef I_LOCALE # include #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