summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Sheplyakov <asheplyakov@altlinux.org>2021-07-19 14:07:48 +0400
committerAlexey Sheplyakov <asheplyakov@altlinux.org>2021-07-26 14:01:40 +0400
commit67269a1e771f4f64d8154ed791115b26e14e9cc8 (patch)
treedc8f8b59b3787a6f846de4fca96df562a93d16ec
parent1b045f371d9c4f6ba44e79185a6de81586b024ef (diff)
downloaddistcc-git-67269a1e771f4f64d8154ed791115b26e14e9cc8.tar.gz
update-distcc-symlinks works on rpm-based distros out of the box now
On ARM64 rpm-based distros GCC bits are installed into `/usr/lib64/gcc` and `/usr/libexec/gcc` directories. However `update-distcc-symlinks` does not scan these directories. As a result `update-distcc-symlinks` does NOT create symlinks to * versioned GCC binaries (`gcc-8`, `gcc-10`, etc) * fully qualified GCC binaries (`aarch64-linux-gnu-gcc-8`, etc) With this patch `update-distcc-symlinks` correctly work on such systems. Closes: #435
-rwxr-xr-xupdate-distcc-symlinks.py75
1 files changed, 39 insertions, 36 deletions
diff --git a/update-distcc-symlinks.py b/update-distcc-symlinks.py
index 3344335..71a5188 100755
--- a/update-distcc-symlinks.py
+++ b/update-distcc-symlinks.py
@@ -7,8 +7,11 @@ import stat
import re
distcc_dir = "@prefix@/lib/distcc"
-gcc_dir = "/usr/lib/gcc"
-gcccross_dir = "/usr/lib/gcc-cross"
+GCC_LIBEXEC_DIRS = (
+ '/usr/lib/gcc', # Debian native GCC compilers
+ '/usr/lib/gcc-cross', # Debian GCC cross-compilers
+ '/usr/libexec/gcc', # rpm-based distros
+)
old_symlinks = set()
new_symlinks = set()
standard_names = ["cc", "c++", "c89", "c99"]
@@ -18,53 +21,56 @@ if not os.access(distcc_dir, os.X_OK):
def consider(name):
- if os.access("/usr/bin/%(name)s" % vars(), os.X_OK):
+ if os.access(f"/usr/bin/{name}", os.X_OK):
new_symlinks.add(name)
print(name)
-def consider_gcc(prefix, suffix):
- consider("%(prefix)sgcc%(suffix)s" % vars())
- consider("%(prefix)sg++%(suffix)s" % vars())
+def consider_gcc(prefix, suffix=""):
+ consider(f"{prefix}gcc{suffix}")
+ consider(f"{prefix}g++{suffix}")
def consider_clang(suffix):
- consider("clang%(suffix)s" % vars())
- consider("clang++%(suffix)s" % vars())
+ consider(f"clang{suffix}")
+ consider(f"clang++{suffix}")
for x in standard_names:
consider(x)
-consider_gcc("", "")
-consider_gcc("c89-", "")
-consider_gcc("c99-", "")
-try:
- for gnu_host in os.listdir(gcc_dir):
- consider_gcc("%(gnu_host)s-" % vars(), "")
- for version in os.listdir(gcc_dir + "/" + gnu_host):
- consider_gcc("", "-%(version)s" % vars())
- consider_gcc("%(gnu_host)s-" % vars(), "-%(version)s" % vars())
-except FileNotFoundError:
- pass
-except NotADirectoryError:
- pass
-try:
- for gnu_host in os.listdir(gcccross_dir):
- consider_gcc("%(gnu_host)s-" % vars(), "")
- for version in os.listdir(gcccross_dir + "/" + gnu_host):
- consider_gcc("", "-%(version)s" % vars())
- consider_gcc("%(gnu_host)s-" % vars(), "-%(version)s" % vars())
-except FileNotFoundError:
- pass
-except NotADirectoryError:
- pass
+consider_gcc("")
+consider_gcc("c89-")
+consider_gcc("c99-")
+
+
+def sloppy_listdir(thedir):
+ try:
+ return os.listdir(thedir)
+ except FileNotFoundError:
+ pass
+ except NotADirectoryError:
+ pass
+ return []
+
+
+def scan_gcc_libexec(gcc_dir):
+ for gnu_host in sloppy_listdir(gcc_dir):
+ consider_gcc(f"{gnu_host}-")
+ for version in sloppy_listdir(gcc_dir + "/" + gnu_host):
+ consider_gcc("", f"-{version}")
+ consider_gcc(f"{gnu_host}-", f"-{version}")
+
+
+for gcc_dir in GCC_LIBEXEC_DIRS:
+ scan_gcc_libexec(gcc_dir)
+
consider_clang("")
for ent in os.listdir("/usr/lib"):
if ent.startswith("llvm-"):
version = ent.split("-")[1]
- consider_clang("-%(version)s" % vars())
+ consider_clang(f"-{version}")
for name in os.listdir(distcc_dir):
mode = os.lstat(distcc_dir + "/" + name).st_mode
@@ -80,7 +86,4 @@ for link in old_symlinks:
for link in new_symlinks:
if link not in old_symlinks:
- if os.access("/usr/bin/distcc", os.X_OK):
- os.symlink("../../bin/distcc", distcc_dir + "/" + link)
- else:
- os.symlink("../../local/bin/distcc", distcc_dir + "/" + link)
+ os.symlink("../../bin/distcc", distcc_dir + "/" + link)