diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-05-27 22:36:15 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-05-27 23:43:00 +0200 |
commit | d581acee5b08ea1af520cc2e8a3642b0c3924e43 (patch) | |
tree | dcf234eddcc6f0d290b6594c53a1e900d3c36378 | |
parent | 47e74d6e9d7d3a5f72a2b67f1916a719c61c86f8 (diff) |
gnu: pkg-config: Provide a cross-build-friendly wrapper.
* gnu/packages/pkg-config.scm (pkg-config): Rename to...
(%pkg-config): ... this. Make private.
(cross-pkg-config, pkg-config-for-target): New procedures.
(pkg-config): New macro.
-rw-r--r-- | gnu/packages/pkg-config.scm | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm index 294163b474..9f10440fec 100644 --- a/gnu/packages/pkg-config.scm +++ b/gnu/packages/pkg-config.scm @@ -20,9 +20,11 @@ #: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 +(define %pkg-config (package (name "pkg-config") (version "0.27.1") @@ -53,3 +55,50 @@ command line so an application can use gcc -o test test.c `pkg-config 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* ((out (assoc-ref %outputs "out")) + (bin (string-append out "/bin")) + (prog (string-append ,target "-pkg-config")) + (native + (string-append + (assoc-ref %build-inputs "pkg-config") + "/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)))))) + (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)))) |