Last active
January 8, 2025 05:49
-
-
Save WeZZard/4cc3c4f276d9498bd86e479978d6bc77 to your computer and use it in GitHub Desktop.
Changes to Homebrew distcc installation for being a compilation server.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Unit] | |
Description=Homebrew generated unit for distcc | |
[Install] | |
WantedBy=default.target | |
[Service] | |
Type=simple | |
ExecStart=/opt/homebrew/opt/distcc/bin/distccd --allow 192.168.50.0/23 --daemon --no-detach | |
Restart=always | |
WorkingDirectory=/opt/homebrew/opt/distcc |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<dict> | |
<key>KeepAlive</key> | |
<true/> | |
<key>Label</key> | |
<string>homebrew.mxcl.distcc</string> | |
<key>LimitLoadToSessionType</key> | |
<array> | |
<string>Aqua</string> | |
<string>Background</string> | |
<string>LoginWindow</string> | |
<string>StandardIO</string> | |
<string>System</string> | |
</array> | |
<key>ProgramArguments</key> | |
<array> | |
<string>/opt/homebrew/opt/distcc/bin/distccd</string> | |
<string>--allow</string> | |
<string>192.168.50.0/23</string> | |
<string>--daemon</string> | |
<string>--no-detach</string> | |
</array> | |
<key>RunAtLoad</key> | |
<true/> | |
<key>WorkingDirectory</key> | |
<string>/opt/homebrew/opt/distcc</string> | |
</dict> | |
</plist> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import subprocess, string, os, stat, re | |
current_path = os.path.abspath(__file__) | |
real_path = os.path.realpath(current_path) | |
script_dir = os.path.dirname(real_path) | |
brew_sandbox_root_dir = os.path.dirname(script_dir) | |
brew_sandbox_sbin_dir = os.path.join(brew_sandbox_root_dir, 'sbin') | |
brew_sandbox_lib_dir = os.path.join(brew_sandbox_root_dir, 'lib') | |
brew_sandbox_bin_dir = os.path.join(brew_sandbox_root_dir, 'bin') | |
brew_sandbox_cellar_llvm_dir = "/opt/homebrew/Cellar/llvm" | |
brew_sandbox_llvm_bin_dir = "/opt/homebrew/opt/llvm/bin" | |
distcc_dir = os.path.join(brew_sandbox_lib_dir, 'distcc') | |
distcc_exec = os.path.join(brew_sandbox_bin_dir, 'distcc') | |
gcc_dir = "/usr/lib/gcc" | |
gcccross_dir = "/usr/lib/gcc-cross" | |
old_symlinks = set() | |
new_symlinks = set() | |
standard_names = ["cc", "c++", "c89", "c99"] | |
if not os.access(distcc_dir, os.X_OK): | |
os.mkdir(distcc_dir) | |
def consider(name): | |
if os.access("/usr/bin/%(name)s" % vars(), 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_clang(suffix): | |
consider("clang%(suffix)s" % vars()) | |
consider("clang++%(suffix)s" % vars()) | |
def consider_clang_homebrew_(name): | |
llvm_bin = brew_sandbox_llvm_bin_dir | |
if os.access("%(llvm_bin)s/%(name)s" % vars(), os.X_OK): | |
new_symlinks.add(name) | |
print(name) | |
def consider_clang_homebrew(suffix): | |
consider_clang_homebrew_("clang%(suffix)s" % vars()) | |
consider_clang_homebrew_("clang++%(suffix)s" % vars()) | |
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_clang("") | |
for ent in os.listdir("/usr/lib"): | |
if ent.startswith("llvm-"): | |
version = ent.split("-")[1] | |
consider_clang("-%(version)s" % vars()) | |
if os.access(brew_sandbox_cellar_llvm_dir, os.X_OK): | |
consider_clang_homebrew("") | |
for ent in os.listdir(brew_sandbox_cellar_llvm_dir): | |
version = ent.split(".")[1] | |
consider_clang_homebrew("-%(version)s" % vars()) | |
for name in os.listdir(distcc_dir): | |
mode = os.lstat(distcc_dir + "/" + name).st_mode | |
if stat.S_ISLNK(mode): | |
if os.access(distcc_dir + "/" + name, os.X_OK): | |
old_symlinks.add(name) | |
else: | |
os.unlink(distcc_dir + "/" + name) | |
for link in old_symlinks: | |
if link not in new_symlinks: | |
os.unlink(distcc_dir + "/" + link) | |
for link in new_symlinks: | |
if link not in old_symlinks: | |
if os.access(distcc_exec, os.X_OK): | |
os.symlink("../../bin/distcc", distcc_dir + "/" + link) | |
else: | |
raise Exception("Homebrew install shall be able to access {}".format(distcc_exec)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment