Project

General

Profile

Actions

Bug #10651

closed

pkg_config does not report required include headers

Added by anatolik (Anatol Pomozov) almost 10 years ago. Updated over 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
[ruby-core:67137]

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

mkmf-pkgconfig-return-value.patch (1.48 KB) mkmf-pkgconfig-return-value.patch jeremyevans0 (Jeremy Evans), 07/08/2019 03:19 AM

Updated by anatolik (Anatol Pomozov) almost 10 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) over 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.

Actions #3

Updated by jeremyevans (Jeremy Evans) over 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]

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0