
pkg-config
es una herramienta de ayuda en el proceso de compilación de aplicaciones o bibliotecas de programas.
Índice
Introducción
pkg-config
fue diseñado originalmente para Linux pero está disponible para «BSDs», Windows, Mac y Solaris. Esta utilería es un tipo de administrador o «facilitador» de bibliotecas de programas en el proceso de compilación.
A menos que uno sea un desarrollador de software, generalmente la razón para la instalación de esta utilería es la dependencia en la utilización de otro programa. En otras palabras, el error generado por su ausencia al momento de llevar a cabo una compilación, por ejemplo:
...
configure: error: in `/Users/admin/Downloads/wget-1.20.3':
configure: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config.
...
En las siguientes descripciones se hace uso de las convenciones descritas en la «Guía» del sitio.
Instalación
Generalmente la razón por la que se requiere instalar esta utilería es para poder llevar a cabo el proceso de compilación de programas que hacen uso de bibliotecas, y no deja de ser algo «abstracto» la necesidad y hacer uso de ésta. Pese a esto, su instalación no es demasiado complicada, pero si hay algunas consideraciones de acuerdo a la versión de macOS.
macOS 10.14 «Mojave»
Primero se procede a descargar desde el sitio del proyecto el «tarball» (para determinar la versión que debe ser descargada, se recomienda revisar el estado del proyecto en el sitio oficial de éste). Se descompacta y procedemos con su instalación. Abajo se ilustra este proceso llevado en BASH.
$ curl https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz -o pkgconfig.tgz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1969k 100 1969k 0 0 1774k 0 0:00:01 0:00:01 --:--:-- 1775k
$ ls
...
pkgconfig.tgz
...
$ tar -zxvf pkgconfig.tgz
x pkg-config-0.29.2/
x pkg-config-0.29.2/config.guess
x pkg-config-0.29.2/depcomp
x pkg-config-0.29.2/aclocal.m4
x pkg-config-0.29.2/main.c
x pkg-config-0.29.2/detectenv-msvc.mak
x pkg-config-0.29.2/README.win32
x pkg-config-0.29.2/config.h.win32
...
x pkg-config-0.29.2/Makefile.in
x pkg-config-0.29.2/COPYING
$ cd pk*29.2
$ ls
AUTHORS compile main.c
COPYING config.guess missing
ChangeLog config.h.in parse.c
INSTALL config.h.win32 parse.h
Makefile.am config.h.win32.in pkg-config-guide.html
Makefile.in config.sub pkg-config.1
Makefile.sources configure pkg.c
Makefile.vc configure.ac pkg.h
NEWS depcomp pkg.m4.in
README detectenv-msvc.mak rpmvercmp.c
README.win32 glib rpmvercmp.h
aclocal.m4 install-sh
check ltmain.sh
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
...
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing glib/glibconfig.h commands
$ make install
Making install in glib
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-recursive
Making install in .
make[4]: Nothing to be done for `install-exec-am'.
Making install in m4macros
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-am
make[5]: Nothing to be done for `install-exec-am'.
Making install in glib
...
./install-sh -c -d '/usr/local/bin'
mkdir: /usr/local/bin: Permission denied
make[2]: *** [install-binPROGRAMS] Error 1
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1
$
El proceso de compilación e instalación puede ser largo (y no es raro que uno se desentienda de éste yéndose a tomar un café o a «switchearse» al Netflix) pero, pese a la cantidad de mensajes que pueden llegar a aparecer, es importante revisar qué ocurrió cuando el proceso de compilación e instalación concluye.
Mensajes de advertencia (warnings) como el siguiente pueden ser ignorados
...
CC libglib_2_0_la-gurifuncs.lo
CC libglib_2_0_la-gutils.lo
gutils.c:1424:7: warning: 'FSFindFolder' is deprecated: first deprecated in
macOS 10.8 [-Wdeprecated-declarations]
if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr)
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h:286:1: note:
'FSFindFolder' has been explicitly marked deprecated here
FSFindFolder(
^
...
pero mensajes como los que se muestran al final de lo siguiente, no.
...
CC libglib_2_0_la-glib-unix.lo
CC libglib_2_0_la-gthread-posix.lo
CC giounix.lo
CC gspawn.lo
CCLD libglib-2.0.la
echo > glib-public-headers.txt.tmp && mv glib-public-headers.txt.tmp glib-public-headers.txt
make[6]: Nothing to be done for `install-exec-am'.
Making install in .
CC pkg.o
CC parse.o
CC rpmvercmp.o
CC main.o
CCLD pkg-config
./install-sh -c -d '/usr/local/bin'
mkdir: /usr/local/bin: Permission denied
make[2]: *** [install-binPROGRAMS] Error 1
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1
$
En este caso podemos ver que un problema de acceso se ha reportado, por lo que es de esperarse que nada se ha instalado. Conviene revisar que las rutas existan, pero por lo general este problema se resuelve procediendo la instalación nuevamente en un «modo administrador» (como dirían los del submundo Windows).
$ sudo make install
Password:
Making install in glib
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-recursive
Making install in .
make[4]: Nothing to be done for `install-exec-am'.
Making install in m4macros
...
make[6]: Nothing to be done for `install-exec-am'.
Making install in .
./install-sh -c -d '/usr/local/bin'
/bin/sh ./libtool --mode=install /usr/bin/install -c pkg-config '/usr/local/bin'
libtool: install: /usr/bin/install -c pkg-config /usr/local/bin/pkg-config
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-exec-hook
cd /usr/local/bin && ln -f pkg-config x86_64-apple-darwin18.5.0-pkg-config
./install-sh -c -d '/usr/local/share/doc/pkg-config'
/usr/bin/install -c -m 644 pkg-config-guide.html '/usr/local/share/doc/pkg-config'
./install-sh -c -d '/usr/local/share/aclocal'
/usr/bin/install -c -m 644 pkg.m4 '/usr/local/share/aclocal'
./install-sh -c -d '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 pkg-config.1 '/usr/local/share/man/man1'
Making install in check
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
$ echo $?
0
$
Finalmente, revisamos que efectivamente se haya instalado algo.
$ cd /usr/local/bin
$ ls
pkg-config x86_64-apple-darwin18.5.0-pkg-config
$
macOS 10.15 «Catalina»
En macOS 10.15, los pasos ya descritos volvieron a a aplicar. Se repitió este proceso tomando las mismas versiones (sin validar si hubiera algún update en ellas). En el futuro, puede ser necesario validar actualizaciones y sitios de donde hacer la descarga de componentes antes de iniciar.
macOS 12 «Monterey»
La instalación en macOS 12 sigue esencialmente la misma secuencia de pasos aunque, quizás por cambios en macOS, configure
requirió hacer uso de un switch no usado antes. Por brevedad, sólo se muestran los comandos introducidos en ZSH, sin la salida de algunos de ellos.
% curl https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz -o pkgconfig.tgz
% tar -zxvf pkgconfig.tgz
% cd pk*29.2
% ./configure
Como se indicaba, el último paso generó el mensaje de error:
...
checking for pkg-config... no
checking for glib-2.0 >= 2.16... no
configure: error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found. Please set GLIB_CFLAGS and GLIB_LIBS to the correct values or pass --with-internal-glib to configure to use the bundled copy.
Así, los siguientes pasos fueron:
% ./configure --with-internal-glib
% make
% sudo make install
Referencias
- «pkg-config«, pkg-config Project Page, Freedesktop.org, web. Visited: 2019.06.16. URL: https://www.freedesktop.org/wiki/Software/pkg-config/.
- «pkg-config«, Wikipedia, web. Visited: 2016.06.16. URL: https://en.wikipedia.org/wiki/Pkg-config.
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Avila |
Creación: 2019.05.19 Última actualización: 2021.11.10 |
|||
El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto. |