Merge pull request #42669 from obsidiansystems/upstream-plist

Upstream PLIST handling
This commit is contained in:
Matthew Bauer 2018-06-28 15:26:31 -04:00 committed by GitHub
commit a44d33aac1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 149 additions and 166 deletions

View File

@ -173,6 +173,53 @@ rec {
fna); fna);
in if fna == {} then "<λ>" in if fna == {} then "<λ>"
else "<λ:{${showFnas}}>" else "<λ:{${showFnas}}>"
else abort "toPretty: should never happen (v = ${v})"; else abort "generators.toPretty: should never happen (v = ${v})";
# PLIST handling
toPlist = {}: v: let
expr = ind: x: with builtins;
if isNull x then "" else
if isBool x then bool ind x else
if isInt x then int ind x else
if isString x then str ind x else
if isList x then list ind x else
if isAttrs x then attrs ind x else
abort "generators.toPlist: should never happen (v = ${v})";
literal = ind: x: ind + x;
bool = ind: x: literal ind (if x then "<true/>" else "<false/>");
int = ind: x: literal ind "<integer>${toString x}</integer>";
str = ind: x: literal ind "<string>${x}</string>";
key = ind: x: literal ind "<key>${x}</key>";
indent = ind: expr "\t${ind}";
item = ind: libStr.concatMapStringsSep "\n" (indent ind);
list = ind: x: libStr.concatStringsSep "\n" [
(literal ind "<array>")
(item ind x)
(literal ind "</array>")
];
attrs = ind: x: libStr.concatStringsSep "\n" [
(literal ind "<dict>")
(attr ind x)
(literal ind "</dict>")
];
attr = let attrFilter = name: value: name != "_module" && value != null;
in ind: x: libStr.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList
(name: value: lib.optional (attrFilter name value) [
(key "\t${ind}" name)
(expr "\t${ind}" value)
]) x));
in ''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
${expr "" v}
</plist>'';
} }

View File

@ -1,4 +1,7 @@
{ stdenv, fetchFromGitHub, fetchpatch, libnotify, librsvg, darwin, psmisc, gtk3, libappindicator-gtk3, substituteAll, syncthing, wrapGAppsHook, gnome3, buildPythonApplication, dateutil, pyinotify, pygobject3, bcrypt, gobjectIntrospection }: { stdenv, fetchFromGitHub, fetchpatch, libnotify, librsvg, killall
, gtk3, libappindicator-gtk3, substituteAll, syncthing, wrapGAppsHook
, gnome3, buildPythonApplication, dateutil, pyinotify, pygobject3
, bcrypt, gobjectIntrospection }:
buildPythonApplication rec { buildPythonApplication rec {
version = "0.9.4"; version = "0.9.4";
@ -35,7 +38,7 @@ buildPythonApplication rec {
}) })
(substituteAll { (substituteAll {
src = ./paths.patch; src = ./paths.patch;
killall = "${if stdenv.isDarwin then darwin.shell_cmds else psmisc}/bin/killall"; killall = "${killall}/bin/killall";
syncthing = "${syncthing}/bin/syncthing"; syncthing = "${syncthing}/bin/syncthing";
}) })
]; ];

View File

