1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages pkg-config)
#:use-module (guix licenses)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (gnu packages bash)
#:use-module (guix memoization)
#:export (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.29.2")
(source (origin
(method url-fetch)
(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
"14fmwzki1rlz8bs2p810lk6jqdxsk966d8drgsjmi54cd00rrikg"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
'("--with-internal-glib"
;; Those variables are guessed incorrectly when cross-compiling.
;; See: https://developer.gimp.org/api/2.0/glib/glib-cross-compiling.html.
,@(if (%current-target-system)
'("glib_cv_stack_grows=no"
"glib_cv_uscore=no"
"ac_cv_func_posix_getpwuid_r=yes"
"ac_cv_func_posix_getgrgid_r=yes")
'()))))
(native-search-paths
(list (search-path-specification
(variable "PKG_CONFIG_PATH")
(files '("lib/pkgconfig" "lib64/pkgconfig" "share/pkgconfig")))))
(home-page "https://www.freedesktop.org/wiki/Software/pkg-config")
(license gpl2+)
(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
it can be used for defining the location of documentation tools, for
instance.")))
(define cross-pkg-config
(mlambda (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"))
#t))))
(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))))
;; This hack allows for using both "pkg-config" and "TARGET-pkg-config"
;; at the same time. Simply using '%pkg-config' and 'pkg-config' won't
;; work because they both use the "PKG_CONFIG_PATH" environment variable.
(define-public pkg-config-for-build
(package
(inherit (hidden-package %pkg-config))
(name "pkg-config-for-build")
(version "0")
(source #f)
(build-system trivial-build-system)
(inputs
(list bash-minimal %pkg-config))
(arguments
`(#:modules ((guix build utils))
#:builder
,#~(begin
(use-modules (guix build utils))
(define where (string-append #$output "/bin/pkg-config"))
(mkdir-p (dirname where))
(call-with-output-file where
(lambda (port)
(format port "#!~a
export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH_FOR_BUILD\"
exec ~a \"$@\""
(search-input-file %build-inputs "bin/bash")
(search-input-file %build-inputs "bin/pkg-config"))))
(chmod where #o500))))
(native-search-paths
(map (lambda (original)
(search-path-specification
(inherit original)
(variable "PKG_CONFIG_PATH_FOR_BUILD")))
(package-native-search-paths %pkg-config)))))
(define-public pkgconf
(package
(name "pkgconf")
(version "1.9.3")
(source (origin
(method url-fetch)
(uri (string-append "https://distfiles.dereferenced.org/"
name "/" name "-" version ".tar.xz"))
(sha256
(base32
"17b9cl2s99pzgblaj0yg49k3m0by5x78vwg4879vckymhys5bcsz"))))
(build-system gnu-build-system)
(arguments (list #:tests? #f)) ;TODO: package kyua
(home-page "http://pkgconf.org/")
(synopsis "Package compiler and linker metadata toolkit")
(description "@command{pkgconf} is a program which helps to configure
compiler and linker flags for development libraries. It is similar to
pkg-config from freedesktop.org. @code{libpkgconf} is a library which
provides access to most of pkgconf's functionality, to allow other tooling
such as compilers and IDEs to discover and use libraries configured by
pkgconf.")
(license isc)))
|