xref: /freebsd/contrib/pkgconf/NEWS (revision 592efe252472a3385acf36b1f49ecf710a7f3d9c)
1Changes from previous version of pkgconf
2========================================
3
4Changes from 2.5.1 to 3.0.0:
5----------------------------
6
7* DEPRECATION: The autotools build system will be dropped after the 3.0 release.
8  Building pkgconf with muon is recommended for early bootstrap and meson in later
9  stages of bootstrap.
10  Alternatively users can use pkgconf-lite for early bootstrap.
11  Continuous integration now exercises both the muon and pkgconf-lite builds.
12  See https://github.com/pkgconf/pkgconf/issues/481 for rationale and discussion.
13
14* DEPRECATION: Support for setting `PKG_CONFIG_PATH` from the Windows registry
15  is slated for removal in 3.1.  It is recommended `PKG_CONFIG_PATH` be set from
16  the environment on Windows.
17  See https://github.com/pkgconf/pkgconf/issues/546 for rationale and discussion.
18
19* SPDX Software Bill of Materials (SBOM) generation:
20  - New spdxtool(1) utility which generates SPDX Lite 3.0.1 SBOM files.  Initial
21    implementation by Tuukka Pasanen, sponsored by The FreeBSD Foundation, and
22    substantially improved since, with major contributions by Elizabeth Ashford
23    and additional patches by Joshua Watt and Pierre Pronchery.
24  - bomtool now supports a --output option, which writes the generated SBOM to
25    a file instead of standard output, and --define-variable, as the pkgconf CLI
26    does.  The --define-variable support is by Tuukka Pasanen.
27  - bomtool now supports a --creation-time option, like spdxtool, which sets the
28    SBOM creation timestamp (in ISO 8601 format) instead of using the current
29    time, and no longer embeds the pkgconf version in its output.  Both changes
30    allow for reproducible SBOM generation.
31  - bomtool now honors the SOURCE_DATE_EPOCH environment variable, deriving the
32    SBOM creation timestamp from it when --creation-time is not given, for
33    reproducible builds.
34  - bomtool: improved SPDX conformance.  Mandatory PackageCopyrightText and
35    PackageLicenseConcluded fields are emitted as NOASSERTION when unavailable,
36    a Created timestamp is included, invalid PackageVerificationCode output was
37    removed, the package identifier charset was corrected,
38    PackageDownloadLocation is derived from the Source tag, and SPDX 2.3 package
39    names are used.  Patches by Stéphane Rochoy and Tuukka Pasanen.
40
41* New test and I/O framework.
42  - kyua is no longer required to run tests.
43  - Declarative configuration for integration tests, C unit tests for functional tests.
44  - Tests now run on Windows.
45  - .pc and personality files are now opened in binary mode, and the line reader
46    was reworked to correctly handle CRLF line endings and to avoid getc/ungetc
47    for better performance.  Binary-mode handling by moi15moi.
48  Major contributions by Elizabeth Ashford.
49
50* New pc(5) features:
51  - Source tag: a URI which describes where a given package may be downloaded.
52  - License.file tag: a path to a license file that is on disk.
53  - Requires.shared tag: like Requires.private, except a list of dependencies only used
54    when building in shared mode.
55  - Cflags.shared tag: like Cflags.private, except a list of CFLAGS only used when building
56    in shared mode.
57  - Libs.shared tag: like Libs.private, except a list of LIBS only used when building
58    in shared mode.
59  - Link.ABI tag: a comma-separated list of tags describing the application binary
60    interfaces a consumer must link a package against, such as c++ or fortran.
61    Tags are case-insensitive and normalized to lowercase, and may be queried
62    with --link-abi.
63  The Source and License.file tags are by Tuukka Pasanen; additional patches by
64  Elizabeth Ashford.
65
66* Windows support has been significantly improved.
67  - pkgconf can now be built and tested with Visual Studio and clang-cl.
68  - Windows on ARM builds are supported, and MSI installers are produced for
69    x86, x64 and arm64 using MSVC.
70  - The console code page is set to UTF-8 and non-ASCII entries in
71    PKG_CONFIG_PATH are now handled correctly.
72  The clang-cl support, MSI installers and UTF-8 console handling are by
73  moi15moi.
74
75* Portability:
76  - pkgconf is now built and tested in continuous integration on NetBSD,
77    FreeBSD, OpenBSD, Haiku, OmniOS, macOS and Cygwin in addition to Linux and
78    Windows.
79  - pkgconf now falls back to readlink(2) on systems which lack readlinkat(2).
80  - A fallback is provided for platforms without nl_langinfo_l, and xlocale.h is
81    included where needed to build on macOS.
82  - Fixed -Werror=format build failures on MinGW caused by the PRIu64 macro
83    expanding to an MSVCRT format specifier that the GNU format-string checker
84    rejects; serial and identifier values are now printed with %llu.
85  The expanded platform CI and the nl_langinfo_l/xlocale.h fallbacks are by
86  moi15moi.
87
88* Security hardening:
89  - Variable substitution is now guarded against denial-of-service inputs,
90    including billion-laughs style expansion and excessively complex bytecode
91    programs.
92  - LLVM libFuzzer targets were added for the pc(5) parser and the solver, and
93    the numerous out-of-memory and crash paths they surfaced were hardened.
94  - Dropped use of strlcpy, strlcat and other silently truncating string
95    functions.
96
97* CLI changes:
98  - New --newlines option, which separates emitted fragments with newlines
99    instead of spaces.
100  - New --print-digraph-query-nodes option, which annotates the --digraph
101    output with the nodes that were part of the original query.
102  - --list-all and --list-package-names now include synthesized virtual
103    packages provided via the Provides tag.
104  - Variables can now be overridden using PKG_CONFIG_MODULENAME_VARIABLENAME
105    environment variables.  This was formally specified but never implemented
106    in pkgconf.
107  - PKG_CONFIG_LOG is now appended to rather than overwritten.
108  - --dump-personality output is now consistent with the
109    pkgconf-personality(5) format and additionally reports WantDefaultPure and
110    WantDefaultStatic.
111  - The vestigial --relocate=path option, which existed only for the old test
112    suite, has been removed.
113
114* pkg.m4 changes:
115  - PKG_WITH_MODULES now properly quotes its action arguments (serial 16).
116    Patch by Antonin Décimo.
117  - The macros no longer direct users to the freedesktop pkg-config project.
118
119* Correctness fixes:
120  - The built-in pkg-config and pkgconf packages are now constructed from the
121    configured personality instead of being hardcoded, so their reported data
122    reflects the active personality.  They are also exposed as proper versioned
123    virtual packages.
124  - ${pc_sysrootdir} now defaults to an empty string instead of '/'.
125  - Variable substitution was reimplemented using a bytecode engine, which
126    tracks whether special variables such as ${pc_sysrootdir} have already been
127    applied so that they are not substituted more than once.
128  - The solver now re-checks the final solution for conflicts before returning
129    success, and tracks the origin of conflict rules.
130  - Requires.internal is now treated as a weaker form of Requires.private: its
131    dependency nodes need not be satisfied when link libraries are not
132    requested.
133  - pkgconf now warns about .pc files that duplicate a dependency-list field,
134    whose behavior is inconsistent across pkg-config implementations.
135  - Version comparison was reworked to use a structured algorithm modeled on
136    apk-tools.
137  - Newline folding behavior when parsing multi-line fields has been adjusted.
138  - Bare variable expansions inside fragment lists are now re-parsed so that any
139    flags they expand to are tokenized correctly.
140  - ${pc_sysrootdir} is now only injected when it matches a complete path
141    boundary, and obviously bogus sysroot_dir definitions are ignored, fixing
142    incorrect sysroot injection.
143  - Arguments are now combined when a flag is expected to carry a separate
144    value, such as -I dir or -framework name.
145  - SPDX license expressions in the License field are now properly parsed and
146    validated.  Patches by Tuukka Pasanen.
147
148* The libpkgconf API and ABI were substantially reworked, breaking ABI
149  compatibility.  The libpkgconf soversion is now 8.
150  - An abstract pkgconf_buffer_t type is now used throughout libpkgconf in place
151    of fixed-size stack buffers, removing a class of truncation bugs.
152  - A new pkgconf_output API abstracts all output, allowing the output stream to
153    be set per-client and redirected (pkgconf_client_set_output,
154    pkgconf_output_file_fmt and friends).
155  - The pkgconf_tuple_parse API has been removed; variables are now evaluated
156    via pkgconf_variable_eval (backed by the new bytecode engine).
157  - The fragment rendering API was reworked around pkgconf_buffer_t, and the old
158    pkgconf_fragment_render API has been removed.
159  - The package copyright field was migrated to a bufferset.
160  - Environment variable lookups can now be mocked via pkgconf_client_getenv.
161
162Changes from 2.5.0 to 2.5.1:
163----------------------------
164
165* Fix processing of empty dependency lists.
166
167Changes from 2.4.3 to 2.5.0:
168----------------------------
169
170* Added a manual page for bomtool.
171
172* Add support for preloaded packages.
173  These are modules which are preloaded into the package database
174  and preferred over searching the module search path when present.
175
176* Refactor Windows registry PKG_CONFIG_PATH support so that it
177  augments the main directory search list instead of being treated
178  as a special case.
179
180* Processing of `--with-path` arguments by the pkgconf CLI is
181  now deferred until libpkgconf is fully initialized, effectively
182  aligning behavior with PKG_CONFIG_PATH processing.
183
184* Fix several minor memory safety bugs which were identified by
185  the GCC 15 static analyzer.
186
187* Added support for pledge(2) and unveil(2) on systems where
188  this functionality is available.
189
190* Significant improvements to pkgconf's manual pages.
191  Patches by Ingo Schwarze and Jonathan Gray (OpenBSD).
192
193* Remove questionable default-static assumption on Windows that
194  was inherited from the original pkg-config.  Most distributions
195  of pkgconf on Windows were already patching this out.
196  Patch by Kai Pastor.
197
198* Add -D_POSIX_C_SOURCE=200809L to the build definitions, which
199  is needed for readlinkat on glibc.
200  Patch by Filipe Laíns.
201
202Changes from 2.4.2 to 2.4.3:
203----------------------------
204
205* Fix additional logic errors relating to the new fragment trees
206  functionality.
207
208Changes from 2.4.1 to 2.4.2:
209----------------------------
210
211* Fix several logic errors in the pkg-config file parser that were
212  surfaced by recent refactoring work.
213
214* Fix BSD make compatibility so that it generates the test data
215  before running kyua on BSD make implementations.
216
217Changes from 2.4.0 to 2.4.1:
218----------------------------
219
220* Ensure the full DAG is solved for all query types.
221
222Changes from 2.3.0 to 2.4.0:
223----------------------------
224
225* Allow multiple package names in solution-based queries such as
226  `--print-requires`, `--print-requires-private` and `--print-provides`.
227
228* Use `_DEFAULT_SOURCE` where appropriate on Meson.
229
230* Add an abstract buffer type and use it when loading files from disk
231  instead of a 64KB buffer.  This ensures large pkg-config files are
232  not truncated.
233
234* Disable graph recursion in `--variable` queries as it was generating
235  duplicate output.
236
237* Add infrastructure for tracking fragment group relations and convert
238  storage of fragments to use a tree-like structure instead of string
239  concatenation.
240
241* Add support for tracking linker groups, e.g.
242
243    -Wl,--start-group -la -lb -lc -Wl,--end-group
244
245  as fragment groups.
246
247* Properly contextualize the sysroot directory when processing package
248  information, ensuring packages where ${pc_sysrootdir} does not match
249  the default are properly processed.
250
251Changes from 2.2.0 to 2.3.0:
252----------------------------
253
254* Fix compile with Meson on Solaris by defining __EXTENSIONS__.
255
256* Add support for the PKG_CONFIG_RELOCATE_PATHS environmental variable.
257  When set, the program will act as if --define-prefix is always enabled.
258
259* Color solution nodes that were part of the original query, and use
260  that coloring to skip over dependencies when generating DocumentNames
261  in bomtool.
262
263* Enhance --env option to support variables with both --variable=varname
264  and --print-variables.
265
266* Add --exists-cflags option which creates synthetic preprocessor
267  definition flags for every queried dependency when found.
268
269* Document that Requires.private is always used for header paths.
270  Patch by Petr Písař.
271
272* Fix minor documentation typos.
273  Patch by Pierce.
274
275* Ensure string comparisons using <ctype.h> functions are done with
276  unsigned bytes to avoid undefined behavior.
277  Patch by Taylor R Campbell.
278
279* Fix parsing edge-case bugs with dependency versions.
280  Patch by Kai Pastor.
281
282* Change PKG_PROG_PKG_CONFIG autoconf macro to add a customizable
283  failure handler if pkg-config is not found.
284  Patch by Ismael Luceno.
285
286Changes from 2.1.1 to 2.2.0:
287----------------------------
288
289* libpkgconf SOVERSION is now 5.
290
291* Significant solver rework to flatten both requires and requires.private
292  dependencies in a single pass.  Improves performance slightly and ensures
293  proper dependency order.
294  Patches by Kai Pastor.
295
296* Improve `--digraph` output to reflect more of the solver's state in the
297  rendered dependency graph.
298  Patches by Kai Pastor.
299
300* Do not reference the graph root by name when presenting error messages about
301  directly requested dependency nodes.
302  Patch by Kai Pastor.
303
304Changes from 2.1.0 to 2.1.1:
305----------------------------
306
307* Documentation fixes from Sam James and Stefan Weil.
308
309* Fix --modversion with constraints.
310  Patch by Kai Pastor.
311
312* Reintroduce an optimization to the dependency graph walker which avoids
313  revisiting already visited nodes.
314  Patch by Yi Chou with some modifications.
315
316* Add a regression test to check that the dependency flattener is working
317  as expected.
318  Patch by Kai Pastor.
319
320Changes from 2.0.3 to 2.1.0:
321----------------------------
322
323* Do not flatten the solver solution into the original world used as
324  input to the solver.
325  Patches by Kai Pastor.
326
327* Fix warnings with GCC 14 -Walloc-size.
328  Patch by Sam James.
329
330* Add --solution to the pkgconf CLI to dump the solver state.
331
332* Improve the --digraph output to clarify cancelled edges in a given
333  solution.
334
335* Demote requires dependencies to requires.private when a parent
336  dependency is pulled in via requires.private.
337
338* Trim trailing whitespace when processing package arguments.
339  Patch by Colin Gillespie.
340
341* Avoid strncmp() in --modversion version comparison.
342  Patch by Colin Gillespie.
343
344* Update autoconf compile flag checking macro.
345  Patch by Peter Kokot.
346
347* Add system default path configuration to Meson.
348  Patch by L. E. Segovia.
349
350* Fix order of PKG_CONFIG_LIBDIR and PKG_CONFIG_PATH element processing.
351
352Changes from 2.0.2 to 2.0.3:
353----------------------------
354
355* Fix some edge-cases with the new `--modversion` implementation
356  and add additional regression tests.
357  Patch by Colin Gillespie.
358
359* Fix some format specifiers to use PRIu64 in debug tracing.
360
361Changes from 2.0.1 to 2.0.2:
362----------------------------
363
364* Fix long-standing bug where package identifiers for "uninstalled"
365  packages incorrectly included the "-uninstalled" suffix.
366
367  This was exposed by the recent change to `--modversion` in 2.0.1.
368
369Changes from 2.0.0 to 2.0.1:
370----------------------------
371
372* The behavior of --modversion was largely reverted back to the traditional
373  pkg-config behavior, but still operates on a solved dependency graph.
374
375  The order of --modversion output is based on the dependency resolution
376  queue which is passed to the solver, which itself generally maps to the
377  order of the constrants provided on the command line.
378
379* A new flag, --verbose, has been added.  When used with `--modversion`, it
380  is possible to disambiguate which version belongs to which module:
381
382    % pkgconf --modversion --verbose foo bar
383    foo: 1.2.3
384    bar: 1.3
385
386Changes from 1.9.5 to 2.0.0:
387----------------------------
388
389* When flattening the dependency graph, retain the latest seen edges
390  rather than the earliest.
391
392* Fix a long-standing bug where the dependency resolution queue was
393  evaluated in reverse.  This bug masked the aforementioned dependency
394  flattening bug in many cases.
395
396* Fix handling of --with-path, which was appending paths to the search
397  list rather than prepending them as intended.
398
399* Error when --modversion is requested with more than one package, as
400  the output is ambiguous.
401
402Changes from 1.9.4 to 1.9.5:
403----------------------------
404
405* Fix incorrect assumptions involving the use of ctype(3) functions.
406  Patch by Taylor R Campbell.
407
408* Fix detection of provided functions on autoconf.
409  Patches by Harmen Stoppels.
410
411* Fix deletion of tests/meson.build by the autoconf build system.
412  Patch by h30032433.
413
414* Fix quoting rules in argvsplit.c.
415  Patch by huyubiao.
416
417* Update libpkgconf documentation and documentation building scripts.
418  Patches by Andrew Shadura.
419
420* Enforce maximum package count correctly for --modversion.
421
422Changes from 1.9.3 to 1.9.4:
423----------------------------
424
425* Fix a buffer overflow vulnerability involving very large variable expansions.
426  CVE-2023-24056
427
428* Fix a bunch of minor regressions with the solver.
429
430* Create separate solutions for `--cflags` and `--libs` when `--static` is not
431  used.
432
433* Remove final trailing whitespace in pkgconf_fragment_render_buf().
434
435* Revert broken pkg.m4 change involving querying module versions in
436  PKG_CHECK_MODULES.
437
438* Fix handling of tildes in version strings.
439
440* Various C99 formatting string fixes involving SIZE_FMT_SPECIFIER.
441
442Changes from 1.9.2 to 1.9.3:
443----------------------------
444
445* Fix a bunch of minor code issues pointed out using Clang static analyzer.
446
447* New API: pkgconf_solution_free(), which frees a compiled solution graph.
448
449* Fix behavior when overriding global variables with `--define-variable`.
450
451Changes from 1.9.1 to 1.9.2:
452----------------------------
453
454* Do not try to break dependency cycles across dependency lists.  This causes
455  the solved graph to sometimes miss required dependency nodes because the
456  solver detected an incorrect dependency cycle.
457
458* New API: pkgconf_queue_solve(), which replaces pkgconf_queue_apply().
459  pkgconf_queue_apply is now deprecated and should not be used in new code.
460
461Changes from 1.9.0 to 1.9.1:
462----------------------------
463
464* Skip graph flattening and traversal for query types which only make sense
465  for a single pkg-config module.
466
467  The old solver walked these graphs with --maximum-traverse-depth=1 in
468  these cases, but this is no longer helpful because the graph is flattened
469  by the new solver.
470
471Changes from 1.8.0 to 1.9.0:
472----------------------------
473
474* pkgconf 1.9.0 is the first testing release in the pkgconf 2.0 development
475  series.  While it is believed to be suitable for production, there may be
476  bugs due to the overall redesign of the solver and other initiatives.
477  Additionally, a future release of pkgconf plans will have additional ABI
478  breaks for the libpkgconf library before the pkgconf 2.0 release is cut.
479
480* There is now a new solver that is designed to provide higher performance
481  with complicated graphs, which works by flattening the dependency graph
482  into a smaller set of dependencies.  This graph can then be evaluated
483  instead of the original dependency graph without having to visit every
484  edge in the graph.
485
486  NOTE: This solver, while providing significant performance improvements,
487  does so, at the cost of changed behavior for some edge cases (such as
488  circular dependencies).
489
490* Bug fixes:
491  - Resolved several memory leaks with edge cases when using libpkgconf
492    directly.
493  - pkgconf CLI now consistently frees libpkgconf resources under all
494    circumstances.
495  - SYSROOT rules are no longer applied to `-uninstalled` packages by
496    default.  Use `PKG_CONFIG_PKGCONF1_SYSROOT_RULES` for legacy behavior.
497
498* A new `--license` selector has been added to the pkgconf CLI.  This uses
499  SPDX expressions which can be set as the `License` field in `.pc` files.
500  See the `pc(5)` manpage for more information.
501
502* The canonical location for pkgconf maintenance going forward is
503  <https://gitea.treehouse.systems/ariadne/pkgconf>.  This is presently
504  mirrored to GitHub for user convenience, but that mirroring will
505  be terminated at some point (due to GitHub Copilot).
506
507Changes from 1.7.4 to 1.8.0:
508----------------------------
509
510* This is the last planned maintenance branch.  I see pkgconf as basically
511  a finished tool at this point, and very few people were ultimately interested
512  in libpkgconf.  So, from here on out, it will just be bug fixes only and
513  very minor enhancements.
514
515* Bug fixes:
516  - Improved path handling on Windows to conform to what the MSYS2
517    and Cygwin teams were already modifying pkgconf to do.
518    Patches by Christoph Reiter.
519  - Fix a minor memory leak relating to cross-personalities.
520    Patch by Stone Tickle.
521  - Fix static builds for Windows on Meson.
522    Patch by Alexander Neumann.
523  - Fix some edge cases with --redefine-prefix.
524    Patch by midipix.
525  - Do not prepend sysroot_dir if the .pc file does not exist in the
526    sysroot.
527    Patch by Sandro Mani.
528  - Do not perform path filtering on default system include and library
529    path lists.  This fixes consistency with other mechanisms that modify
530    these path lists.
531
532* Enhancements:
533  - Document the --validate option in the manpage.
534    Patch by orbea.
535
536Changes from 1.7.3 to 1.7.4:
537----------------------------
538
539* Bug fixes:
540  - Fix null-dereference crash when pulling a malformed 'uninstalled'
541    .pc file into a dependency tree.  Patch by Tobias Stöckmann.
542  - Fix truncation of comment characters when quoted.
543  - Fix handling of .pc module names in --list-all on Windows.
544    Patch by Ryan Scott.
545  - Handle platforms where realpath(3) requires a pre-allocated buffer.
546    Patch by Fabian Groffen.
547  - Fix version whitespace warning.
548    Patch by Christoph Reiter.
549
550* Enhancements:
551  - Rewrite DOS paths on native Windows builds that don't use
552    Cygwin/MSYS.
553  - Add WantDefaultPure cross-compiler personality option.
554  - Prefer --static --pure linking on Windows.
555  - Add PKG_CONFIG_DONT_DEFINE_PREFIX environment variable.
556    Patch by Jeff Moguillansky.
557  - Many improvements when building pkgconf with Meson.
558    Patches by Christoph Reiter.
559
560Changes from 1.7.2 to 1.7.3:
561----------------------------
562
563* Bug fixes:
564  - Fix a possible out of boundary write when evaluating dependencies.
565    Patch by Tobias Stöckmann.
566  - Fix escaping logic on Windows.  Patch by Vincent Torri.
567  - Fix out of boundary reads and writes with a malformed fragment.
568    Patches by Tobias Stöckmann.
569  - Fix a possible out of boundary write when evaluating tuples.
570    Patch by Tobias Stöckmann.
571
572Changes from 1.7.1 to 1.7.2:
573----------------------------
574
575* Bug fixes:
576  - Fix a windows-specific crash relating to path fixups.
577
578Changes from 1.7.0 to 1.7.1:
579----------------------------
580
581* Bug fixes:
582  - Fix a possible out of boundary access in the parser for the
583    cross-compile database.  Patch by Tobias Stöckmann.
584  - Missing files for building with Meson are now included in the
585    tarball.  Patch by Neal Gompa.
586  - Fix calculation of package atoms on Windows with paths that
587    use both directory separator characters.
588
589Changes from 1.6.3 to 1.7.0:
590----------------------------
591
592* Bug fixes:
593  - Fix a possible buffer overflow involving newline escaping.
594    Patch by Tobias Stöckmann.
595  - Fix an out of boundary access in the parser.
596    Patch by Tobias Stöckmann.
597  - Fix leakage of strcmp() result value in pkgconf_compare_version()
598    responses.
599  - Return the default personality if loading a cross-compile
600    personality file failed.
601  - Do not complain about newlines when validating package versions.
602  - Properly detect strndup() on Windows when building with Meson.
603
604* Enhancements:
605  - A new --shared option and WantDefaultStatic cross-compile
606    configuration option have been added.  This allows for toolchains
607    to specify that static linking should be used by default.
608  - Support for the PKG_CONFIG_MSVC_SYNTAX environment variable has
609    been added.  Patch by Dan Kegel.
610  - Support for the PKGCONF_PKG_PKGF_DONT_MERGE_SPECIAL_FRAGMENTS
611    client flag which disables emulation of freedesktop.org pkg-config
612    fragment merging semantics has been added.
613    Patch by Karen Arutyunov.
614
615Changes from 1.6.2 to 1.6.3:
616----------------------------
617
618* Bug fixes:
619  - Properly tokenize versions.  Versions cannot logically contain
620    whitespace, as dependency-lists would not properly tokenize if
621    they could.  A diagnostic is generated for malformed version
622    strings containing whitespace when --validate is used.
623
624* Enhancements:
625  - CMake support has been dropped.  Use Meson to build on Windows.
626
627Changes from 1.6.1 to 1.6.2:
628----------------------------
629
630* Bug fixes:
631  - Fixed a memory leak when deduplicating paths.
632  - Fixed strndup-related build regression on Windows.
633
634* Enhancements:
635  - Added pkgconf-lite variant.  pkgconf-lite is a stripped down
636    variant of pkgconf that only includes pkg-config features.
637  - Added --modversion description to pkgconf(1) man page.
638
639Changes from 1.6.0 to 1.6.1:
640----------------------------
641
642* Bug fixes:
643  - Fixed an issue where a personality may not be properly selected
644    due to argv[0] containing a full path.
645  - Fixed a regression where having an empty PKG_CONFIG_LIBDIR
646    environment variable would not eliminate the default search
647    paths.
648  - Use POSIX realpath(3) instead of readlink() for deduplicating the
649    search path.  Use _fullpath() on Windows for the same purpose.
650  - The dequoting logic for tuples has been improved to ensure that
651    quotes *inside* a value remain quoted when necessary.
652
653Changes from 1.5.4 to 1.6.0:
654----------------------------
655
656* Bug fixes:
657  - Fixed issue where packages which referenced missing packages in
658    Requires.private may have crashed due to memory corruption issues
659    in some circumstances.
660  - Fixed warnings reported by GCC 8 diagnostics.
661
662* Enhancements:
663  - Add LIBPKGCONF_VERSION and LIBPKGCONF_VERSION_STR macros for
664    determining libpkgconf version.
665  - Add pkgconf_fragment_copy_list() to copy a fragment list to
666    another fragment list.
667
668Changes from 1.5.3 to 1.5.4:
669----------------------------
670
671* Bug fixes:
672  - fix build on Windows with Meson
673  - fix edge cases for path canonicalization (especially on Windows)
674
675Changes from 1.5.2 to 1.5.3:
676----------------------------
677
678* Security fixes:
679  - Fix edge cases involving dequoting zero-length tuples that can lead to a
680    buffer overflow under the right circumstances.  Thanks to A. Wilcox for
681    reporting and supplying a patch.  (MR 3)
682
683Changes from 1.5.1 to 1.5.2:
684----------------------------
685
686* Bug fixes:
687  - Ensure environment variables override values learned from personality files
688    or built-in defaults.
689
690* Documentation enhancements:
691  - Add pkgconf-personality(5) manpage documenting the personality file format.
692
693Changes from 1.5.0 to 1.5.1:
694----------------------------
695
696* Bug fixes:
697  - fixed a crash with some invalid multi-line .pc files
698
699Changes from 1.4.2 to 1.5.0:
700---------------------------
701
702* Administrative:
703  - The git repository has moved to <https://git.dereferenced.org/pkgconf/pkgconf>,
704    due to the acquisition of GitHub by Microsoft.
705
706* Overall enhancements:
707  - pkgconf now supports the proposed Requires.internal pkg-config extension,
708    by merging it with the Requires.private list (there is no functional difference
709    between the two in our resolver implementation)
710  - Support for cross-compilation personalities have been added.  To make use of this
711    functionality, create a file in the new personality.d directory that sits inside
712    the pkgconfig directory.  The personality file format is described in
713    pc-personality(5). (github #166)
714  - Support for Haiku has been added, including interpretation of BELIBRARIES and
715    other toolchain specifics. (github #180)
716  - Testsuite support can be disabled when building with Meson. (github #175)
717
718* Bug fixes:
719  - tuples are now appropriately dequoted when added by the parser (github #186).
720
721* Various Windows enhancements:
722  - CMake supports building with GCC on Windows. (github #179)
723  - Prefix rewriting has been improved. (github #177)
724  - PKGCONF_API support has been implemented when building with Meson,
725    allowing Meson to be used to build pkgconf on Windows. (github #174)
726
727* Documentation fixes:
728  - The manpages have been linted and fixed. (github #181, #182, #183)
729  - The description of pkgconf --exists has been corrected. (github #173)
730
731Changes from 1.4.1 to 1.4.2:
732----------------------------
733
734* Bug fixes:
735  - ensure pkgconf_dependency_t nodes have a solution marked when satisfied
736    by an indirect provider (github #172)
737
738Changes from 1.4.0 to 1.4.1:
739----------------------------
740
741* Bug fixes:
742  - revert some quoting changes because they don't work well with certain
743    GCC edge cases (github #168)
744
745* Enhancements:
746  - add limited support for --cflags with --msvc-syntax
747
748Changes from 1.3.7 to 1.4.0:
749----------------------------
750
751* Notable libpkgconf API changes:
752  - pkgconf_pkg_t.requires has been renamed to pkgconf_pkg_t.required for
753    C++20 compatibility.
754
755* Enhancements:
756  - pkgconf and libpkgconf has been ported to Windows as native binaries.
757  - improved compatibility with freedesktop.org pkg-config's ${pc_sysrootdir}
758    usage pattern.
759  - do not mention PKG_CONFIG_SKIP_CONFLICTS environmental variable when
760    simplified errors are requested, as with PKG_CONFIG_PATH.
761  - the dependency solver now stores solutions to dependency graph elements
762    it visits, allowing for the dependency graph to be incrementally solved.
763    this improves dependency solving time by an order of magnitude in most
764    cases.
765  - new --env option allows for exporting cflags/libs fragments as export
766    variables
767  - new support for building pkgconf with CMake and Meson
768  - improved compiler warning flag detection on autoconf and CMake
769  - removed PKGCONF_BUFSIZE allocations from the stack where possible
770  - allow for customizing the way fragment lists are rendered using a callback API
771  - new support for --msvc-syntax output using the new fragment rendering callbacks
772  - fragments are now quoted according to POSIX literal rules
773  - new variables on the pkg-config builtin:
774    - ${pc_system_includedirs}: the system includedir search path known by pkgconf
775    - ${pc_system_libdirs}: the system libdir search path known by pkgconf
776  - new manpages:
777    - pc(5) describing pkgconf's interpretation of pkg-config .pc files
778    - pkg.m4(7) describing the autotools macros bundled with pkgconf
779
780* Bug fixes:
781  - fix pkgconf_pkg_t.id generation on native Windows where either \ or / are usable
782    as path separator.
783  - add missing --modversion to --help output
784  - do not evaluate module paths for modules that are not actually on disk
785  - ensure we work on a zeroed buffer prior to calling realpath(2) with it
786  - fix path deduplication edge case when cache-inodes feature is unavailable
787  - fix path rewriting regression with PKG_CONFIG_SYSROOT_DIR when
788    PKG_CONFIG_SYSROOT_DIR is set to /
789  - fix crash in edge case where a .pc file has misquoting in a fragment list.
790  - fix logic edge case when comparing relocated paths
791
792Changes from 1.3.6 to 1.3.7:
793----------------------------
794
795* Enhancements:
796  - improved diagnostics for malformed packages.
797
798* Bug fixes:
799  - reject packages which contain incomplete metadata in post-parse phase.
800
801Changes from 1.3.5 to 1.3.6:
802----------------------------
803
804* Enhancements:
805  - add many cflags to the protected set: -Wa, -Wl, -Wp, -ansi, -std=, -stdlib=,
806    -pedantic, -pthread, -trigraphs, -nostdinc, -nostdlibinc, -nobuiltininc.
807
808* Bug fixes:
809  - handle -include cflag fragments properly.
810
811Changes from 1.3.4 to 1.3.5:
812----------------------------
813
814* Bug fixes:
815  - fix --variable output for compatibility some broken configure scripts when they
816    request the same variable from multiple packages
817
818Changes from 1.3.3 to 1.3.4:
819----------------------------
820
821* Bug fixes:
822  - fix a quoting issue exposed by the Go testsuite
823
824Changes from 1.3.2 to 1.3.3:
825----------------------------
826
827* Bug fixes:
828  - back out disabling the dependency resolver for single-package queries, it caused
829    too many regressions.
830
831* Enhancements:
832  - allow explicitly disabling the dependency resolver via new environment variable,
833    PKG_CONFIG_MINIMUM_TRAVERSE_DEPTH=1.  while pkgconf could already do this using
834    --minimum-traverse-depth=1, other pkg-config implementations do not have this
835    option, so adding an environment variable allows to make better use of this
836    feature (other implementations won't error due to unknown option this way)
837
838Changes from 1.3.1 to 1.3.2:
839----------------------------
840
841* Bug fixes:
842  - rewrite handling of --modversion, --print-variables and --variable to not require
843    the dependency resolver
844  - ensure we disable the dependency resolver in all cases where it is a single-package
845    query (1.3.1 did not go far enough)
846
847Changes from 1.3.0 to 1.3.1:
848----------------------------
849
850* Features:
851  - implement --short-errors
852
853* Bug fixes:
854  - only consider a single package at a time with --print-requires, --print-requires-private,
855    --print-provides, --modversion, --print-variable and --print-variables
856
857* Enhancements:
858  - synchronized latest freedesktop.org changes to pkg.m4
859  - improve error reporting with legacy --atleast-version and similar flags.
860
861Changes from 1.2.0 to 1.3.0:
862----------------------------
863
864* Features:
865  - pkgconf --debug now provides a facility for tracing most relevant libpkgconf operations
866  - libpkgconf: add warn and trace handlers for warnings
867  - replace realpath() with faster, lighter weight path normalization function (github #112)
868  - pkgconf CLI now emulates pkg-config quoting rules precisely, while allowing direct access
869    to the actual fragments via libpkgconf
870
871* Bug fixes:
872  - pkg: properly separate static and virtual packages so they are not inappropriately
873    optimized out of the dependency graph (github #108)
874  - argvsplit: do not consider ' and " to have similar rules to escape sequences (github #111)
875  - pkg: strip trailing whitespace when parsing .pc files
876
877* Enhancements:
878  - argvsplit basically rewritten from scratch
879  - many code fixes spotted by coverity
880  - add PKG_CONFIG_DONT_RELOCATE_PATHS and --dont-relocate-paths environment variables to
881    disable path relocation feature if needed
882  - remove extra whitespace that was present for compatibility with older pkg-config releases
883    (github #113)
884
885Changes from 1.1.0 to 1.2.0:
886----------------------------
887
888* Features:
889  - new --path option lists the .pc files which provided the requested dependencies
890  - new path relocation API: pkgconf_path_relocate(), which wraps functions such as
891    realpath() and cygwin_conv_path().
892  - new --with-path option adds a path to the search list
893  - new --define-prefix and --dont-define-prefix features enable automatic prefix
894    detection for relocatable SDKs.  this is mostly useful on windows.
895
896* Bug fixes:
897  - fragments: fix even more edge cases involving token concatenation
898  - path lists: don't attempt to collect path inodes if the filter is disabled
899  - path lists: explicitly avoid uninitialised data for the path inode cache
900  - client: properly handle --keep-system-cflags and --keep-system-libs
901
902* Enhancements:
903  - windows: build libpkgconf as a DLL
904  - fragments: only munge fragments if sysroot_dir is actually set
905  - overall API: resolver flags have been moved to being a client-object setting
906    instead of used for every function invocation
907
908Changes from 1.0.1 to 1.1.0:
909----------------------------
910
911* Features:
912  - new Provides system allows alternate .pc files to provide a dependency
913  - stable library API (with documentation): http://pkgconf.readthedocs.io/
914
915* Enhancements:
916  - make it possible to programmatically declare dependencies instead of just using the parser
917  - testsuite migrated to run under kyua
918  - provide a libpkgconf.pc file for consumers to use
919  - pkgconf client: new --pure flag to enable dependency graph optimization in --static mode
920  - significant .pc parser speedups using bsearch(3).
921  - handle -idirafter in the same way as -isystem CFLAGS
922  - learn toolchain "system" paths from GCC environment variables, if present
923  - filter duplicate PKG_CONFIG_PATH (and other) entries by inode
924
925* Bug fixes:
926  - fragments: fix another edge case involving empty tokens being concatenated onto previous tokens
927    (github #99)
928  - libpkgconf: remove dependencies on config.h in public headers
929
930Changes from 1.0.0 to 1.0.1:
931----------------------------
932
933* Enhancements:
934  - new stub implementation of --print-provides (github #95)
935
936* Bug fixes:
937  - fragments: fix an edge case involving path-only fragments and PKG_CONFIG_SYSROOT_DIR (github #94)
938
939Changes from 0.9.12 to 1.0.0:
940-----------------------------
941
942* Features:
943  - new library: libpkgconf
944
945* Enhancements:
946  - testsuite: use an explicit prefix on all tests
947  - build: switch to automake
948
949* Bug fixes:
950  - cast all usage of ctype(3) functions
951  - do not expand variables passed via --define-variable for compatibility with pkg-config 0.29
952  - let the CFLAGS being user settable
953
954Changes from 0.9.11 to 0.9.12:
955------------------------------
956
957* Features:
958  - add --list-package-names
959
960* Enhancements:
961  - ensure -I and -L are never pushed back
962
963* Bug fixes:
964  - fix implicit conversion warnings with variables over 31bits
965
966Changes from 0.9.10 to 0.9.11:
967------------------------------
968
969* Features:
970  - add --validate
971
972* Enhancements:
973  - add large file support checks in autoconf
974
975* Bug fixes:
976  - fix private lib deduplication
977  - handle --static correctly in some more esoteric scenarios
978
979Changes from 0.9.9 to 0.9.10:
980-----------------------------
981
982* Features:
983
984* Enhancements:
985
986* Bug fixes:
987  - Fix parser when dealing with commented lines
988
989Changes from 0.9.8 to 0.9.9:
990----------------------------
991
992* Features:
993  - add a sub out --print-provides
994
995* Enhancements:
996
997* Bug fixes:
998  - Fix parser when dealing with comments in fields
999
1000Changes from 0.9.7 to 0.9.8:
1001----------------------------
1002
1003* Features:
1004
1005* Enhancements:
1006  - Convert manpages to mdoc(7)
1007
1008* Bug fixes:
1009  - Fix parsing multiline fields
1010
1011Changes from 0.9.6 to 0.9.7:
1012----------------------------
1013
1014* Features:
1015
1016* Enhancements:
1017  - Convert manpages to mdoc(7)
1018
1019* Bug fixes:
1020  - Fix parsing multiline fields
1021
1022Changes from 0.9.5 to 0.9.6:
1023----------------------------
1024
1025* Features:
1026  - add a sub --debug
1027
1028* Enhancements:
1029  - Do not hardcode non-posix install(1)
1030
1031* Bug fixes:
1032  - fix --with-system-includedir and --with-system-libdir behaviour
1033
1034Changes from 0.9.4 to 0.9.5:
1035----------------------------
1036
1037* Features:
1038
1039* Enhancements:
1040  - Make all variables but CFLAGS and LIBS case sensitive
1041
1042* Bug fixes:
1043
1044Changes from 0.9.3 to 0.9.4:
1045----------------------------
1046
1047* Features:
1048  - Add a pkgconf(1) manpage
1049
1050* Enhancements:
1051  - Improve support for MacOS -framework
1052
1053* Bug fixes:
1054
1055Changes from 0.9.2 to 0.9.3:
1056----------------------------
1057
1058* Features:
1059  - Add support for CFLAGS.private
1060
1061* Enhancements:
1062  - Support out of source build
1063  - Improved private libs deduplication
1064
1065* Bug fixes:
1066
1067Changes from 0.9.1 to 0.9.2:
1068----------------------------
1069
1070* Features:
1071
1072* Enhancements:
1073
1074* Bug fixes:
1075  - Fix PKG_CONFIG_PATH being ignored when a .pc is directly supplied from
1076    command line
1077
1078Changes from 0.9.0 to 0.9.1:
1079----------------------------
1080
1081* Features:
1082
1083* Enhancements:
1084  - --simulate: print depgraph operations
1085  - --simulate: print bytecode program as a human-readable AST
1086
1087* Bug fixes:
1088  - reset parser state on new package atom
1089
1090Changes from 0.8.12 to 0.9.0:
1091----------------------------
1092
1093* Features:
1094
1095* Enhancements:
1096  - Rework the internal cache API
1097  - Rework the internal code to use the new pkg_list_t framework
1098  - Rework PKG_CONFIG_PATH handling code
1099
1100* Bug fixes:
1101  - fix multi-recursion with -framework
1102