@ -1,4 +1,5 @@
{ stdenv, cmake, fetchFromGitHub, zlib, libxml2, libpng, CoreServices, CoreGraphics, ImageIO, ninja }: { stdenv, cmake, fetchFromGitHub, zlib, libxml2, libpng
, CoreServices, CoreGraphics, ImageIO, ninja }:
let let
googletest = fetchFromGitHub { googletest = fetchFromGitHub {
@ -17,7 +18,8 @@ let
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
name = "xcbuild-${version}"; name = "xcbuild-${version}";
# Once a version is released that includes https://github.com/facebook/xcbuild/commit/183c087a6484ceaae860c6f7300caf50aea0d710, # Once a version is released that includes
# https://github.com/facebook/xcbuild/commit/183c087a6484ceaae860c6f7300caf50aea0d710,
# we can stop doing this -pre thing. # we can stop doing this -pre thing.
version = "0.1.2-pre"; version = "0.1.2-pre";

View File

@ -1,7 +1,9 @@
{ stdenv, sdk, writeText, platformName, xcbuild }: { runCommand, lib, sdk, platformName, writeText }:
let let
inherit (lib.generators) toPlist;
Info = { Info = {
CFBundleIdentifier = platformName; CFBundleIdentifier = platformName;
Type = "Platform"; Type = "Platform";
@ -283,24 +285,14 @@ let
in in
stdenv.mkDerivation { runCommand "MacOSX.platform" {} ''
name = "MacOSX.platform"; install -D ${writeText "Info.plist" (toPlist {} Info)} $out/Info.plist
buildInputs = [ xcbuild ]; install -D ${writeText "version.plist" (toPlist {} Version)} $out/version.plist
buildCommand = '' install -D ${writeText "Architectures.xcspec" (toPlist {} Architectures)} $out/Developer/Library/Xcode/Specifications/Architectures.xcspec
mkdir -p $out/ install -D ${writeText "PackageTypes.xcspec" (toPlist {} PackageTypes)} $out/Developer/Library/Xcode/Specifications/PackageTypes.xcspec
cd $out/ install -D ${writeText "ProductTypes.xcspec" (toPlist {} ProductTypes)} $out/Developer/Library/Xcode/Specifications/ProductTypes.xcspec
plutil -convert xml1 -o Info.plist ${writeText "Info.plist" (builtins.toJSON Info)}
plutil -convert xml1 -o version.plist ${writeText "version.plist" (builtins.toJSON Version)}
mkdir -p $out/Developer/Library/Xcode/Specifications/
cd $out/Developer/Library/Xcode/Specifications/
plutil -convert xml1 -o Architectures.xcspec ${writeText "Architectures.xcspec" (builtins.toJSON Architectures)}
plutil -convert xml1 -o PackageTypes.xcspec ${writeText "PackageTypes.xcspec" (builtins.toJSON PackageTypes)}
plutil -convert xml1 -o ProductTypes.xcspec ${writeText "ProductTypes.xcspec" (builtins.toJSON ProductTypes)}
mkdir -p $out/Developer/SDKs/ mkdir -p $out/Developer/SDKs/
cd $out/Developer/SDKs/ cd $out/Developer/SDKs/
cp -r ${sdk} ${sdk.name} cp -r ${sdk} ${sdk.name}
''; ''
}

View File

@ -1,6 +1,8 @@
{ stdenv, writeText, toolchainName, sdkName, xcbuild }: { runCommand, lib, toolchainName, sdkName, writeText }:
let let
inherit (lib.generators) toPlist;
# TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here. # TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here.
version = "10.10"; version = "10.10";
@ -19,17 +21,9 @@ let
}; };
in in
stdenv.mkDerivation { runCommand "MacOSX${version}.sdk" {
name = "MacOSX${version}.sdk";
inherit version; inherit version;
} ''
buildInputs = [ xcbuild ]; install -D ${writeText "SDKSettings.plist" (toPlist {} SDKSettings)} $out/SDKSettings.plist
install -D ${writeText "SystemVersion.plist" (toPlist {} SystemVersion)} $out/System/Library/CoreServices/SystemVersion.plist
buildCommand = '' ''
mkdir -p $out/
plutil -convert xml1 -o $out/SDKSettings.plist ${writeText "SDKSettings.json" (builtins.toJSON SDKSettings)}
mkdir -p $out/System/Library/CoreServices/
plutil -convert xml1 -o $out/System/Library/CoreServices/SystemVersion.plist ${writeText "SystemVersion.plist" (builtins.toJSON SystemVersion)}
'';
}

View File

@ -1,16 +1,18 @@
{stdenv, writeText, toolchainName, xcbuild, fetchurl { runCommand, toolchainName, fetchurl, makeWrapper, stdenv
, llvm, cctools, gcc, bootstrap_cmds, binutils , buildPackages, lib, writeText }:
, yacc, flex, m4, unifdef, gperf, indent, ctags, makeWrapper
, xib2nib}:
let let
inherit (lib) getBin optionalString;
inherit (lib.generators) toPlist;
ToolchainInfo = { ToolchainInfo = {
Identifier = toolchainName; Identifier = toolchainName;
}; };
# We could pull this out of developer_cmds but it adds an annoying loop if we want to bootstrap and # We could pull this out of developer_cmds but it adds an annoying
# this is just a tiny script so I'm not going to bother # loop if we want to bootstrap and this is just a tiny script so I'm
# not going to bother.
mkdep-darwin-src = fetchurl { mkdep-darwin-src = fetchurl {
url = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh"; url = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
sha256 = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541"; sha256 = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
@ -18,106 +20,44 @@ let
}; };
in in
stdenv.mkDerivation { runCommand "nixpkgs.xctoolchain" {
name = "nixpkgs.xctoolchain"; nativeBuildInputs = [ makeWrapper ];
buildInputs = [ xcbuild makeWrapper ]; } (''
## cctools should build on Linux but it doesn't currently
buildCommand = ''
mkdir -p $out mkdir -p $out
plutil -convert xml1 -o $out/ToolchainInfo.plist ${writeText "ToolchainInfo.plist" (builtins.toJSON ToolchainInfo)} install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $out/ToolchainInfo.plist
mkdir -p $out/usr/include mkdir -p $out/usr/include
mkdir -p $out/usr/lib mkdir -p $out/usr/lib
mkdir -p $out/usr/libexec mkdir -p $out/usr/libexec
mkdir -p $out/usr/share mkdir -p $out/usr/share
mkdir -p $out/usr/bin mkdir -p $out/usr/bin
cd $out/usr/bin
ln -s ${stdenv.cc}/bin/cpp
ln -s ${stdenv.cc}/bin/c++
ln -s ${stdenv.cc}/bin/cc
ln -s c++ clang++
ln -s cc clang
ln -s ${llvm}/bin/llvm-cov for bin in ${getBin stdenv.cc}/bin/*; do
ln -s ${llvm}/bin/llvm-dsymutil ln -s $bin $out/usr/bin
ln -s ${llvm}/bin/llvm-dwarfdump done
ln -s ${llvm}/bin/llvm-nm
ln -s ${llvm}/bin/llvm-objdump
ln -s ${llvm}/bin/llvm-otool
ln -s ${llvm}/bin/llvm-profdata
ln -s ${llvm}/bin/llvm-size
ln -s ${yacc}/bin/yacc for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
ln -s ${yacc}/bin/bison if ! [ -e "$out/usr/bin/$(basename $bin)" ]; then
ln -s ${flex}/bin/flex ln -s $bin $out/usr/bin
ln -s ${flex}/bin/flex++ fi
done
ln -s flex lex ln -s ${buildPackages.yacc}/bin/yacc $out/usr/bin/yacc
ln -s ${buildPackages.yacc}/bin/bison $out/usr/bin/bison
ln -s ${buildPackages.flex}/bin/flex $out/usr/bin/flex
ln -s ${buildPackages.flex}/bin/flex++ $out/usr/bin/flex++
ln -s $out/bin/flex $out/usr/bin/lex
ln -s ${m4}/bin/m4 ln -s ${buildPackages.m4}/bin/m4 $out/usr/bin/m4
ln -s m4 gm4 ln -s $out/usr/bin/m4 $out/usr/bin/gm4
ln -s ${unifdef}/bin/unifdef ln -s ${buildPackages.unifdef}/bin/unifdef $out/usr/bin/unifdef
ln -s ${unifdef}/bin/unifdefall ln -s ${buildPackages.unifdef}/bin/unifdefall $out/usr/bin/unifdefall
ln -s ${gperf}/bin/gperf ln -s ${buildPackages.gperf}/bin/gperf $out/usr/bin/gperf
ln -s ${indent}/bin/indent ln -s ${buildPackages.indent}/bin/indent $out/usr/bin/indent
ln -s ${ctags}/bin/ctags ln -s ${buildPackages.ctags}/bin/ctags $out/usr/bin/ctags
'' + stdenv.lib.optionalString stdenv.isDarwin '' '' + optionalString stdenv.isDarwin ''
ln -s ${bootstrap_cmds}/bin/mig ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $out/usr/bin
ln -s ${binutils}/bin/lipo ln -s ${mkdep-darwin-src} $out/usr/bin/mkdep
'')
ln -s ${cctools}/bin/ar
ln -s ${cctools}/bin/as
ln -s ${cctools}/bin/nm
ln -s ${cctools}/bin/nmedit
ln -s ${cctools}/bin/ld
ln -s ${cctools}/bin/libtool
ln -s ${cctools}/bin/strings
ln -s ${cctools}/bin/strip
ln -s ${cctools}/bin/install_name_tool
ln -s ${cctools}/bin/bitcode_strip
ln -s ${cctools}/bin/codesign_allocate
ln -s ${cctools}/bin/dsymutil
ln -s ${cctools}/bin/dyldinfo
ln -s ${cctools}/bin/otool
ln -s ${cctools}/bin/unwinddump
ln -s ${cctools}/bin/size
ln -s ${cctools}/bin/segedit
ln -s ${cctools}/bin/pagestuff
ln -s ${cctools}/bin/ranlib
ln -s ${cctools}/bin/redo_prebinding
ln -s ${xib2nib}/bin/ibtool
'' +
# No point including the entire gcc closure if we don't already have it
(if stdenv.cc.isClang then ''
ln -s ${stdenv.cc.cc.llvm}/bin/llvm-cov gcov
ln -s ${mkdep-darwin-src} mkdep
'' else ''
ln -s ${gcc}/bin/gcov
ln -s ${gcc}/bin/mkdep
'');
}
# other commands in /bin/
# asa
# cmpdylib (in cctools)
# ctf_insert (in cctools)
# dwarfdump
# lorder
# rebase
# rpcgen (in developer_cmds)
# what
# swift: see #11463
# swift
# swift-compress
# swift-demangle
# swift-stdlib-tool
# swift-update
# swiftc

View File

@ -1,5 +1,5 @@
{ stdenv, callPackage, makeWrapper, writeText, CoreServices, ImageIO, CoreGraphics { stdenv, buildPackages, makeWrapper, writeText, runCommand
, cctools, bootstrap_cmds, binutils}: , CoreServices, ImageIO, CoreGraphics }:
let let
@ -7,20 +7,20 @@ let
platformName = "com.apple.platform.macosx"; platformName = "com.apple.platform.macosx";
sdkName = "macosx10.10"; sdkName = "macosx10.10";
xcbuild = callPackage ./default.nix { xcbuild = buildPackages.callPackage ./default.nix {
inherit CoreServices ImageIO CoreGraphics; inherit CoreServices ImageIO CoreGraphics;
}; };
toolchain = callPackage ./toolchain.nix { toolchain = buildPackages.callPackage ./toolchain.nix {
inherit cctools bootstrap_cmds toolchainName xcbuild binutils stdenv; inherit toolchainName;
}; };
sdk = callPackage ./sdk.nix { sdk = buildPackages.callPackage ./sdk.nix {
inherit toolchainName sdkName xcbuild; inherit toolchainName sdkName;
}; };
platform = callPackage ./platform.nix { platform = buildPackages.callPackage ./platform.nix {
inherit sdk platformName xcbuild; inherit sdk platformName;
}; };
xcconfig = writeText "nix.xcconfig" '' xcconfig = writeText "nix.xcconfig" ''
@ -32,7 +32,7 @@ in
stdenv.mkDerivation { stdenv.mkDerivation {
name = "xcbuild-wrapper-${xcbuild.version}"; name = "xcbuild-wrapper-${xcbuild.version}";
buildInputs = [ xcbuild makeWrapper ]; nativeBuildInputs = [ makeWrapper ];
setupHook = ./setup-hook.sh; setupHook = ./setup-hook.sh;
@ -40,22 +40,21 @@ stdenv.mkDerivation {
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
cd $out/bin/
for file in ${xcbuild}/bin/*; do for file in ${xcbuild}/bin/*; do
ln -s $file ln -s $file $out/bin
done done
mkdir $out/usr mkdir -p $out/usr
ln -s $out/bin $out/usr/bin ln -s $out/bin $out/usr/bin
mkdir -p $out/Library/Xcode/ mkdir -p $out/Library/Xcode
ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
mkdir -p $out/Platforms/ mkdir -p $out/Platforms
ln -s ${platform} $out/Platforms/nixpkgs.platform ln -s ${platform} $out/Platforms/nixpkgs.platform
mkdir -p $out/Toolchains/ mkdir -p $out/Toolchains
ln -s ${toolchain} $out/Toolchains/nixpkgs.xctoolchain ln -s ${toolchain} $out/Toolchains/nixpkgs.xctoolchain
wrapProgram $out/bin/xcodebuild \ wrapProgram $out/bin/xcodebuild \

View File

@ -1,5 +1,5 @@
{ lib, fetchurl, stdenv, libgcrypt, libevent, libidn, gnutls { lib, fetchurl, stdenv, libgcrypt, libevent, libidn, gnutls
, libxml2, zlib, guile, texinfo, cppunit, psmisc }: , libxml2, zlib, guile, texinfo, cppunit, killall }:
let version = "0.11"; in let version = "0.11"; in
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
# On GNU/Linux the `test_suite' process sometimes stays around, so # On GNU/Linux the `test_suite' process sometimes stays around, so
# forcefully terminate it. # forcefully terminate it.
postCheck = lib.optionalString stdenv.isLinux "${psmisc}/bin/killall test_suite || true"; postCheck = "${killall}/bin/killall test_suite || true";
meta = { meta = {
description = "GNU MyServer, a powerful and easy to configure web server"; description = "GNU MyServer, a powerful and easy to configure web server";

View File

@ -1,5 +1,6 @@
{ stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs, fetchgit, fio, gawk, keyutils { stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs
, lib, libaio, libcap, libtool, libuuid, libxfs, lvm2, openssl, perl, procps, psmisc, quota, su , fetchgit, fio, gawk, keyutils, killall, lib, libaio, libcap, libtool
, libuuid, libxfs, lvm2, openssl, perl, procps, quota, su
, time, utillinux, which, writeScript, xfsprogs }: , time, utillinux, which, writeScript, xfsprogs }:
stdenv.mkDerivation { stdenv.mkDerivation {
@ -90,7 +91,9 @@ stdenv.mkDerivation {
ln -s @out@/lib/xfstests/$f $f ln -s @out@/lib/xfstests/$f $f
done done
export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils libcap lvm2 perl procps psmisc quota utillinux which xfsprogs]}:$PATH export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
libcap lvm2 perl procps killall quota
utillinux which xfsprogs]}:$PATH
exec ./check "$@" exec ./check "$@"
''; '';

View File

@ -8576,8 +8576,7 @@ with pkgs;
xcbuild = callPackage ../development/tools/xcbuild/wrapper.nix { xcbuild = callPackage ../development/tools/xcbuild/wrapper.nix {
inherit (darwin.apple_sdk.frameworks) CoreServices CoreGraphics ImageIO; inherit (darwin.apple_sdk.frameworks) CoreServices CoreGraphics ImageIO;
inherit (darwin) cctools bootstrap_cmds binutils; stdenv = buildPackages.clangStdenv;
stdenv = clangStdenv;
}; };
xmlindent = callPackage ../development/web/xmlindent {}; xmlindent = callPackage ../development/web/xmlindent {};
@ -21742,7 +21741,7 @@ with pkgs;
unixtools = recurseIntoAttrs (callPackages ./unix-tools.nix { }); unixtools = recurseIntoAttrs (callPackages ./unix-tools.nix { });
inherit (unixtools) hexdump ps logger eject umount inherit (unixtools) hexdump ps logger eject umount
mount wall hostname more sysctl getconf mount wall hostname more sysctl getconf
getent locale; getent locale killall;
fts = if hostPlatform.isMusl then netbsd.fts else null; fts = if hostPlatform.isMusl then netbsd.fts else null;

View File

@ -81,6 +81,10 @@ let
linux = pkgs.nettools; linux = pkgs.nettools;
darwin = pkgs.darwin.network_cmds; darwin = pkgs.darwin.network_cmds;
}; };
killall = {
linux = pkgs.psmisc;
darwin = pkgs.darwin.shell_cmds;
};
locale = { locale = {
linux = pkgs.glibc; linux = pkgs.glibc;
darwin = pkgs.netbsd.locale; darwin = pkgs.netbsd.locale;