gnu: python-pathpy: Build documentation.
[jackhill/guix/guix.git] / gnu / packages / pkg-config.scm
index 294163b..d7cc454 100644 (file)
@@ -1,5 +1,5 @@
 ;;; 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))))