2025-04-20  Bruno Haible  <bruno@clisp.org>

	Release gperf-3.3.
	* src/version.cc (version_string): Bump.
	* tests/*.exp: Update.
	* NEWS: Mention the changes.

2025-04-20  Bruno Haible  <bruno@clisp.org>

	Add two more assertions.
	Suggested by Frank Wojcik.
	* src/search.cc (Search::find_asso_values): Assert that a step's
	_changing_count is positive.

2025-04-20  Bruno Haible  <bruno@clisp.org>

	Fix typo in comment.
	Reported by Frank Wojcik.
	* src/search.cc (Search::find_asso_values): Fix typo in comment.

2025-04-20  Bruno Haible  <bruno@clisp.org>

	Use an array-list instead of a linked-list of equiv.-classes, part 2.
	* src/search.cc (Search::compute_partition): Fix a memory leak.

2025-04-20  Bruno Haible  <bruno@clisp.org>

	Use a hash table in compute_partition, part 2.
	* src/search.cc (Search::compute_partition): Fix a memory leak.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Optimize: Test large equivalence classes for conflict first.
	This reduces the execution time of gperf on large inputs by ca. 10%.
	* src/search.cc (cmp_equiv_classes): New function.
	(compute_partition): Sort the equivalence classes according to
	decreasing size.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Refactor: Use an array-list instead of a linked-list of equiv.-classes.
	* src/search.h (Search::compute_partition): Return a 'Partition *', not
	a 'EquivalenceClass *'.
	(Search::count_possible_collisions, Search::unchanged_partition): Change
	parameter from 'EquivalenceClass *' to 'Partition *'.
	* src/search.cc (struct EquivalenceClass): Remove field _next.
	(struct Partition): New type.
	(struct Step): Change type of _partition from 'EquivalenceClass *' to
	'Partition *'.
	(Search::compute_partition): Return a 'Partition *', not a
	'EquivalenceClass *'.
	(delete_partition): Update.
	(Search::count_possible_collisions, Search::unchanged_partition): Change
	parameter from 'EquivalenceClass *' to 'Partition *'.
	(Search::find_asso_values): Update.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Optimize: Use an array-list instead of a linked-list of keywords.
	Storing list elements in contiguous memory means: less cache misses.
	This reduces the execution time of gperf on large inputs by ca. 30%.
	* src/arraylist.h: New file.
	* src/arraylist.cc: New file.
	* src/Makefile.in (OBJECTS): Add arraylist.$(OBJEXT).
	(ARRAYLIST_H): New variable.
	(arraylist.$(OBJEXT)): New rule.
	(search.$(OBJEXT)): Update dependencies.
	(SOURCE_FILES): Add arraylist.cc and arraylist.h.
	* src/search.cc: Include arraylist.h.
	(struct EquivalenceClass): An an ArrayList field. Remove the linked-list
	fields. Add a constructor.
	(Search::compute_partition, delete_partition): Update.
	(Search::count_possible_collisions, Search::unchanged_partition,
	Search::find_asso_values): Update.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Optimize: Minimize object references in find_asso_values.
	This reduces the execution time of gperf on large inputs by ca. 4%.
	* src/search.cc (Search::find_asso_values): Cache some values in local
	variables.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Optimize: Use a hash table in compute_partition.
	This reduces the execution time of gperf on large inputs by ca. 30%.
	* autogen.sh (GNULIB_MODULES): Add map-c++, hash-map.
	* src/keyword.h: Include <stddef.h>.
	(struct KeywordExt): Add fields _undetermined_chars,
	_undetermined_chars_length, _undetermined_chars_hashcode.
	* src/search.cc: Include gl_map.hh, gl_hash_map.h.
	(Search::prepare_asso_values): Initialize the _undetermined_chars field.
	(struct EquivalenceClass): Remove the fields _undetermined_chars,
	_undetermined_chars_length.
	(undetermined_equals, undetermined_hashcode): New functions.
	(Search::compute_partition): Initialize the _undetermined_chars* fields
	of all keywords. Use a hash map instead of a loop over the equivalence
	classes.
	(Search::find_good_asso_values): Deallocate the _undetermined_chars field.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	Optimize: Make Bool_Array take less memory.
	Less memory means: less cache misses.
	This reduces the execution time of gperf on large inputs by ca. 2.5%.
	* src/bool-array.h (Bool_Array): For the _storage_array and
	_iteration_number fields, use 'unsigned char' instead of 'unsigned int'.
	* src/bool-array.icc (Bool_Array::Bool_Array, Bool_Array::clear: Update.
	* src/bool-array.cc (Bool_Array::~Bool_Array): Update.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	tests: Add unit test with many keywords.
	* tests/generate-5000.sh: New file.
	* tests/5000.gperf: New generated file.
	* tests/5000.exp: New generated file.
	* tests/Makefile.in (SOURCE_FILES): Add them.
	(check-large): New rule.

2025-04-19  Bruno Haible  <bruno@clisp.org>

	build: Update dependencies after 2025-04-16 change.
	* src/Makefile.in (*.$(OBJEXT)): Depend on $(CONFIG_H).

2025-04-17  Bruno Haible  <bruno@clisp.org>

	Improve comments.
	* src/search.cc: Fix comments.

2025-04-16  Bruno Haible  <bruno@clisp.org>

	build: Update after gnulib changed.
	* gnulib-local/lib/getopt-pfx-ext.h.diff: Remove file.
	* Makefile.in (SOURCE_FILES): Remove it.

	build: Use more gnulib modules.
	* autogen.sh (GNULIB_MODULES): Add getopt-gnu.
	Use directory gnulib-local.
	* gnulib-local/lib/getopt-pfx-ext.h.diff: New file.
	* Makefile.in (SOURCE_FILES): Add it.
	(distdir): Use 'mkdir -p' instead of 'mkdir'.
	* lib/getopt.h: Remove file.
	* lib/getopt.c: Remove file.
	* lib/getopt1.c: Remove file.
	* lib/Makefile.am (libgp_a_SOURCES): Remove them.

2025-04-16  Bruno Haible  <bruno@clisp.org>

	build: Use more gnulib modules.
	* autogen.sh (GNULIB_MODULES): Add read-file.
	Copy also config.guess and config.sub.
	* lib/Makefile.am (BUILT_SOURCES, MOSTLYCLEANDIRS): New variables.
	(libgp_a_SOURCES): Remove getline.h, getline.cc.
	* lib/getline.h: Remove file.
	* lib/getline.cc: Remove file.
	* src/configure.ac: Change config.h to also include ../lib/config.h.
	* src/output.cc: Include <config.h> first.
	* src/search.cc: Likewise.
	* src/bool-array.cc: Include <config.h>.
	* src/keyword.cc: Likewise.
	* src/keyword-list.cc: Likewise.
	* src/hash-table.cc: Likewise.
	* src/main.cc: Likewise.
	* src/options.cc: Likewise.
	* src/positions.cc: Likewise.
	* src/version.cc: Likewise.
	* src/input.cc: Likewise. Include read-file.h instead of getline.h.
	(Input<KT>::read_input): Use fread_file instead of get_delim.

2025-04-16  Bruno Haible  <bruno@clisp.org>

	build: Prepare for using generated .h files in lib/.
	* src/Makefile.in (CPPFLAGS): Add more -I options.

2025-04-16  Bruno Haible  <bruno@clisp.org>

	build: Use gnulib-tool with a module list.
	* .gitmodules: New file.
	* gitsub.sh: New file, from gnulib/top/gitsub.sh.
	* autopull.sh: Use gitsub.sh to check out gnulib.
	* autogen.sh: Accept --skip-gnulib option. Invoke gnulib-tool, assuming
	a gnulib checkout is already present.
	* Makefile.devel (lib/aclocal.m4): Update reference to macros directory.
	* lib/configure.ac: Likewise. Invoke gl_EARLY, gl_INIT.
	* lib/Makefile.am (EXTRA_DIST, MOSTLYCLEANFILES): New variables.
	Include Makefile.gnulib.

2025-04-16  Bruno Haible  <bruno@clisp.org>

	build: Use Automake in lib/.
	* autopull.sh: Copy also m4/init-package-version.m4.
	* autogen.sh: Mention the requirement for Automake.
	* Makefile.devel (lib/aclocal.m4, lib/config.h.in, lib/Makefile.in): New
	rules.
	(lib/configure): Use lib/aclocal.m4 instead of the top-level aclocal.m4.
	(src/config.h.in): Fix rule.
	(totally-clean): Remove the new generated files.
	* lib/configure.ac: Require Autoconf >= 2.70. Change AC_INIT invocation.
	Invoke AC_CONFIG_MACRO_DIRS, gl_INIT_PACKAGE_VERSION, AM_INIT_AUTOMAKE,
	AC_CONFIG_HEADERS. Don't invoke AC_MAKE_SET, AC_PROG_CPP,
	AC_PROG_CXXCPP, AC_PROG_INSTALL.
	* lib/Makefile.am: New file.
	* lib/Makefile.in: Remove file.
	* Makefile.in (IMPORTED_FILES): Remove lib/filename.h.

2025-04-13  Bruno Haible  <bruno@clisp.org>

	Release gperf-3.2.1.
	* src/version.cc (version_string): Bump.
	* tests/*.exp: Update.
	* NEWS: Mention the changes.

2025-04-09  Bruno Haible  <bruno@clisp.org>

	Fix "make check" failure with an ISO C 23 conforming C compiler.
	Prompted by
	<https://lists.gnu.org/archive/html/bug-gperf/2025-04/msg00002.html>.
	* tests/smtp.gperf (my_case_strcmp, main): Convert from K&R C syntax
	to ISO C 90 syntax.

2025-04-09  Bruno Haible  <bruno@clisp.org>

	Avoid "-Wundef" warnings in C++ mode on the generated code.
	Reported by Heiko Becker <mail@heiko-becker.de> in
	<https://lists.gnu.org/archive/html/bug-gperf/2025-04/msg00001.html>
	and by Thomas Klausner <wiz@netbsd.org>.
	* src/output.cc (Output::output_hash_function): Emit a
	'defined __STDC_VERSION__' before the test of __STDC_VERSION__.
	* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
	tests/cplusplus.exp, tests/java.exp, tests/languages.exp,
	tests/modula2.exp, tests/objc.exp: Update.

2025-04-05  Bruno Haible  <bruno@clisp.org>

	Release gperf-3.2.
	* src/options.cc (Options::parse_options): Bump copyright year.
	* NEWS: Mention a few more changes.

2025-04-05  Bruno Haible  <bruno@clisp.org>

	Remove all occurrences of reinterpret_cast<>.
	* src/keyword-list.h (Keyword_List): Add template parameter list <KT>.
	(KeywordExt_List): Define as a typedef, not as a subclass.
	(copy_list, delete_list, mergesort_list): Templatize accordingly.
	* src/keyword-list.icc (Keyword_List): Add template parameter list <KT>.
	(KeywordExt_List): Remove method definitions.
	* src/keyword-list.cc (Keyword_List): Add template parameter list <KT>.
	(copy_list, mergesort_list): Remove definitions on subclass.
	Add explicit template instantiation.
	* src/keyword.h (Keyword_Factory): Add template parameter list <KT>.
	* src/keyword.cc (Keyword_Factory): Likewise.
	Add explicit template instantiation.
	* src/input.h (Input): Add template parameter list <KT>.
	* src/input.cc (Input): Likewise. Add explicit template instantiation.
	* src/main.cc (KeywordExt_Factory): Define as a typedef, not as a
	subclass.
	(main): Update.

2025-04-05  Bruno Haible  <bruno@clisp.org>

	Make output on Windows identical to output on Unix.
	* src/options.cc (Options::print_options): Drop a ".exe" suffix from the
	program name before printing it.

2024-11-16  Bruno Haible  <bruno@clisp.org>

	Avoid "-Wzero-as-null-pointer-constant" warnings on the generated code.
	Reported in
	<https://lists.gnu.org/archive/html/bug-gnulib/2024-11/msg00123.html>.
	* src/output.cc (Output::output_lookup_function_body): To denote a null
	pointer, emit a cast expression instead of plain "0".
	* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
	tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
	tests/java.exp, tests/languages.exp, tests/modula2.exp, tests/objc.exp,
	tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp,
	tests/test-4.exp: Update.

2024-10-28  Bruno Haible  <bruno@clisp.org>

	doc: Improve text rendering in PDF output.
	Suggested by Collin Funk <collin.funk1@gmail.com> in
	<https://lists.gnu.org/archive/html/bug-gperf/2024-10/msg00000.html>.
	* doc/texinfo.tex: Update from the texinfo-7.1 release.
	* doc/gperf.texi: Override the colour for interactive links. Bump date.

2024-09-01  Bruno Haible  <bruno@clisp.org>

	Replace FSF snail-mail addresses with URLs.
	* tests/java.gperf: Update GPL license notice.
	* tests/java.exp: Likewise.

2024-07-22  Bruno Haible  <bruno@clisp.org>

	build: Simplify last change.
	* Makefile.in (doc/gperf.1): Simplify rule.

2024-07-21  Bruno Haible  <bruno@clisp.org>

	build: Fix failure of "./configure; make dist".
	* Makefile.in (srcdir, VPATH): New variables.
	(VERSION): Refer to src/version.cc in $(srcdir).
	(dist): Depend on doc/gperf.1.
	(doc/gperf.1): New rule.
	* doc/Makefile.in (DISTRIBUTED_BUILT_FILES): Remove wildcard patterns.
	(DISTRIBUTED_BUILT_FILES_EXTRA_PATTERNS): New variable.
	(distdir): Handle the files from DISTRIBUTED_BUILT_FILES_EXTRA_PATTERNS.

2024-07-21  Bruno Haible  <bruno@clisp.org>

	build: Don't leave an empty gperf.1 on disk if help2man fails.
	* doc/Makefile.in (gperf.1): Use a temporary file.
	(clean): Remove this temporary file.

2024-07-21  Bruno Haible  <bruno@clisp.org>

	build: Fix VPATH builds.
	* doc/Makefile.in (TEXINFO): Look up texi2html in the current directory.
	(gperf.1): Look up help2man in the source directory. Generate gperf.1 in
	the source directory.

2024-07-21  Bruno Haible  <bruno@clisp.org>

	build: Fix use of perl on Guix, FreeBSD, NetBSD.
	* doc/help2man: Search for perl in $PATH.

2024-07-21  Bruno Haible  <bruno@clisp.org>

	build: Fix "make maintainer-clean".
	* doc/Makefile.in (maintainer-clean): Remove also gperf.1.

2024-06-12  Collin Funk  <collin.funk1@gmail.com>

	doc: Make the detailed menu title appear as intended.
	* doc/gperf.texi (Top): Add a line break after @detailmenu.

2024-06-05  Bruno Haible  <bruno@clisp.org>

	Fix build (regression 2024-04-04).
	Reported by Pádraig Brady <P@draigBrady.com> in
	<https://lists.gnu.org/archive/html/bug-gperf/2024-06/msg00000.html>.
	* doc/configure.ac: Invoke AC_CONFIG_AUX_DIR, needed for locating
	install-sh.
	* lib/configure.ac: Likewise.
	* src/configure.ac: Likewise.
	* tests/configure.ac: Likewise.

2024-04-04  Bruno Haible  <bruno@clisp.org>

	Remove outdated Autoconf macro.
	* aclocal.m4 (CL_PROG_INSTALL): Remove macro.
	* doc/configure.ac: Invoke AC_PROG_INSTALL instead of CL_PROG_INSTALL.
	* lib/configure.ac: Likewise.
	* src/configure.ac: Likewise.

2023-12-30  Bruno Haible  <bruno@clisp.org>

	Mark autoconf 2.72 as supported.
	* autogen.sh: Update comment.

2023-09-07  Bruno Haible  <bruno@clisp.org>

	Fix "make extracheck" failure (regression 2016-11-27).
	* tests/validate (KR-C): Remove the test against ' const ', since the
	input files jstest*.gperf now contain 'const' keywords.

2023-09-07  Bruno Haible  <bruno@clisp.org>

	Avoid "clang -Wimplicit-fallthrough" warnings also in C mode.
	* src/output.cc (Output::output_hash_function): Enhance the fallthrough
	marker, to include clang >= 10 in C mode.
	* tests/*.exp: Update.

2023-09-05  Bruno Haible  <bruno@clisp.org>

	Avoid "gcc -Wmissing-field-initializers" warnings on the generated code.
	* src/options.h (Options::has_initializer_suffix): New declaration.
	* src/options.cc (Options::has_initializer_suffix): New function.
	* src/output.cc (Output::output_keyword_table): If option -t is
	specified and option -F is not specified, emit '#pragma GCC diagnostic'
	lines, to silence -Wmissing-field-initializers warnings from gcc or
	clang.
	* tests/charsets.exp: Update.
	* tests/gpc.exp: Likewise.
	* tests/incomplete.exp: Likewise.
	* tests/languages.exp: Likewise.
	* tests/objc.exp: Likewise.
	* tests/test-4.exp: Likewise.

2023-07-08  Bruno Haible  <bruno@clisp.org>

	Avoid "gcc -Wunused-parameter" warnings on the generated hash function.
	Reported by Vinícius dos Santos Oliveira <vini.ipsmaker@gmail.com> in
	<https://savannah.gnu.org/bugs/index.php?64393>.
	* src/output.cc (Output::output_hash_function): If str is not used, emit
	a cast from str to void. If len is not used, emit a cast from len to
	void.
	* tests/permut2.exp: Update.
	* tests/permut3.exp: Likewise.
	* tests/permutc2.exp: Likewise.

2023-07-01  Bruno Haible  <bruno@clisp.org>

	doc: Tweaks.
	Reported by Laurent Lyaudet <laurent.lyaudet@gmail.com> in
	<https://lists.gnu.org/archive/html/bug-gperf/2023-06/msg00000.html>.
	* doc/gperf.texi: Update copyright year. Fix some typos.
	(Bugs): Don't use the term "recent enhancements", since that's over
	20 years ago. Don't mention RAM requirements, since the execution time
	is the bigger inconvenience nowadays.

2023-06-29  Bruno Haible  <bruno@clisp.org>

	Update the installation instructions for Windows.
	* INSTALL.windows: Add a note about MSYS2.

2023-06-22  Bruno Haible  <bruno@clisp.org>

	Ensure that makeinfo ≥ 6.8 checks the @menu structure.
	See
	<https://lists.gnu.org/archive/html/bug-texinfo/2023-06/msg00015.html>.
	* doc/Makefile.in (MAKEINFO): Add option
	"-c CHECK_NORMAL_MENU_STRUCTURE=1".

2022-09-08  Bruno Haible  <bruno@clisp.org>

	Fix a warning regarding strncmp.
	Reported by Sam James in <https://savannah.gnu.org/bugs/?63031>.
	* lib/getopt.c (strncmp): Declare with a prototype.

2022-07-17  Bruno Haible  <bruno@clisp.org>

	Split autogen.sh into autopull.sh and autogen.sh.
	* autopull.sh: New file, based on autogen.sh.
	* autogen.sh: Remove code that was moved to autopull.sh.
	* Makefile.in (SOURCE_FILES): Add autogen.sh.

2022-07-05  Bruno Haible  <bruno@clisp.org>

	Add support for reproducible builds.
	Suggested by Richard Purdie <richard.purdie@linuxfoundation.org> in
	<https://lists.gnu.org/archive/html/bug-gperf/2022-07/msg00000.html>.
	* autogen.sh: Import also lib/filename.h.
	* Makefile.in (IMPORTED_FILES): Add lib/filename.h.
	* src/options.cc: Include filename.h.
	(Options::print_options): Print only the base name of the program name.
	* tests/*.exp: Update.

2022-05-22  Bruno Haible  <bruno@clisp.org>

	Add GNU Project notice.
	* JOIN-GNU: New file. Inspired by a suggestion from José E. Marchesi
	on the gnu-prog-discuss mailing list.
	* README: Refer to it.
	* Makefile.in (SOURCE_FILES): Add it.

2022-02-07  Bruno Haible  <bruno@clisp.org>

	tests: Fix undefined behaviour.
	* tests/test2.c (main): Cast bytes to unsigned before shifting left.

2022-01-05  Bruno Haible  <bruno@clisp.org>

	Release gperf-3.2.
	* src/version.cc (version_string): Bump to 3.2.
	* src/options.cc (Options::parse_options): Bump copyright year.
	* tests/*.exp: Update.
	* doc/gperf.texi: Bump date.

2021-06-06  Michael Drake  <tlsa@netsurf-browser.org>  (tiny change)

	Honor --readonly-tables when outputting table for --ignore-case.
	* src/output.cc (output_upperlower_table): Add 'const' when suitable.

2021-01-30  Bruno Haible  <bruno@clisp.org>

	Mark Autoconf 2.71 as supported.
	* autogen.sh: Update comment.

2020-12-08  Bruno Haible  <bruno@clisp.org>

	Mark Autoconf 2.70 as supported.
	* autogen.sh: Update comment.

2020-10-04  Bruno Haible  <bruno@clisp.org>

	Fix warnings from Autoconf 2.69c.
	* configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments.
	* doc/configure.ac: Likewise.
	* lib/configure.ac: Likewise.
	* src/configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments. Use
	AC_CACHE_CHECK, AC_LANG_PUSH/AC_LANG_POP, AC_COMPILE_IFELSE
	* tests/configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments. Use
	ac_cv_c_compiler_gnu instead of ac_cv_prog_gcc, and
	ac_cv_cxx_compiler_gnu instead of ac_cv_prog_gxx. Don't use 'test' with
	option '-a'.

2020-08-30  Bruno Haible  <bruno@clisp.org>

	Make the code C++17 compliant.
	* lib/getline.cc (getstr): Don't use the 'register' keyword.

2020-08-29  Bruno Haible  <bruno@clisp.org>

	Fix link error on native Windows with MSVC/clang.
	* tests/test2.c (SET_BINARY): On native Windows, use _setmode, not
	setmode.

2020-08-29  Bruno Haible  <bruno@clisp.org>

	Update after gnulib changed.
	* configure.ac (AC_PREREQ): Require Autoconf >= 2.64.
	* doc/configure.ac (AC_PREREQ): Likewise.
	* lib/configure.ac (AC_PREREQ): Likewise.
	* src/configure.ac (AC_PREREQ): Likewise.
	* tests/configure.ac (AC_PREREQ): Likewise.
	* autogen.sh: Update comment.

2020-02-10  Bruno Haible  <bruno@clisp.org>

	Rely entirely on the GNU Build System.
	* Makefile.vms: Remove file.
	* INSTALL.vms: Remove file.
	* Makefile.in (SOURCE_FILES): Remove them.
	* Makefile.devel (src/config.h_vms): Remove target.
	(totally-clean): Update.
	* src/Makefile.in (GENERATED_FILES): Remove config.h_vms.

2018-10-24  Bruno Haible  <bruno@clisp.org>

	Update after gnulib changed.
	* configure.ac (AC_PREREQ): Require Autoconf >= 2.63.
	* doc/configure.ac (AC_PREREQ): Likewise.
	* lib/configure.ac (AC_PREREQ): Likewise.
	* src/configure.ac (AC_PREREQ): Likewise.
	* tests/configure.ac (AC_PREREQ): Likewise.
	* autogen.sh: Update comment.

2018-09-16  Bruno Haible  <bruno@clisp.org>

	Fix "Unescaped left brace in regex" warnings from Perl 5.26.
	Reported and patch by Jehan <jehan@girinstud.io> <jehan@zemarmot.net> at
	<https://savannah.gnu.org/bugs/?54088>.
	* doc/texi2html: Escape braces in regular expressions.

2018-09-14  Bruno Haible  <bruno@clisp.org>

	doc: Assume texinfo 4.0 or newer.
	* doc/gperf.texi: Omit Next, Prev, Up fields from @node lines.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Avoid "implicit fallthrough" warnings also from clang.
	Reported by Nico Weber <thakis@chromium.org> in
	<https://savannah.gnu.org/bugs/?53029>.
	Clang emits these warnings in C++11 mode only, see
	<https://clang.llvm.org/docs/AttributeReference.html#fallthrough>,
	and only in clang 3.9 or newer, see
	<https://releases.llvm.org/3.9.0/tools/clang/docs/ReleaseNotes.html>.
	To avoid them, either [[fallthrough]] or the (nearly equivalent) older
	[[clang::fallthrough]] can be used, see
	<https://llvm.org/viewvc/llvm-project?view=revision&revision=262881>.
	* src/output.cc (Output::output_hash_function): Enhance the fallthrough
	marker.
	* tests/*.exp: Update.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Fix failure of "make check -j2".
	Reported and fix provided by Bernhard M. Wiedemann in
	<https://savannah.gnu.org/bugs/?53208>.
	* tests/Makefile.in (check-test): Depend on 'check-ada'.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Don't print uninitialized hash values in debug mode.
	Reported by Frank Wojcik <frankw@touristinresidence.com> in
	<https://savannah.gnu.org/patch/?9560>.
	* src/output.cc (output_keyword_entry): Add an 'is_duplicate' argument.
	(Output::output_keyword_table): Update callers.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Improve the speed of the positions search.
	Reported by Frank Wojcik <frankw@touristinresidence.com> in
	<https://savannah.gnu.org/patch/?9562>.
	* src/search.cc (Search::find_positions): Double the speed of step 4.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Really prefer more efficient hash functions over less efficient ones.
	Reported by Frank Wojcik <frankw@touristinresidence.com> in
	<https://savannah.gnu.org/patch/?9561>.
	* src/search.cc (Search::find_positions): In step 4, make sure a less
	efficient hash function does not replace a more efficient one. Also,
	include i3 = -1 among the search.

2018-09-08  Bruno Haible  <bruno@clisp.org>

	Correct width of columns when outputting the asso_values array.
	Patch by Frank Wojcik <frankw@touristinresidence.com>.
	* src/output.cc (Output::output_hash_function): Increase the
	field_width by 1 if _max_hash_value+1 is a power of 10.

2018-07-25  Bruno Haible  <bruno@clisp.org>

	Avoid "implicit fallthrough" warnings in the generated code.
	Reported by Phil Willoughby at
	<https://lists.gnu.org/archive/html/bug-gperf/2018-07/msg00002.html>.
	* src/output.cc (Output::output_hash_function): Emit a more elaborate
	fallthrough marker.
	* tests/*.exp: Update.

2018-04-24  Bruno Haible  <bruno@clisp.org>

	Support input files with CR/LF line terminators.
	Reported at <https://savannah.gnu.org/bugs/?53732>.
	* src/input.cc (Input::read_input): Convert CR/LF sequences to LF.

2018-01-27  Bruno Haible  <bruno@clisp.org>

	Rename some files.
	* INSTALL.windows: Renamed from README.windows.
	* INSTALL.vms: Renamed from README.vms.
	* Makefile.in (SOURCE_FILES): Update.

2018-01-23  Bruno Haible  <bruno@clisp.org>

	Don't use an undocumented Autoconf macro.
	* src/configure.ac: Use AC_CONFIG_HEADERS instead of AC_CONFIG_HEADER.

2017-07-15  Bruno Haible  <bruno@clisp.org>

	Get rid of autom4te.cache directories (left over from autoconf).
	* Makefile.devel (configure, */configure, src/config.h.in): Remove
	autom4te.cache directory after running autoconf or autoheader.

