--- /dev/null
+This file explains in detail how we come to the conclusion that libgettextpo
+is multithread-safe.
+
+2024-08: This is the list of all variables
+ $ nm $file | grep ' [bBdD] '
+and their resolution.
+
+------------------ Object files in ../src/:
+
+message.o
+0000000000000000 D libgettextpo_format_language
+0000000000000100 D libgettextpo_format_language_pretty
+0000000000000200 D libgettextpo_syntax_check_name
+These are in fact 'const'.
+
+write-catalog.o
+0000000000000000 d page_width
+This cannot change at runtime, because message_page_width_set is not called in libgettextpo.
+
+write-po.o
+0000000000000002 b escape
+This cannot change at runtime, because message_print_style_escape is not called in libgettextpo.
+0000000000000004 d filepos_comment_type
+This cannot change at runtime, because message_print_style_filepos is not called in libgettextpo.
+0000000000000000 b indent
+This cannot change at runtime, because message_print_style_indent is not called in libgettextpo.
+0000000000000000 D libgettextpo_output_format_po
+This is effectively 'const'.
+0000000000000000 d print_comment
+This cannot change at runtime, because message_print_style_comment is not called in libgettextpo.
+0000000000000001 b uniforum
+This cannot change at runtime, because message_print_style_uniforum is not called in libgettextpo.
+0000000000000008 d wrap_strings
+This cannot change at runtime, because message_page_width_ignore is not called in libgettextpo.
+
+po-charset.o
+0000000000000000 D libgettextpo_po_charset_ascii
+0000000000000008 D libgettextpo_po_charset_utf8
+These are effectively 'const'.
+0000000000000020 d standard_charsets.2
+This is effectively 'const'.
+0000000000000200 d weird_charsets.1
+This is effectively 'const'.
+0000000000000240 d weird_cjk_charsets.0
+This is effectively 'const'.
+
+read-po.o
+0000000000000000 D libgettextpo_gram_max_allowed_errors
+This cannot change at runtime, because gram_max_allowed_errors is not assigned in libgettextpo.
+0000000000000000 D libgettextpo_input_format_po
+This is effectively 'const'.
+
+read-catalog.o
+0000000000000000 d default_methods
+This is effectively 'const'.
+0000000000000000 B libgettextpo_allow_duplicates
+This cannot change at runtime, because allow_duplicates is not assigned in libgettextpo.
+
+plural-table.o
+0000000000000000 D libgettextpo_plural_table
+This is effectively 'const'.
+
+format-awk.o
+0000000000000000 D libgettextpo_formatstring_awk
+This is effectively 'const'.
+
+format-boost.o
+0000000000000000 D libgettextpo_formatstring_boost
+This is effectively 'const'.
+
+format-c++-brace.o
+0000000000000000 D libgettextpo_formatstring_cplusplus_brace
+This is effectively 'const'.
+
+format-c.o
+0000000000000000 D libgettextpo_formatstring_c
+0000000000000040 D libgettextpo_formatstring_objc
+These are effectively 'const'.
+
+format-csharp.o
+0000000000000000 D libgettextpo_formatstring_csharp
+This is effectively 'const'.
+
+format-elisp.o
+0000000000000000 D libgettextpo_formatstring_elisp
+This is effectively 'const'.
+
+format-gcc-internal.o
+0000000000000000 D libgettextpo_formatstring_gcc_internal
+This is effectively 'const'.
+
+format-gfc-internal.o
+0000000000000000 D libgettextpo_formatstring_gfc_internal
+This is effectively 'const'.
+
+format-java.o
+0000000000000000 D libgettextpo_formatstring_java
+This is effectively 'const'.
+
+format-java-printf.o
+0000000000000000 D libgettextpo_formatstring_java_printf
+This is effectively 'const'.
+
+format-javascript.o
+0000000000000000 D libgettextpo_formatstring_javascript
+This is effectively 'const'.
+
+format-kde-kuit.o
+0000000000000000 D libgettextpo_formatstring_kde_kuit
+This is effectively 'const'.
+
+format-kde.o
+0000000000000000 D libgettextpo_formatstring_kde
+This is effectively 'const'.
+
+format-librep.o
+0000000000000000 D libgettextpo_formatstring_librep
+This is effectively 'const'.
+
+format-lisp.o
+0000000000000000 D libgettextpo_formatstring_lisp
+This is effectively 'const'.
+
+format-lua.o
+0000000000000000 D libgettextpo_formatstring_lua
+This is effectively 'const'.
+
+format-pascal.o
+0000000000000000 D libgettextpo_formatstring_pascal
+This is effectively 'const'.
+
+format-perl-brace.o
+0000000000000000 D libgettextpo_formatstring_perl_brace
+This is effectively 'const'.
+
+format-perl.o
+0000000000000000 D libgettextpo_formatstring_perl
+This is effectively 'const'.
+
+format-php.o
+0000000000000000 D libgettextpo_formatstring_php
+This is effectively 'const'.
+
+format-python-brace.o
+0000000000000000 D libgettextpo_formatstring_python_brace
+This is effectively 'const'.
+
+format-python.o
+0000000000000000 D libgettextpo_formatstring_python
+This is effectively 'const'.
+
+format-qt.o
+0000000000000000 D libgettextpo_formatstring_qt
+This is effectively 'const'.
+
+format-qt-plural.o
+0000000000000000 D libgettextpo_formatstring_qt_plural
+This is effectively 'const'.
+
+format-ruby.o
+0000000000000000 D libgettextpo_formatstring_ruby
+This is effectively 'const'.
+
+format-scheme.o
+0000000000000000 D libgettextpo_formatstring_scheme
+This is effectively 'const'.
+
+format-sh.o
+0000000000000000 D libgettextpo_formatstring_sh
+This is effectively 'const'.
+
+format-smalltalk.o
+0000000000000000 D libgettextpo_formatstring_smalltalk
+0000000000000040 D libgettextpo_formatstring_ycp
+These are effectively 'const'.
+
+format-tcl.o
+0000000000000000 D libgettextpo_formatstring_tcl
+This is effectively 'const'.
+
+format.o
+0000000000000000 D libgettextpo_formatstring_parsers
+This is effectively 'const'.
+
+plural-exp.o
+0000000000000000 D libgettextpo_germanic_plural
+This is in fact 'const'.
+
+msgl-check.o
+0000000000000040 d default_values.0
+0000000000000000 d required_fields.1
+These are effectively 'const'.
+
+sentence.o
+0000000000000000 D libgettextpo_sentence_end_required_spaces
+This cannot change at runtime, because sentence_end_required_spaces is not assigned in libgettextpo.
+
+------------------ Object files in this directory:
+
+gettext-po.o
+0000000000000000 b all_formats
+0000000000000000 b all_formats_init_once
+These variables make the gettext-po.c code multithread-safe.
+0000000000000000 D libgettextpo_version
+This cannot change at runtime, because libgettextpo_version is not assigned in libgettextpo.
+
+------------------ Object files part of libgnu.la in this directory:
+
+libgnu_la-exitfail.o
+0000000000000000 D libgettextpo_exit_failure
+This cannot change at runtime, because exit_failure is not assigned in libgettextpo.
+
+libgnu_la-fcntl.o
+0000000000000000 b have_dupfd_cloexec.0
+This can change at runtime, but it will change to the same value in all threads.
+
+libgnu_la-fstrcmp.o
+0000000000000000 b buffer_key
+0000000000000008 b bufmax_key
+0000000000000010 b keys_init_once
+These variables make the fstrcmp.c code multithread-safe.
+
+libgnu_la-fwriteerror.o
+0000000000000000 b stdout_closed.0
+This is not used at runtime, because all uses of write-*.c in libgettextpo is to files specified by a file name, not to stdout.
+
+libgnu_la-gl_linked_list.o
+0000000000000000 D libgettextpo_gl_linked_list_implementation
+This is in fact 'const'.
+
+libgnu_la-mbrtoc32.o
+0000000000000000 b internal_state
+This is not used at runtime, because all uses of mbrtoc32() pass a non-NULL state pointer.
+
+libgnu_la-obstack.o
+0000000000000000 D libgettextpo_obstack_alloc_failed_handler
+This cannot change at runtime, because obstack_alloc_failed_handler is not assigned in libgettextpo.
+
+libgnu_la-striconveha.o
+0000000000000020 d autodetect_jp_try
+0000000000000040 d autodetect_kr_try
+0000000000000000 d autodetect_utf8_try
+These are in fact 'const'.
+0000000000000048 d autodetect_list
+0000000000000050 d autodetect_list_end
+0000000000000000 d autodetect_predefined
+These cannot change at runtime, because uniconv_register_autodetect is not called in libgettextpo.