¿Por qué pkg-config --cflags openssl no devuelve nada en RHEL 6.8?

¿Por qué pkg-config --cflags openssl no devuelve nada en RHEL 6.8?

Estoy ejecutando en una máquina Linux RHEL 6.8. Estoy buscando crear varios paquetes a partir de archivos tarballs/git-repos/whatefersincambiar la configuración del sistema (bajo root o sudo).

Estoy ejecutando en una máquina RHEL 6.8:

bash-4.1$ cat /etc/issue
Red Hat Enterprise Linux Workstation release 6.8 (Santiago)
Kernel \r on an \m

openssl-develesta instalado:

bash-4.1$ rpm -q -a | grep openssl
openssl-1.0.1e-48.el6.i686
openssl098e-0.9.8e-20.el6_7.1.x86_64
openssl098e-0.9.8e-20.el6_7.1.i686
openssl-devel-1.0.1e-48.el6.i686
openssl-1.0.1e-48.el6.x86_64
openssl-devel-1.0.1e-48.el6.x86_64

Así que espero que este comando devuelva algún resultado, de modo que cuando construya paquetes desde el código fuente que usen pkg-config, encuentren el valor de CFLAGS que necesitan:

bash-4.1$ pkg-config --cflags openssl

Pero devuelve sólo una nueva línea. ¿Por qué?

Depuración adicional:

Muestra qué archivo está usando:

bash-4.1$ pkg-config --debug --list-all 2>&1 | grep 'Will find package.*openssl'
Will find package 'openssl' in file '/usr/lib64/pkgconfig/openssl.pc'

Muestre el archivo que debería estar leyendo:

bash-4.1$ cat /usr/lib64/pkgconfig/openssl.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir=${prefix}/include

Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 1.0.1e
Requires: 
Libs: -L${libdir} -lssl -lcrypto
Libs.private: -Wl,-z,relro -ldl -lz -L/usr/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto -lresolv
Cflags: -I${includedir} -I/usr/include

Ampliando el grep:

bash-4.1$ pkg-config --debug --list-all 2>&1 | grep 'openssl'
File 'openssl.pc' appears to be a .pc file
Will find package 'openssl' in file '/usr/lib64/pkgconfig/openssl.pc'
Looking for package 'openssl'
Looking for package 'openssl-uninstalled'
Reading 'openssl' from file '/usr/lib64/pkgconfig/openssl.pc'
Parsing package file '/usr/lib64/pkgconfig/openssl.pc'
Unknown keyword 'Libs.private' in '/usr/lib64/pkgconfig/openssl.pc'
Removing -I/usr/include from cflags for openssl
Removing -I/usr/include from cflags for openssl
Removing -L /usr/lib64 from libs for openssl
Adding 'openssl' to list of known packages, returning as package 'openssl'
openssl                     OpenSSL - Secure Sockets Layer and cryptography libraries and tools
bash-4.1$ 

Mmmm que hace eso Removing -I/usr/include from cflags for opensslahí?

Además, la Cflagsvariable está definida. ¿Es eso un error? ¿Debería serlo cflagsen su lugar?

Además, descargué y construí la mía propia pkg-config, versión 0.29.2, y ofrece el mismo comportamiento. Sospecho que hay un error en el openssl.pcarchivo, pero no estoy seguro.

Aun así, ¿cuál es la solución además de exportar valores codificados CFLAGSy LDFLAGSjusto antes de llamar a los distintos ./configurescripts de paquetes?

Respuesta1

Parece que pkg-configelimina los duplicados y también omite las rutas "predeterminadas", como /usr/include.

Ver,

$ printf "Name: whatever\nVersion: 1\nDescription: bla\nCflags: -I/usr/include" > /tmp/x.pc
$ pkg-config --cflags  /tmp/x.pc

$ printf "Name: whatever\nVersion: 1\nDescription: bla\nCflags: -I/usr/includeX" > /tmp/y.pc
$ pkg-config --cflags  /tmp/y.pc
-I/usr/includeX

Estos directorios predeterminados se configuran en el momento de la compilación de pkg-config; consulte README.md en las fuentes:

./configure \
     --prefix=/opt/pkgconf \
     --with-system-libdir=/lib:/usr/lib \
     --with-system-includedir=/usr/include

Puede desactivar ese comportamiento en tiempo de ejecución mediante la variable de entorno:

$ PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 pkg-config --cflags  /tmp/x.pc
-I/usr/include

o anular el valor predeterminado incorporado:

$ PKG_CONFIG_SYSTEM_INCLUDE_PATH="/whatever" pkg-config --cflags  /tmp/x.pc
-I/usr/include

El pkg-config reciente también tiene opciones de línea de comandos --keep-system-cflagsy--keep-system-libs

información relacionada