36 lines
933 B
Python
36 lines
933 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
destdir = os.environ.get('DESTDIR')
|
||
|
source = sys.argv[1]
|
||
|
target = sys.argv[2]
|
||
|
|
||
|
def prepend_destdir(path):
|
||
|
if destdir is not None:
|
||
|
if os.path.isabs(path):
|
||
|
return os.path.join(destdir, path[1:])
|
||
|
else:
|
||
|
return os.path.join(destdir, path)
|
||
|
else:
|
||
|
return path
|
||
|
|
||
|
def call_symlink(src, dst):
|
||
|
try:
|
||
|
os.remove(dst)
|
||
|
except:
|
||
|
pass
|
||
|
os.symlink(src, dst)
|
||
|
|
||
|
os.makedirs(os.path.dirname(prepend_destdir(target)), exist_ok=True)
|
||
|
if os.path.dirname(source) == '.':
|
||
|
destdir_target = prepend_destdir(target)
|
||
|
call_symlink(source, destdir_target)
|
||
|
else:
|
||
|
destdir_source = prepend_destdir(source)
|
||
|
destdir_target = prepend_destdir(target)
|
||
|
destdir_target_dir = os.path.dirname(destdir_target)
|
||
|
relative_source = os.path.relpath(destdir_source, destdir_target_dir)
|
||
|
call_symlink(relative_source, destdir_target)
|