Bug #10651
closedpkg_config does not report required include headers
Description
pkg_config behavior seems incorrect in 2.2.0. I am testing following script in Linux Arch:
require 'mkmf' puts pkg_config("xft")
In 2.1.5 it gives
["-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz", "", "-lXft"]
In 2.2.0 it gives
["", "", "-lXft"]
pkg-config command line tool gives.
$ pkg-config --cflags xft -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz
So it points that new pkg_config implementation is incorrect.
Here is content of the pc file itself:
$ cat /usr/lib/pkgconfig/xft.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: Xft
Description: X FreeType library
Version: 2.3.2
Requires: xproto
Requires.private: xrender, fontconfig, freetype2
Cflags: -I${includedir}
Libs: -L${libdir} -lXft
Files
Updated by anatolik (Anatol Pomozov) over 9 years ago
The commit that produced this behavior change is 097c3e9cbbf23718371f08c24b2d2297b039f63f in particular this part:
orig_ldflags = $LDFLAGS
if get and option
get[option]
elsif get and try_ldflags(ldflags = get['libs'])
- cflags = get['cflags']
+ if incflags = get['cflags-only-I']
+ $INCFLAGS << " " << incflags
+ cflags = get['cflags-only-other']
+ else
+ cflags = get['cflags']
+ end
libs = get['libs-only-l']
ldflags = (Shellwords.shellwords(ldflags) - Shellwords.shellwords(libs)).quote.join(" ")
$CFLAGS += " " << cflags
Could anyone explain what this change tries to do?
Updated by jeremyevans0 (Jeremy Evans) about 5 years ago
anatolik (Anatol Pomozov) wrote:
Could anyone explain what this change tries to do?
It tries to separate the -I
cflags from the non -I
ones, as they are stored in different global variables. In general it probably doesn't cause problems in mkmf because it is used for the side effect of modifying the global variables. However, the return value should probably be fixed to include the -I
cflags. Attached is a patch that does that.
Updated by jeremyevans (Jeremy Evans) about 5 years ago
- Status changed from Open to Closed
Applied in changeset git|325f7b6008a4a10e9b0f1c69ee4518b0669461be.
Make pkg_config in mkmf include -I cflags in return value
This was the historical behavior, it was modified unintentionally
by 097c3e9cbbf23718371f08c24b2d2297b039f63f, which started storing
these flags in a different global variable.
Also, include the incflags when logging, and document that the
method modifies $INCFLAGS.
Fixes [Bug #10651]