;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (guix licenses)
#:use-module (guix packages)
#:use-module (guix download)
- #:use-module (guix build-system gnu))
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
+ #:export (pkg-config))
-(define-public pkg-config
+;; This is the "primitive" pkg-config package. People should use `pkg-config'
+;; (see below) rather than `%pkg-config', but we export `%pkg-config' so that
+;; `fold-packages' finds it.
+(define-public %pkg-config
(package
(name "pkg-config")
- (version "0.27.1")
+ (version "0.29")
(source (origin
(method url-fetch)
- (uri (string-append
- "http://pkgconfig.freedesktop.org/releases/pkg-config-"
- version ".tar.gz"))
+ (uri (list
+ (string-append
+ "http://fossies.org/linux/misc/pkg-config-" version
+ ".tar.gz")
+
+ ;; FIXME: The following URL redirects to HTTPS, which
+ ;; creates bootstrapping problems:
+ ;; <http://bugs.gnu.org/22774>.
+ (string-append
+ "http://pkgconfig.freedesktop.org/releases/pkg-config-"
+ version ".tar.gz")))
(sha256
(base32
- "05wc5nwkqz7saj2v33ydmz1y6jdg659dll4jjh91n41m63gx0qsg"))))
+ "0sq09a39wj4cxf8l2jvkq067g08ywfma4v6nhprnf351s82pfl68"))))
(build-system gnu-build-system)
(arguments `(#:configure-flags '("--with-internal-glib")))
(native-search-paths
(list (search-path-specification
(variable "PKG_CONFIG_PATH")
- (directories '("lib/pkgconfig" "lib64/pkgconfig"
- "share/pkgconfig")))))
+ (files '("lib/pkgconfig" "lib64/pkgconfig" "share/pkgconfig")))))
(home-page "http://www.freedesktop.org/wiki/Software/pkg-config")
(license gpl2+)
- (synopsis "a helper tool used when compiling applications and
-libraries")
+ (synopsis "Helper tool used when compiling applications and libraries")
(description
"pkg-config is a helper tool used when compiling applications and
libraries. It helps you insert the correct compiler options on the
command line so an application can use gcc -o test test.c `pkg-config
--libs --cflags glib-2.0` for instance, rather than hard-coding values
-on where to find glib (or other libraries). It is language-agnostic, so
+on where to find glib (or other libraries). It is language-agnostic, so
it can be used for defining the location of documentation tools, for
instance.")))
+
+(define (cross-pkg-config target)
+ "Return a pkg-config for TARGET, essentially just a wrapper called
+`TARGET-pkg-config', as `configure' scripts like it."
+ ;; See <http://www.flameeyes.eu/autotools-mythbuster/pkgconfig/cross-compiling.html>
+ ;; for details.
+ (package (inherit %pkg-config)
+ (name (string-append (package-name %pkg-config) "-" target))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder (begin
+ (use-modules (guix build utils))
+
+ (let* ((in (assoc-ref %build-inputs "pkg-config"))
+ (out (assoc-ref %outputs "out"))
+ (bin (string-append out "/bin"))
+ (prog (string-append ,target "-pkg-config"))
+ (native (string-append in "/bin/pkg-config")))
+
+ (mkdir-p bin)
+
+ ;; Create a `TARGET-pkg-config' -> `pkg-config' symlink.
+ ;; This satisfies the pkg.m4 macros, which use
+ ;; AC_PROG_TOOL to determine the `pkg-config' program
+ ;; name.
+ (symlink native (string-append bin "/" prog))
+
+ ;; Also make 'pkg.m4' available, some packages might
+ ;; expect it.
+ (mkdir-p (string-append out "/share"))
+ (symlink (string-append in "/share/aclocal")
+ (string-append out "/share/aclocal"))))))
+ (native-inputs `(("pkg-config" ,%pkg-config)))
+
+ ;; Ignore native inputs, and set `PKG_CONFIG_PATH' for target inputs.
+ (native-search-paths '())
+ (search-paths (package-native-search-paths %pkg-config))))
+
+(define (pkg-config-for-target target)
+ "Return a pkg-config package for TARGET, which may be either #f for a native
+build, or a GNU triplet."
+ (if target
+ (cross-pkg-config target)
+ %pkg-config))
+
+;; This hack allows us to automatically choose the native or the cross
+;; `pkg-config' depending on whether it's being used in a cross-build
+;; environment or not.
+(define-syntax pkg-config
+ (identifier-syntax (pkg-config-for-target (%current-target-system))))