2017-04-16  Bruno Haible  <bruno@clisp.org>

	Initialize the Keyword::_lineno field through the constructor.
	* src/keyword.h (struct Keyword, struct KeywordExt): Add lineno argument
	to constructor.
	(Keyword_Factory::create_keyword): Add lineno argument.
	* src/keyword.icc (struct Keyword, struct KeywordExt): Add lineno
	argument to constructor.
	* src/main.cc (KeywordExt_Factory::create_keyword): Pass lineno argument
	to KeywordExt constructor.
	* src/input.cc (Input::read_input): Pass lineno to create_keyword.

2017-03-31  Bruno Haible  <bruno@clisp.org>

	Fix doc build error with perl 5.22.
	* doc/texi2html (update_sec_num): Omit defined(...) for array.

2017-01-10  Bruno Haible  <bruno@clisp.org>

	Update some URL.
	* README: Update.

2017-01-02  Marcel Schaible <marcel.schaible@studium.fernuni-hagen.de>
	
	* gperf-3.1 released.

2016-12-29  Bruno Haible  <bruno@clisp.org>

	Make autogen.sh more user-friendly.
	* autogen.sh: Emit a message at the end, if everything succeeded.

2016-12-03  Bruno Haible  <bruno@clisp.org>

	Make Makefile.devel more useful for the users of the released tarball.
	* Makefile.devel (totally-clean): New target.
	* autogen.sh: Invoke it and 'all'.

