Commit Graph

52 Commits (6de71767abd7fa42b9c6aac6ad3af4e581a5b792)

Author SHA1 Message Date
Ariadne Conill 1e179963d4 Enforce maximum package count correctly for --modversion
Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
2023-05-02 11:58:39 -07:00
Taylor R Campbell 212c85863a Avoid undefined behaviour with the ctype(3) functions.
fix https://github.com/pkgconf/pkgconf/issues/291

As defined in the C standard:

        In all cases the argument is an int, the value of which shall
        be representable as an unsigned char or shall equal the value
        of the macro EOF.  If the argument has any other value, the
        behavior is undefined.

This is because they're designed to work with the int values returned
by getc or fgetc; they need extra work to handle a char value.

If EOF is -1 (as it almost always is), with 8-bit bytes, the allowed
inputs to the ctype(3) functions are:

        {-1, 0, 1, 2, 3, ..., 255}.

However, on platforms where char is signed, such as x86 with the
usual ABI, code like

        char *ptr = ...;
        ... isspace(*ptr) ...

may pass in values in the range:

        {-128, -127, -126, ..., -2, -1, 0, 1, ..., 127}.

This has two problems:

1. Inputs in the set {-128, -127, -126, ..., -2} are forbidden.

2. The non-EOF byte 0xff is conflated with the value EOF = -1, so
   even though the input is not forbidden, it may give the wrong
   answer.

Casting char to unsigned int first before passing the result to
ctype(3) doesn't help: inputs like -128 are unchanged by this cast,
because (on a two's-complement machine with 32-bit int and unsigned
int), converting the signed char with integer value -128 to unsigned
int gives integer value 2^32 - 128 = 0xffffff80, which is out of
range, and which is converted in int back to -128, which is also out
of range.

It is necessary to cast char inputs to unsigned char first; you can
then cast to unsigned int if you like but there's no need because the
functions will always convert the argument to int by definition.  So
the above fragment needs to be:

        char *ptr = ...;
        ... isspace((unsigned char)*ptr) ...

This patch changes unsigned int casts to unsigned char casts, and
adds unsigned char casts where they are missing.
2023-05-02 11:43:56 -07:00
Ariadne Conill 98b33b48cd cli: use flattened solution for almost all user-facing queries 2023-01-21 21:43:08 +00:00
Ariadne Conill 90b65c866b main: use flattened solution for cflags/libs only 2023-01-21 21:31:16 +00:00
Ariadne Conill e2a12fd4c2 main: reset solver when solving for library groups 2023-01-21 20:39:53 +00:00
Ariadne Conill b106de0c7a cli: add whitespace between cflags and libs fragments 2023-01-21 20:21:26 +00:00
Ariadne Conill 5044491f43 queue: add function to free a compiled solution 2022-08-16 19:27:35 +00:00
Ariadne Conill 68b5cab72d cli: remove redundant SEARCH_PRIVATE block
It turns out there was already a check for PKG_CFLAGS being requested,
but the check was busted because PKG_CFLAGS is a combined-or of all of
the various --cflags flags.

