From 7790eafbdcbc85a8e48912189400565dd039cb64 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 23 Apr 2022 23:37:49 +0200 Subject: [PATCH] pkg-configPackages: init --- pkgs/test/default.nix | 2 + pkgs/test/pkg-config-packages.nix | 34 +++++ pkgs/top-level/all-packages.nix | 2 + pkgs/top-level/pkg-config-packages.nix | 199 +++++++++++++++++++++++++ 4 files changed, 237 insertions(+) create mode 100644 pkgs/test/pkg-config-packages.nix create mode 100644 pkgs/top-level/pkg-config-packages.nix diff --git a/pkgs/test/default.nix b/pkgs/test/default.nix index 818001018b3a..8ff0e163395f 100644 --- a/pkgs/test/default.nix +++ b/pkgs/test/default.nix @@ -51,6 +51,8 @@ with pkgs; php = recurseIntoAttrs (callPackages ./php {}); + pkg-configPackages = callPackage ./pkg-config-packages.nix { }; + rustCustomSysroot = callPackage ./rust-sysroot {}; buildRustCrate = callPackage ../build-support/rust/build-rust-crate/test { }; importCargoLock = callPackage ../build-support/rust/test/import-cargo-lock { }; diff --git a/pkgs/test/pkg-config-packages.nix b/pkgs/test/pkg-config-packages.nix new file mode 100644 index 000000000000..d61902cf1f46 --- /dev/null +++ b/pkgs/test/pkg-config-packages.nix @@ -0,0 +1,34 @@ +{ lib, pkg-config, pkg-configPackages, runCommand }: +let + allTests = lib.mapAttrs (k: v: if v == null then null else makePkgConfigTest k v) pkg-configPackages; + + # nix-build rejects attribute names with periods + # This will build those regardless. + tests-combined = runCommand "pkg-config-checks" { + allTests = lib.attrValues allTests; + } '' + touch $out + ''; + + makePkgConfigTest = moduleName: pkg: runCommand "check-pkg-config-${moduleName}" { + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ pkg ]; + inherit moduleName; + } '' + echo "checking pkg-config module $moduleName in $buildInputs" + set +e + version="$(pkg-config --modversion $moduleName)" + r=$? + set -e + if [[ $r = 0 ]]; then + echo "✅ pkg-config module $moduleName exists and has version $version" + echo "$version" > $out + else + echo "These modules were available in the input propagation closure:" + pkg-config --list-all + echo "❌ pkg-config module $moduleName was not found" + false + fi + ''; +in + allTests // { inherit tests-combined; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1463780e90b6..6b61bcccee60 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -112,6 +112,8 @@ with pkgs; tests = callPackages ../test {}; + pkg-configPackages = import ./pkg-config-packages.nix pkgs; + ### Nixpkgs maintainer tools nix-generate-from-cpan = callPackage ../../maintainers/scripts/nix-generate-from-cpan.nix { }; diff --git a/pkgs/top-level/pkg-config-packages.nix b/pkgs/top-level/pkg-config-packages.nix new file mode 100644 index 000000000000..41613e20caf4 --- /dev/null +++ b/pkgs/top-level/pkg-config-packages.nix @@ -0,0 +1,199 @@ +/* A set of aliases to be used in generated expressions. + + In case of ambiguity, this will pick a sensible default. + + This was initially based on cabal2nix's mapping. + + It'd be nice to generate this mapping, based on a set of derivations. + It can not be fully automated, so it should be a expression or tool + that makes suggestions about which pkg-config module names can be added. + */ +pkgs: { + inherit (pkgs) + bzip2 + freealut + libb2 + libsass + taglib + zlib + ; + alsa = pkgs.alsa-lib; + alsa-topology = pkgs.alsa-lib; + "appindicator-0.1" = pkgs.libappindicator-gtk2; + "appindicator3-0.1" = pkgs.libappindicator-gtk3; + cairo-gobject = pkgs.cairo; + cairo-pdf = pkgs.cairo; + cairo-ps = pkgs.cairo; + cairo-svg = pkgs.cairo; + + "ncurses++" = pkgs.ncurses; + "ncurses++w" = pkgs.ncurses; + form = pkgs.ncurses; + formw = pkgs.ncurses; + menu = pkgs.ncurses; + menuw = pkgs.ncurses; + ncurses = pkgs.ncurses; + ncursesw = pkgs.ncurses; + panel = pkgs.ncurses; + panelw = pkgs.ncurses; + + "dbusmenu-glib-0.4" = pkgs.libdbusmenu; + "dbusmenu-gtk3-0.4" = pkgs.libdbusmenu-gtk3; # TODO: also needs gtk3. Use build propagation? + fftw3 = pkgs.fftw; + fftw3f = pkgs.fftwFloat; + freetype2 = pkgs.freetype; + "gdk-2.0" = pkgs.gtk2; + "gdk-3.0" = pkgs.gtk3; + "gdk-pixbuf-2.0" = pkgs.gdk-pixbuf; + "gdk-x11-2.0" = pkgs.gtk2-x11; + "gdk-x11-3.0" = pkgs.gtk3-x11; + geos = pkgs.geos; + "gio-2.0" = pkgs.glib; + gl = pkgs.libGL; + glew = pkgs.glew; + glu = pkgs.libGLU; + glut = pkgs.freeglut; + gnome-keyring-1 = pkgs.libgnome-keyring; + "gnome-vfs-2.0" = pkgs.gnome2.gnome_vfs; + "gnome-vfs-module-2.0" = pkgs.gnome2.gnome_vfs; + "gobject-2.0" = pkgs.glib; + "gobject-introspection-1.0" = pkgs.gobject-introspection; + "gstreamer-audio-1.0" = pkgs.gst_all_1.gst-plugins-base; + "gstreamer-base-1.0" = pkgs.gst_all_1.gst-plugins-base; + "gstreamer-controller-1.0" = pkgs.gst_all_1.gstreamer; + "gstreamer-net-1.0" = pkgs.gst_all_1.gst-plugins-base; + "gstreamer-video-1.0" = pkgs.gst_all_1.gst-plugins-base; + "gthread-2.0" = pkgs.glib; + "gtk+-2.0" = pkgs.gtk2; + "gtk+-3.0" = pkgs.gtk3; + "gtk+-x11-2.0" = pkgs.gtk2-x11; + "gtksourceview-3.0" = pkgs.gtksourceview3; + hidapi-libusb = pkgs.hidapi; + icu-i18n = pkgs.icu; + icu-uc = pkgs.icu; + icu-io = pkgs.icu; + libidn = pkgs.libidn; + IL = pkgs.libdevil; + ImageMagick = pkgs.imagemagick; + imlib2 = pkgs.imlib2; + jack = pkgs.libjack2; + "javascriptcoregtk-4.0" = pkgs.webkitgtk; + libjpeg = pkgs.libjpeg; + libturbojpeg = pkgs.libjpeg; + lapack = pkgs.liblapack; + libavutil = pkgs.ffmpeg; + libbrotlienc = pkgs.brotli; + libbrotlidec = pkgs.brotli; + libgsasl = pkgs.gsasl; + libpcre = pkgs.pcre; + libpcre2-8 = pkgs.pcre2; + libpcre2-16 = pkgs.pcre2; + libpcre2-32 = pkgs.pcre2; + libpcre2-posix = pkgs.pcre2; + libqrencode = pkgs.qrencode; + libR = pkgs.R; + libsecp256k1 = pkgs.secp256k1; + "libsoup-gnome-2.4" = pkgs.libsoup; + libsystemd = pkgs.systemd; + libudev = pkgs.systemd; + "libxml-2.0" = pkgs.libxml2; + libzip = pkgs.libzip; + libzmq = pkgs.zeromq; + liblzma = pkgs.xz; + m = null; # in stdenv + libmagic = pkgs.file; + MagickWand = pkgs.imagemagick; + libmnl = pkgs.libmnl; + + ompi = pkgs.openmpi; + ompi-c = pkgs.openmpi; + ompi-cxx = pkgs.openmpi; + ompi-fort = pkgs.openmpi; + ompi-f77 = pkgs.openmpi; + ompi-f90 = pkgs.openmpi; + orte = pkgs.openmpi; + + netsnmp = pkgs.net_snmp; + nix-cmd = pkgs.nix; + nix-expr = pkgs.nix; + nix-main = pkgs.nix; + nix-store = pkgs.nix; + libnotify = pkgs.libnotify; + odbc = pkgs.unixODBC; + openblas = pkgs.openblasCompat; + pangocairo = pkgs.pango; + libpcap = pkgs.libpcap; + libpng = pkgs.libpng; + poppler-glib = pkgs.poppler_gi; + libpq = pkgs.postgresql; + libpgtypes = pkgs.postgresql; + libecpg = pkgs.postgresql; + libecpg_compat = pkgs.postgresql; + pthread = null; # in stdenv + libpulse = pkgs.libpulseaudio; + libpulse-simple = pkgs.libpulseaudio; + libpulse-mainloop-glib = pkgs.libpulseaudio; + python = pkgs.python3; + + Qt5Concurrent = pkgs.qt5.qtbase; + Qt5Core = pkgs.qt5.qtbase; + Qt5DBus = pkgs.qt5.qtbase; + Qt5Gui = pkgs.qt5.qtbase; + Qt5Network = pkgs.qt5.qtbase; + Qt5OpenGL = pkgs.qt5.qtbase; + Qt5OpenGLExtensions = pkgs.qt5.qtbase; + Qt5PrintSupport = pkgs.qt5.qtbase; + Qt5Sql = pkgs.qt5.qtbase; + Qt5Test = pkgs.qt5.qtbase; + Qt5Widgets = pkgs.qt5.qtbase; + Qt5Xml = pkgs.qt5.qtbase; + + Qt5Qml = pkgs.qt5.qtdeclarative; + Qt5QmlModels = pkgs.qt5.qtdeclarative; + Qt5Quick = pkgs.qt5.qtdeclarative; + Qt5QuickTest = pkgs.qt5.qtdeclarative; + Qt5QuickWidgets = pkgs.qt5.qtdeclarative; + + librtlsdr = pkgs.rtl-sdr; + "ruby-2.7" = pkgs.ruby_2_7; + "ruby-3.0" = pkgs.ruby_3_0; + "ruby-3.1" = pkgs.ruby_3_1; + libsctp = pkgs.lksctp-tools; # This is linux-specific, we should create a common attribute if we add sctp support for other systems. + sdl2 = pkgs.SDL2; + sndfile = pkgs.libsndfile; + SoapySDR = pkgs.soapysdr; + libsodium = pkgs.libsodium; + sqlite3 = pkgs.sqlite; + libssh2 = pkgs.libssh2; + openssl = pkgs.openssl; + libssl = pkgs.openssl; + libcrypto = pkgs.openssl; + libstatgrab = pkgs.libstatgrab; + taglib_c = pkgs.taglib; + tdjson = pkgs.tdlib; + tensorflow = pkgs.libtensorflow; + uuid = pkgs.libossp_uuid; + "vte-2.91" = pkgs.vte; + wayland-client = pkgs.wayland; + wayland-cursor = pkgs.wayland; + egl = pkgs.libGL; + wayland-server = pkgs.wayland; + "webkit2gtk-4.0" = pkgs.webkitgtk; + "webkit2gtk-web-extension-4.0" = pkgs.webkitgtk; + x11 = pkgs.xorg.libX11; + xau = pkgs.xorg.libXau; + xcursor = pkgs.xorg.libXcursor; + xerces-c = pkgs.xercesc; + xext = pkgs.xorg.libXext; + xft = pkgs.xorg.libXft; + xi = pkgs.xorg.libXi; + xinerama = pkgs.xorg.libXinerama; + xkbcommon = pkgs.libxkbcommon; + xpm = pkgs.xorg.libXpm; + xrandr = pkgs.xorg.libXrandr; + xrender = pkgs.xorg.libXrender; + xscrnsaver = pkgs.xorg.libXScrnSaver; + xtst = pkgs.xorg.libXtst; + xxf86vm = pkgs.xorg.libXxf86vm; + "yaml-0.1" = pkgs.libyaml; +}