summaryrefslogtreecommitdiffstats
path: root/pkgs/os-specific/darwin
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2016-11-14 13:30:28 -0800
committerJohn Wiegley <johnw@newartisans.com>2016-11-14 13:30:28 -0800
commitaa23309a39794cd769d473cc8616dc96b872e3f0 (patch)
tree55efdd9baccef7e1d720e0326946860ec4d07709 /pkgs/os-specific/darwin
parentad7d59c59faa359093ec7741688e7c57574d0608 (diff)
Add a patch for cctools to work with Xcode 8
Diffstat (limited to 'pkgs/os-specific/darwin')
-rw-r--r--pkgs/os-specific/darwin/cctools/ld-tbd-v2.patch98
-rw-r--r--pkgs/os-specific/darwin/cctools/port.nix1
2 files changed, 99 insertions, 0 deletions
diff --git a/pkgs/os-specific/darwin/cctools/ld-tbd-v2.patch b/pkgs/os-specific/darwin/cctools/ld-tbd-v2.patch
new file mode 100644
index 000000000000..9aae2be1d033
--- /dev/null
+++ b/pkgs/os-specific/darwin/cctools/ld-tbd-v2.patch
@@ -0,0 +1,98 @@
+diff --git a/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp b/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
+index 09c0e12..ac6b085 100644
+--- a/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
++++ b/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
+@@ -187,6 +187,7 @@ struct DynamicLibrary {
+ ld::File::ObjcConstraint _objcConstraint;
+ Options::Platform _platform;
+ std::vector<Token> _allowedClients;
++ std::vector<Token> _allowableClients;
+ std::vector<Token> _reexportedLibraries;
+ std::vector<Token> _symbols;
+ std::vector<Token> _classes;
+@@ -246,6 +247,14 @@ class TBDFile {
+ });
+ }
+
++ void parseAllowableClients(DynamicLibrary& lib) {
++ if ( !hasOptionalToken("allowable-clients") )
++ return;
++ parseFlowSequence([&](Token name) {
++ lib._allowableClients.emplace_back(name);
++ });
++ }
++
+ void parseReexportedDylibs(DynamicLibrary& lib) {
+ if ( !hasOptionalToken("re-exports") )
+ return;
+@@ -306,6 +315,21 @@ class TBDFile {
+ return false;
+ }
+
++ void skipUUIDs(DynamicLibrary& lib) {
++ expectToken("uuids");
++ while ( true ) {
++ auto token = next();
++ if ( token == "]" )
++ break;
++ }
++ }
++
++ void skipParentUmbrella(DynamicLibrary& lib) {
++ if (!hasOptionalToken("parent-umbrella"))
++ return;
++ next();
++ }
++
+ void parsePlatform(DynamicLibrary& lib) {
+ expectToken("platform");
+
+@@ -410,6 +434,7 @@ class TBDFile {
+ }
+
+ parseAllowedClients(lib);
++ parseAllowableClients(lib);
+ parseReexportedDylibs(lib);
+ parseSymbols(lib);
+ if ( !hasOptionalToken("-") )
+@@ -455,17 +480,21 @@ class TBDFile {
+ return result.front();
+ }
+
+- void parseDocument(DynamicLibrary& lib, std::string &requestedArchName) {
++ void parseDocument(DynamicLibrary& lib, std::string &requestedArchName, bool isTbdV2) {
+ auto selectedArchName = parseAndSelectArchitecture(requestedArchName);
+ if (selectedArchName.empty())
+ throwf("invalid arch");
+
++ if(isTbdV2)
++ skipUUIDs(lib);
+ parsePlatform(lib);
+ parseInstallName(lib);
+ parseCurrentVersion(lib);
+ parseCompatibilityVersion(lib);
+ parseSwiftVersion(lib);
+ parseObjCConstraint(lib);
++ if(isTbdV2)
++ skipParentUmbrella(lib);
+ parseExportsBlock(lib, selectedArchName);
+ }
+
+@@ -476,7 +505,8 @@ public:
+ _tokenizer.reset();
+ DynamicLibrary lib;
+ expectToken("---");
+- parseDocument(lib, requestedArchName);
++ auto isTbdV2 = hasOptionalToken("!tapi-tbd-v2");
++ parseDocument(lib, requestedArchName, isTbdV2);
+ expectToken("...");
+ return lib;
+ }
+@@ -486,6 +516,7 @@ public:
+ auto token = next();
+ if ( token != "---" )
+ return false;
++ hasOptionalToken("!tapi-tbd-v2");
+ return !parseAndSelectArchitecture(requestedArchName).empty();
+ }
+
diff --git a/pkgs/os-specific/darwin/cctools/port.nix b/pkgs/os-specific/darwin/cctools/port.nix
index 2f13277d70c7..41fb090710cb 100644
--- a/pkgs/os-specific/darwin/cctools/port.nix
+++ b/pkgs/os-specific/darwin/cctools/port.nix
@@ -25,6 +25,7 @@ let
] ++ stdenv.lib.optionals stdenv.isDarwin [
# See https://github.com/tpoechtrager/cctools-port/issues/24. Remove when that's fixed.
./undo-unknown-triple.patch
+ ./ld-tbd-v2.patch
];
enableParallelBuilding = true;