Check that PKG_CFLAGS bits are set at all on want_flags instead.
2022-08-11 15:06:08 +00:00
psykose 746005582f
cli: use Requires.private when cflags are requested 2022-08-11 15:47:32 +02:00
Ariadne Conill 4e449bd45f cli: do not search requires.private for --libs unless --static 2022-08-08 09:42:01 +00:00
Ariadne Conill 760d1eea10 cli: use pkgconf_queue_solve instead of pkgconf_queue_apply 2022-08-08 09:27:39 +00:00
Ariadne Conill b29f9d8713 cli: do not flatten or traverse the graph when asking for module-specific values 2022-08-08 00:40:52 +00:00
Ariadne Conill d5f9bdae57 cli: add support for dumping SPDX expressions from modules 2022-08-07 04:40:19 +00:00
Ariadne Conill 56881f64f0 cli: resolve uninitialized pointer warnings reported by GCC 12 2022-08-07 00:38:38 +00:00
Dylan Baker 4493a322f6 main: do cleanup when checking required version 2022-08-04 15:52:10 -07:00
Dylan Baker 38103134a5 main: goto cleanup in validate case too
This fixes leaks in two tests
2022-08-04 15:52:10 -07:00
Ariadne Conill 6c70781aad introduce PKG_CONFIG_PKGCONF1_SYSROOT_RULES for legacy pkgconf behavior 2022-07-26 18:00:22 +00:00
Ariadne Conill 11164376f7 main: handle --personality load failure 2022-06-26 18:34:22 +00:00
Ariadne Conill 04a6dda79f main: refactor apply_variable 2022-06-26 18:17:30 +00:00
Dylan Baker f5d6bb71f8 libpkgconf: remove const modifier from error_handler data pointer
Currently, the data pointer is `const void *`, which means that the
handler can't modify the data without casting away the constness.
2022-02-07 09:34:09 -08:00
Ariadne Conill 41bff10998 cli: ensure the client and cross-personality are cleaned up in all cases 2021-08-17 14:54:36 -06:00
Ariadne Conill f411e7e55b cli: free package resolution queue unconditionally 2021-08-17 14:47:10 -06:00
Ariadne Conill ce82e36c14 cli: fix memory leak when packages are not provided on the command line 2021-08-17 14:39:44 -06:00
Stone Tickle fa859bb045 close error_msgout if opened 2021-07-24 06:08:25 -05:00
Stone Tickle dba2600014 deinit personality in cli 2021-07-24 06:08:25 -05:00
Ariadne Conill 599dfcb264 main: extend copyright notice to 2021 2021-03-18 06:42:57 -06:00
Ariadne Conill fd1b8ccca6 main: if PKG_CONFIG_FDO_SYSROOT_RULES is set, or DESTDIR matches PKG_CONFIG_SYSROOT_DIRS, disable the automatic sysroot rewriting
Closes #205.
2021-03-18 06:22:11 -06:00
Ariadne Conill f9531ce9fe add support for pkgconf_cross_personality_t.want_default_pure 2021-03-18 06:02:00 -06:00
Jeff Moguillansky dcf529b83d cli: add environment variable PKG_CONFIG_DONT_DEFINE_PREFIX
On Windows, pkgconf redefines the prefix by default.
This gives the user the option to disable this behavior via an environment variable.
The benefit of an environment variable is the user can change this behavior when
using a build system such as cmake or meson, which may not expose this
parameter to the user.
2021-02-06 14:06:04 -07:00
Ariadne Conill 47466470d2 main: extend copyright statement to 2020 in --about 2020-05-26 10:57:51 -06:00
Ariadne Conill fce1199b53 cli: add support for PKG_CONFIG_MSVC_SYNTAX env variable
Patch from Dan Kegel.
2020-05-24 14:34:17 -06:00
Ariadne Conill 62bbd3b664 cli: remove --version to --modversion remapping
This has been a source of frequent complaints, so we drop it.
Resolves: https://todo.sr.ht/~kaniini/pkgconf/6
2020-01-21 10:32:36 -06:00
Ariadne Conill 48dc665ae3 personality: add support for WantDefaultStatic setting 2019-10-19 00:56:17 -05:00
Ariadne Conill 40fe48355b cli: main: add --shared option 2019-10-19 00:46:32 -05:00
Ariadne Conill 5f3aa3a8d2 cli: bump copyright notice to 2019 2019-07-12 06:53:25 -05:00
Alexander Tsoy db9c1e96a1
fix the order of header includes
config.h should be included before stdinc.h, otherwise large file
support is not enabled.

Downstream bug: https://bugs.gentoo.org/687548
2019-06-08 04:55:52 +03:00
kaniini 7460d2870e Merge branch 'fix-msvc-build' of seungha.yang/pkgconf into master 2019-05-18 00:52:09 +00:00
Seungha Yang 5436558eb8 main: Fix build with MSVC
Use pkgconf_strndup() since strndup() might be unavailable
2019-05-11 01:17:32 +09:00
William Pitcock 0ba98da26c lite: remove --simulate 2019-05-06 15:22:11 -05:00
William Pitcock 2d0c1f5cb7 lite: disable debug logging 2019-05-06 15:17:08 -05:00
William Pitcock 43ca536b9f lite: disable some bloat 2019-05-06 15:13:17 -05:00
Emil Renner Berthing d926e75b34 main: fix personalities when argv[0] contains path 2019-03-06 16:09:21 +01:00
William Pitcock 8aa662227c main: deduce the cross-compilation triplet based on program name 2018-05-10 13:37:40 -05:00
William Pitcock c46868294f cli: implement --personality 2018-05-09 22:53:55 -05:00
William Pitcock e9324ee4bc cli: implement --dump-personality 2018-05-09 22:21:45 -05:00
William Pitcock 6b0e346c28 libpkgconf: refactor building the dir lists into separate concerns 2018-05-09 17:07:26 -05:00
William Pitcock 854490c5b9 libpkgconf: add basic support for cross-compile personality objects 2018-05-09 16:54:21 -05:00
William Pitcock 7e9ed6922d libpkgconf: pkg: skip over -I cflags from Requires.internal nodes when building a cflags list 2018-03-18 18:05:55 -05:00
William Pitcock ad65bc4a71 libpkgconf: dependency: allow dependency nodes to be colored with traits 2018-03-18 18:03:33 -05:00
TingPing 60c05f5621 Improve prefix rewriting on Windows (#177)
* cli: Default to rewriting prefix on Windows

This matches `pkg-config` behavior

* libpkgconf: Rewrite the prefix of all variables
2018-03-07 23:00:22 -06:00