2016-11-27  Bruno Haible  <bruno@clisp.org>

	Fix build with mingw.
	* README.windows: Augment PATH for mingw, so that it finds libstdc++.

2016-11-27  Bruno Haible  <bruno@clisp.org>

	Assume the available C compiler supports ANSI C. Remove K&R C cruft.
	* lib/getopt.h: Assume 'const' is defined. Use ANSI C prototypes.
	* lib/getopt.c: Assume 'const' is defined. Use ANSI C prototypes.
	Include <stddef.h>. Declare strcmp and strlen.
	* lib/getopt1.c: Assume 'const' and NULL are defined. Use ANSI C
	prototypes.
	* lib/getopt.h.patch: Remove file.
	* lib/getopt.c.patch: Remove file.
	* lib/Makefile.in (SOURCE_FILES): Remove them.
	* tests/jstest*.gperf: Assume 'const' is defined.
	* tests/test.c: Use ANSI C prototypes.
	(in_word_set): Fix prototype.
	* tests/test2.c: Use ANSI C prototypes.
	(in_word_set): Fix prototype.
	Reported by Erik Johansson at <https://savannah.gnu.org/patch/?7382>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Drop the inline specifiers from the generated lookup function.
	It's not adequate because
	- this lookup function is quite large in fact, not worth inlining,
	- with gcc -O0, it leads to link errors, see
	  <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41194#c2>
	- the hash function is 'static', the lookup function is non-static,
	  but references from non-static inline functions to static functions
	  and variables are forbidden, see ISO C 99 section 6.7.4.(3).
	* src/output.cc (Output::output_lookup_function): Don't emit an inline
	specifier.
	* tests/*.exp: Update.
	Reported by Sebastian Freundt and Sergii Strelkovskyi
	at <https://savannah.gnu.org/bugs/?37071>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Change mailing list address to <bug-gperf@gnu.org>.
	* src/output.cc (Output::output): Change bug report address to
	<bug-gperf@gnu.org>.
	* src/options.cc (Options::long_usage): Likewise.
	* README: Likewise.
	* doc/gperf.texi (Contributors): Likewise.
	* tests/*.{c,exp,out}: Update.
	Reported by Eric Blake <eblake@redhat.com>
	at <https://lists.gnu.org/archive/html/bug-gperf/2014-10/msg00000.html>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Change the 'len' parameter type to 'size_t'.
	* src/output.cc (output_upperlower_strncmp, output_upperlower_memcmp,
	Output::output_hash_function, Output::output_lookup_function,
	Output::output): Emit declarations with 'size_t len' instead of
	'unsigned int len'.
	* tests/*.exp: Update.
	* doc/gperf.texi (Output Format): Change declarations of 'hash' and
	'in_word_set'.
	* NEWS: Mention the change.
	Reported by Pedro Giffuni <pfg@FreeBSD.org>
	at <https://lists.gnu.org/archive/html/bug-gperf/2014-08/msg00000.html>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Use proper 'ar' program when cross-compiling or when AR is specified.
	* lib/configure.ac (AR): Determine through AC_CHECK_TOOL.
	* lib/Makefile.in (AR): Use value determined by 'configure'.
	Reported by György Andrasek <jurily@gmail.com>
	at <https://lists.gnu.org/archive/html/bug-gperf/2014-04/msg00000.html>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Avoid 'warning: cast from pointer to integer of different size'
	in output code on 64-bit native Windows platforms.
	* src/output.cc (output_keyword_entry): Cast pointer to 'size_t',
	not to 'long', before casting it further to 'int'.
	* tests/*.exp: Update.
	Reported at <https://savannah.gnu.org/bugs/?45330>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Don't use 'register' storage-class specifier in C++ output code.
	* src/output.cc (register_scs): New variable.
	(Output::Output): Initialize it.
	(output_upperlower_strcmp, output_upperlower_strncmp,
	output_upperlower_memcmp, Output::output_hash_function,
	Output::output_lookup_function_body, Output::output_lookup_function):
	Use it.
	Reported at <https://savannah.gnu.org/bugs/?44887>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Avoid 'warning: use of old-style cast' in output code.
	* src/output.h (Output::output_asso_values_index): New method
	declaration.
	* src/output.cc (Output::output_asso_values_index): New method,
	extracted from Output::output_asso_values_ref.
	(Output::output_asso_values_ref): Use it. In C++ mode, emit C++ style
	cast syntax.
	Reported at <https://savannah.gnu.org/bugs/?44887>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Avoid 'warning: implicit conversion changes signedness' in output code.
	* src/output.cc (Output::output_lookup_function_body): Emit declaration
	of 'key' as 'unsigned int', not 'int'. Optimize comparison accordingly.
	* tests/*.exp: Update.
	Reported at <https://savannah.gnu.org/bugs/?44887>.

2016-11-26  Bruno Haible  <bruno@clisp.org>

	Avoid 'warning: implicit conversion changes signedness' in output code.
	* src/output.cc (Output::output_hash_function): Emit declaration of
	'hval' as 'unsigned int', not 'int'.
	* tests/*.exp: Update.
	Reported at <https://savannah.gnu.org/bugs/?44887>.

2016-11-25  Bruno Haible  <bruno@clisp.org>

	Fix g++ -Wall warnings.
	* src/search.cc (Search::prepare, Search::find_positions,
	Search::optimize): Add braces in 'if (...) for (...)', to pacify
	g++ 4.6.3 warnings "suggest explicit braces to avoid ambiguous 'else'"
	(although there is no 'else'!).

2016-11-25  Bruno Haible  <bruno@clisp.org>

	Fix typo in autogen.sh, introduced on 2012-07-01.
	* autogen.sh: Fix typo.

2016-11-25  Bruno Haible  <bruno@clisp.org>

	Fix "make check" error on Mac OS X.
	* tests/Makefile.in (POSTPROCESS_FOR_MINGW): Run 'sed' in the C locale.
	This fixes an error "sed: RE error: illegal byte sequence" on Mac OS X
	when producing languages.out.
	Reported at <https://savannah.gnu.org/bugs/?45329>.

2016-11-23  Bruno Haible  <bruno@clisp.org>

	Update installation instructions for Windows.
	* README.windows: Assume a 64-bit Windows. Explain both 32-bit and
	64-bit builds. Revamp instructions for the MS Visual C/C++ tool chain
	and for Cygwin.

2016-11-23  Bruno Haible  <bruno@clisp.org>

	Drop the nickname "woe32".
	* README.windows: Renamed from README.woe32.
	* Makefile.in (SOURCE_FILES): Update.

2016-11-19  Bruno Haible  <bruno@clisp.org>

	doc: Prepare for possible use of GNU texi2any.
	* doc/Makefile.in (TEXI2ANY): New variable.
	(gperf_0.html): New rule.

2016-11-19  Bruno Haible  <bruno@clisp.org>

	doc: Don't generate Postscript-formatted doc by default.
	* doc/Makefile.in (all): Don't depend on 'ps'.

2014-10-15  Eric Blake  <eblake@redhat.com>

	doc: fix invalid use of @itemx
	* doc/gperf.texi (Output Details): Use correct macro.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Fix "make clean" with MSVC.
	With MSVC 9, a program is created together with a .manifest file.
	* src/Makefile.in (clean): Remove also the .manifest file.
	* tests/Makefile.in (clean): Remove also the .manifest files.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Update expected test results.
	* tests/test-6.exp: Expect to see --constants-prefix option.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Fix compilation error with MSVC.
	* src/output.cc: Include config.h.
	(DYNAMIC_ARRAY, FREE_DYNAMIC_ARRAY): New macros, copied from
	src/search.cc.
	(output_constant): Use them.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Remove old infrastructure for building with MSVC.
	* autogen.sh: Don't remove src/config.h.msvc.
	* Makefile.devel (src/config.h.msvc): Remove rule.
	(all): Don't depend on it.
	* src/Makefile.in (GENERATED_FILES): Remove config.h.msvc.
	* src/.gitignore: Remove config.h.msvc.
	* Makefile.msvc: Remove file.
	* Makefile.in (SOURCE_FILES): Remove Makefile.msvc.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Support for building with MSVC much like for Unix.
	* autogen.sh: Fetch also 'compile' and 'ar-lib'.
	* Makefile.in (IMPORTED_FILES): Add build-aux/compile, build-aux/ar-lib.
	* build-aux/.gitignore: Ignore also 'compile' and 'ar-lib'.
	* lib/Makefile.in: Use $(OBJEXT) where suitable.
	* README.woe32: Change instructions for compiling with MSVC.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Move build infrastructure files to build-aux/.
	* autogen.sh: Copy install-sh and mkinstalldirst into build-aux/.
	* configure.ac: Invoke AC_CONFIG_AUX_DIR.
	* Makefile.in (IMPORTED_FILES): Update.
	(distdir): Create subdirectories as needed.
	* doc/Makefile.in (MKINSTALLDIRS): Update.
	* src/Makefile.in (MKINSTALLDIRS): Update.
	* .gitgnore: Remove install-sh, mkinstalldirs.
	* build-aux/.gitignore: New file.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Distribute install-sh.
	* autogen.sh: Fetch also install-sh.
	* Makefile.in (IMPORTED_FILES): Add install-sh.
	* configure.ac: Remove hack with AC_CONFIG_AUX_DIR_DEFAULT.
	* .gitignore: Add install-sh.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Remove files distributed via gnulib from version control.
	* autogen.sh: Fetch mkinstalldirs from the gnulib repository.
	* mkinstalldirs: Remove file.
	* .gitignore: Add mkinstalldirs.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Remove autotools generated files from version control.
	* autogen.sh: New file.
	* configure: Remove file.
	* lib/configure: Remove file.
	* src/configure: Remove file.
	* tests/configure: Remove file.
	* doc/configure: Remove file.
	* src/config.h.in: Remove file.
	* src/config.h.msvc: Remove file.
	* src/config.h_vms: Remove file.
	* .gitignore: Ignore configure.
	* lib/.gitignore: New file.
	* src/.gitignore: New file.
	* tests/.gitignore: New file.
	* doc/.gitignore: Ignore configure.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Turn doc/gperf.1 into a distributed built file.
	* doc/gperf.1: Remove file.
	* Makefile.devel (doc/gperf.1): Remove rule.
	(all): Don't depend on it.
	* doc/Makefile.in (man, gperf.1, gperf.1-update): New rules.
	(all): Depend on man.
	(distdir): Depend on gperf.1-update.
	(GENERATED_FILES): Remove gperf.1.
	(DISTRIBUTED_BUILT_FILES): Add gperf.1.
	* doc/.gitignore: Add gperf.1.
	* configure (AC_INIT): Rely on doc/gperf.texi, not doc/gperf.1.
	* doc/configure (AC_INIT): Rely on gperf.texi, not gperf.1.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Remove distributed built files from version control.
	* doc/.gitignore: New file.
	* doc/gperf.info: Remove file.
	* doc/gperf.dvi: Remove file.
	* doc/gperf.ps: Remove file.
	* doc/gperf.pdf: Remove file.
	* doc/gperf.html: Remove file.
	* doc/gperf_toc.html, doc/gperf_[0-9].html, doc/gperf_[0-9][0-9].html:
	Remove files.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Allow editor backup files in git checkouts.
	* .gitignore: New file.

2012-07-01  Bruno Haible  <bruno@clisp.org>

	Create tarballs through an Automake-like "make dist" command.
	* Makefile.in (SOURCE_FILES, IMPORTED_FILES, GENERATED_FILES,
	DISTRIBUTED_BUILT_FILES, DISTFILES): New macros.
	(distdir): New rule.
	(PACKAGE, VERSION, TAR, GZIP): New macros.
	(dist): New rule.
	* doc/Makefile.in (SOURCE_FILES, IMPORTED_FILES, GENERATED_FILES,
	DISTRIBUTED_BUILT_FILES, DISTFILES): New macros.
	(distdir): New rule.
	* lib/Makefile.in (SOURCE_FILES, IMPORTED_FILES, GENERATED_FILES,
	DISTRIBUTED_BUILT_FILES, DISTFILES): New macros.
	(distdir): New rule.
	* src/Makefile.in (SOURCE_FILES, IMPORTED_FILES, GENERATED_FILES,
	DISTRIBUTED_BUILT_FILES, DISTFILES): New macros.
	(distdir): New rule.
	* tests/Makefile.in (SOURCE_FILES, IMPORTED_FILES, GENERATED_FILES,
	DISTRIBUTED_BUILT_FILES, DISTFILES): New macros.
	(distdir): New rule.

2012-04-28  Bruno Haible  <bruno@clisp.org>

	* configure: Regenerated with autoconf-2.69.
	* doc/configure: Likewise.
	* lib/configure: Likewise.
	* src/configure: Likewise.
	* tests/configure: Likewise.

2011-01-16  Bruno Haible  <bruno@clisp.org>

	* src/options.cc (Options::parse_options): Bump copyright year.

	New option --constants-prefix.
	* src/options.h (Options): Add member functions get_constants_prefix,
	set_constants_prefix. Add member _constants_prefix.
	* src/options.icc (Options::get_constants_prefix): New functions.
	* src/options.cc (DEFAULT_CONSTANTS_PREFIX): New constant.
	(Options::long_usage): Document --constants-prefix option.
	(Options::Options): Initialize _constants_prefix member.
[--snip--]
