From 762f0a599e0e022739ad50a5a972a656f026db18 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Tue, 15 Nov 2022 21:00:57 -0300 Subject: [PATCH 1/5] lib/strings.nix: add mesonOption utility function And some friends, to help write Meson commandline invocations. --- lib/strings.nix | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/lib/strings.nix b/lib/strings.nix index b5f5a4d9060b..96dfb779cd6f 100644 --- a/lib/strings.nix +++ b/lib/strings.nix @@ -661,6 +661,61 @@ rec { name = head (splitString sep filename); in assert name != filename; name; + /* Create a -D= string that can be passed to typical Meson + invocations. + + Type: mesonOption :: string -> string -> string + + @param feature The feature to be set + @param value The desired value + + Example: + mesonOption "engine" "opengl" + => "-Dengine=opengl" + */ + mesonOption = feature: value: + assert (lib.isString feature); + assert (lib.isString value); + "-D${feature}=${value}"; + + /* Create a -D={true,false} string that can be passed to typical + Meson invocations. + + Type: mesonBool :: string -> bool -> string + + @param condition The condition to be made true or false + @param flag The controlling flag of the condition + + Example: + mesonBool "hardened" true + => "-Dhardened=true" + mesonBool "static" false + => "-Dstatic=false" + */ + mesonBool = condition: flag: + assert (lib.isString condition); + assert (lib.isBool flag); + mesonOption condition (lib.boolToString flag); + + /* Create a -D={enabled,disabled} string that can be passed to + typical Meson invocations. + + Type: mesonEnable :: string -> bool -> string + + @param feature The feature to be enabled or disabled + @param flag The controlling flag + + Example: + mesonEnable "docs" true + => "-Ddocs=enabled" + mesonEnable "savage" false + => "-Dsavage=disabled" + */ + mesonEnable = feature: flag: + assert (lib.isString feature); + assert (lib.isBool flag); + mesonOption feature (if flag then "enabled" else "disabled"); + /* Create an --{enable,disable}- string that can be passed to standard GNU Autoconf scripts. From 85b6175ccb1a6f6e053d1aa75f4f0e40bfaee56c Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Sun, 20 Nov 2022 21:37:31 -0300 Subject: [PATCH 2/5] lib/default.nix: include mesonOption-related functions To bring them to the scope when calling `lib`. --- lib/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/default.nix b/lib/default.nix index cc4bedc5869b..68e5b8dea1eb 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -101,6 +101,7 @@ let upperChars toLower toUpper addContextFrom splitString removePrefix removeSuffix versionOlder versionAtLeast getName getVersion + mesonOption mesonBool mesonEnable nameFromURL enableFeature enableFeatureAs withFeature withFeatureAs fixedWidthString fixedWidthNumber isStorePath toInt toIntBase10 readPathsFromFile fileContents; From 3b66936599e4babe0be380eefeff5f1676a333e0 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Sun, 20 Nov 2022 13:05:36 -0300 Subject: [PATCH 3/5] muon: use mesonOption-related functions This specific commit is intended to demonstrate a somewhat real world use case for the new meson.* utilities defined in lib/strings.nix --- .../tools/build-managers/muon/default.nix | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkgs/development/tools/build-managers/muon/default.nix b/pkgs/development/tools/build-managers/muon/default.nix index b94a376ebb34..69320cc217e7 100644 --- a/pkgs/development/tools/build-managers/muon/default.nix +++ b/pkgs/development/tools/build-managers/muon/default.nix @@ -81,14 +81,13 @@ stdenv.mkDerivation (finalAttrs: { ''; buildPhase = let - muonFeatureFlag = feature: flag: - "-D${feature}=${if flag then "enabled" else "disabled"}"; - muonConditionFlag = condition: flag: - "-D${condition}=${lib.boolToString flag}"; + muonBool = lib.mesonBool; + muonEnable = lib.mesonEnable; + cmdlineForMuon = lib.concatStringsSep " " [ - (muonConditionFlag "static" stdenv.targetPlatform.isStatic) - (muonFeatureFlag "docs" buildDocs) - (muonFeatureFlag "samurai" embedSamurai) + (muonBool "static" stdenv.targetPlatform.isStatic) + (muonEnable "docs" buildDocs) + (muonEnable "samurai" embedSamurai) ]; cmdlineForSamu = "-j$NIX_BUILD_CORES"; in '' From 17adb474a4af4ec1b1f093457c7aced39f600594 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Wed, 7 Dec 2022 01:12:13 -0300 Subject: [PATCH 4/5] slurp: 1.3.2 -> 1.4.0 --- pkgs/tools/wayland/slurp/default.nix | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pkgs/tools/wayland/slurp/default.nix b/pkgs/tools/wayland/slurp/default.nix index 87238a50f560..17b2bb3521b1 100644 --- a/pkgs/tools/wayland/slurp/default.nix +++ b/pkgs/tools/wayland/slurp/default.nix @@ -1,29 +1,29 @@ { lib , stdenv , fetchFromGitHub +, cairo +, libxkbcommon , meson , ninja , pkg-config -, cairo -, libxkbcommon +, scdoc , wayland , wayland-protocols , wayland-scanner -, buildDocs ? true, scdoc +, buildDocs ? true }: -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "slurp"; - version = "1.3.2"; + version = "1.4.0"; src = fetchFromGitHub { owner = "emersion"; repo = "slurp"; - rev = "v${version}"; - sha256 = "sha256-5ZB34rqLyZmfjT/clxNRDmF0qgITFZ5xt/gIEXQzvQE="; + rev = "v${finalAttrs.version}"; + hash = "sha256-jUuY2wuN00libHDaJEmrvQAb1o989Ly3nLyKHV0jz8Q="; }; - strictDeps = true; nativeBuildInputs = [ meson ninja @@ -38,13 +38,16 @@ stdenv.mkDerivation rec { wayland-protocols ]; - mesonFlags = lib.optional buildDocs "-Dman-pages=enabled"; + strictDeps = true; + + mesonFlags = [ (lib.mesonEnable "man-pages" buildDocs) ]; meta = with lib; { - description = "Select a region in a Wayland compositor"; homepage = "https://github.com/emersion/slurp"; + description = "Select a region in a Wayland compositor"; + changelog = "https://github.com/emersion/slurp/releases/tag/v${finalAttrs.version}"; license = licenses.mit; maintainers = with maintainers; [ buffet ]; - platforms = platforms.linux; + inherit (wayland.meta) platforms; }; -} +}) From 11f03af9e3821c499015f5f191a02f77d6591ea3 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Wed, 7 Dec 2022 13:39:17 -0300 Subject: [PATCH 5/5] mpv: use meson* functions --- pkgs/applications/video/mpv/default.nix | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pkgs/applications/video/mpv/default.nix b/pkgs/applications/video/mpv/default.nix index 11203b62df57..da5e6366fb61 100644 --- a/pkgs/applications/video/mpv/default.nix +++ b/pkgs/applications/video/mpv/default.nix @@ -100,20 +100,20 @@ in stdenv.mkDerivation rec { NIX_LDFLAGS = lib.optionalString x11Support "-lX11 -lXext "; mesonFlags = let - mesonFeatureFlag = feature: flag: "-D${feature}=${if flag then "enabled" else "disabled"}"; + inherit (lib) mesonOption mesonBool mesonEnable; in [ - "-Ddefault_library=shared" - "-Dlibmpv=true" - (mesonFeatureFlag "libarchive" archiveSupport) - (mesonFeatureFlag "manpage-build" true) - (mesonFeatureFlag "cdda" cddaSupport) - (mesonFeatureFlag "dvbin" dvbinSupport) - (mesonFeatureFlag "dvdnav" dvdnavSupport) - (mesonFeatureFlag "openal" openalSupport) - (mesonFeatureFlag "sdl2" sdl2Support) + (mesonOption "default_library" "shared") + (mesonBool "libmpv" true) + (mesonEnable "libarchive" archiveSupport) + (mesonEnable "manpage-build" true) + (mesonEnable "cdda" cddaSupport) + (mesonEnable "dvbin" dvbinSupport) + (mesonEnable "dvdnav" dvdnavSupport) + (mesonEnable "openal" openalSupport) + (mesonEnable "sdl2" sdl2Support) # Disable whilst Swift isn't supported - (mesonFeatureFlag "swift-build" swiftSupport) - (mesonFeatureFlag "macos-cocoa-cb" swiftSupport) + (mesonEnable "swift-build" swiftSupport) + (mesonEnable "macos-cocoa-cb" swiftSupport) ]; mesonAutoFeatures = "auto"; @@ -125,10 +125,10 @@ in stdenv.mkDerivation rec { ninja pkg-config python3 - ] ++ lib.optionals stdenv.isDarwin [ - xcbuild.xcrun - ] ++ lib.optionals swiftSupport [ swift ] - ++ lib.optionals waylandSupport [ wayland-scanner ]; + ] + ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun ] + ++ lib.optionals swiftSupport [ swift ] + ++ lib.optionals waylandSupport [ wayland-scanner ]; buildInputs = [ ffmpeg