diff options
-rw-r--r-- | build_scripts/main.py | 7 | ||||
-rw-r--r-- | build_scripts/utils.py | 10 |
2 files changed, 15 insertions, 2 deletions
diff --git a/build_scripts/main.py b/build_scripts/main.py index a98a254e0..eb1a12ac2 100644 --- a/build_scripts/main.py +++ b/build_scripts/main.py @@ -1211,7 +1211,12 @@ class pyside_build(_build): 'pyside_package')) if os.path.exists(clang_lib_path): log.info('Copying libclang shared library to the package folder.') - copyfile(clang_lib_path, destination_dir) + basename = os.path.basename(clang_lib_path) + destination_path = os.path.join(destination_dir, basename) + + # Need to modify permissions in case file is not writable + # (a reinstall would cause a permission denied error). + copyfile(clang_lib_path, destination_path, make_writable_by_owner=True) else: raise RuntimeError("Error copying libclang library " "from {} to {}. ".format( diff --git a/build_scripts/utils.py b/build_scripts/utils.py index db95df8a8..af40916b7 100644 --- a/build_scripts/utils.py +++ b/build_scripts/utils.py @@ -39,6 +39,7 @@ import sys import os +import stat import re import stat import errno @@ -274,7 +275,8 @@ def init_msvc_env(platform_arch, build_type): log.info("Done initializing MSVC env") -def copyfile(src, dst, force=True, vars=None, force_copy_symlink=False): +def copyfile(src, dst, force=True, vars=None, force_copy_symlink=False, + make_writable_by_owner=False): if vars is not None: src = src.format(**vars) dst = dst.format(**vars) @@ -287,6 +289,9 @@ def copyfile(src, dst, force=True, vars=None, force_copy_symlink=False): if not os.path.islink(src) or force_copy_symlink: log.info("Copying file {} to {}.".format(src, dst)) shutil.copy2(src, dst) + if make_writable_by_owner: + make_file_writable_by_owner(dst) + else: linkTargetPath = os.path.realpath(src) if os.path.dirname(linkTargetPath) == os.path.dirname(src): @@ -400,6 +405,9 @@ def copydir(src, dst, filter=None, ignore=None, force=True, recursive=True, raise EnvironmentError(errors) return results +def make_file_writable_by_owner(path): + current_permissions = stat.S_IMODE(os.lstat(path).st_mode) + os.chmod(path, current_permissions | stat.S_IWUSR) def rmtree(dirname): def handleRemoveReadonly(func, path, exc): |