unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob 243d1677556bd98c462e01441f9e5e5be31a6bc5 3200 bytes (raw)
name: gnu/packages/patches/clang-3.8-libc-search-path.patch 	 # note: path name is non-authoritative(*)

 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
 
Clang attempts to guess file names based on the OS and distro (yes!),
but unfortunately, that doesn't work for us.

This patch makes it easy to insert libc's $libdir so that Clang passes the
correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
the distro-specific stuff and removes the hard-coded FHS directory names
to make sure Clang also works on non-GuixSD systems.

This patch makes slight adjustments over "clang-libc-search-path.patch" for
changes in clang 3.8.

--- cfe-3.8.0.src/lib/Driver/ToolChains.cpp
+++ cfe-3.8.0.src/lib/Driver/ToolChains.cpp
@@ -3661,6 +3661,9 @@
                          GCCInstallation.getTriple().str() + "/bin")
                        .str());
 
+  // Comment out the distro-specific tweaks so that they don't bite when
+  // using Guix on a foreign distro.
+#if 0
   Distro Distro = DetectDistro(D, Arch);
 
   if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
@@ -3702,6 +3705,7 @@
 
   if (IsOpenSUSE(Distro))
     ExtraOpts.push_back("--enable-new-dtags");
+#endif
 
   // The selection of paths to try here is designed to match the patterns which
   // the GCC driver itself uses, as this is part of the GCC-compatible driver.
@@ -3817,6 +3821,10 @@
 
   addPathIfExists(D, SysRoot + "/lib", Paths);
   addPathIfExists(D, SysRoot + "/usr/lib", Paths);
+
+  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
+  // and friends can be found.
+  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
 }
 
 bool Linux::HasNativeLLVMSupport() const { return true; }
@@ -4026,6 +4034,34 @@
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
 
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
+
+  // Check for configure-time "extra" C include directories. When constructing a
+  // toolchain, @C_EXTRA_INCLUDE_DIRS@ should be replaced with something like a
+  // colon-separated string of the include dirs of libc and kernel headers.
+  //
+  // The reason why we use this mechanism instead of C_INCLUDE_DIRS above is
+  // because when a user supplies clang with --sysroot, the normal expectation
+  // is that clang will detect and add the proper $SYSROOT/$MULTIARCHINCL,
+  // $SYSROOT/include, and $SYSROOT/usr/include to its list of search paths.
+  // However, if C_INCLUDE_DIRS is not empty, this function will return early
+  // and not attempt to add the aforementioned search paths, which is not
+  // desirable.
+  //
+  // By adding our configure-time "extra" C include directories here, after
+  // we've added $SYSROOT/include and $SYSROOT/usr/include, we make sure that IF
+  // --sysroot is supplied on the command line, we pick up the expected search
+  // paths in the $SYSROOT, and that they come before our configure-time "extra"
+  // C include directories.
+  StringRef CExtraIncludeDirs("@C_EXTRA_INCLUDE_DIRS@");
+  if (CExtraIncludeDirs != "") {
+      SmallVector<StringRef, 5> dirs;
+      CExtraIncludeDirs.split(dirs, ":");
+      for (StringRef dir : dirs) {
+          StringRef Prefix =
+              llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : "";
+          addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
+      }
+  }
 }
 
 

debug log:

solving 243d167755 ...
found 243d167755 in https://yhetil.org/guix-patches/079E8E67-5A3F-4B08-AB9E-2880559C0570@carldong.me/ ||
	https://yhetil.org/guix-patches/20191125180144.1060289-1-contact@carldong.me/
found 0f7d0a4add in https://git.savannah.gnu.org/cgit/guix.git
preparing index
index prepared:
100644 0f7d0a4add439cd13481112bb3f1fc9a5bd58f8e	gnu/packages/patches/clang-3.8-libc-search-path.patch

applying [1/1] https://yhetil.org/guix-patches/079E8E67-5A3F-4B08-AB9E-2880559C0570@carldong.me/
diff --git a/gnu/packages/patches/clang-3.8-libc-search-path.patch b/gnu/packages/patches/clang-3.8-libc-search-path.patch
index 0f7d0a4add..243d167755 100644

1:53: trailing whitespace.
 
1:84: trailing whitespace.
 
1:85: trailing whitespace.
 
Checking patch gnu/packages/patches/clang-3.8-libc-search-path.patch...
1:84: new blank line at EOF.
+
Applied patch gnu/packages/patches/clang-3.8-libc-search-path.patch cleanly.
warning: 4 lines add whitespace errors.

skipping https://yhetil.org/guix-patches/20191125180144.1060289-1-contact@carldong.me/ for 243d167755
index at:
100644 243d1677556bd98c462e01441f9e5e5be31a6bc5	gnu/packages/patches/clang-3.8-libc-search-path.patch

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).