[Scons-users] Bug: Copy(..., symlinks=False) of symlinks with relative target pathnames

William Blevins wblevins001 at gmail.com
Mon Mar 23 19:52:28 EDT 2015


Nathan,

I think I understand what you are talking about.  Though this patch cannot
solve that problem since you are recursively calling copy_func with
symlink=True in the second pass thus copying the symlink itself.

I will make a patch for this and a test case.

V/R,
William



On Mon, Mar 23, 2015 at 12:17 PM, Nathan Kennedy <nkennedy at grammatech.com>
wrote:

> Issue 2395 added a "symlinks" parameter to SCons.Defaults.Copy to copy
> symlinks rather than their target, defaulting to true. When using
> symlinks=False to copy the symlink's target, if the target has a relative
> path (e.g. "../../libfoo.so"), the path is resolved relative to the current
> working directory rather than the symlink's directory. If these differ, the
> copy will either fail or copy the wrong file.
>
> We fixed this with the patch below.
>
> Best,
> Nathan
>
> --- src/engine/SCons/Defaults.py.orig    2015-03-23 12:10:51.983117000
> -0400
> +++ src/engine/SCons/Defaults.py 2015-03-23 12:11:54.057539000 -0400
> @@ -35,10 +35,11 @@
>
>  __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
>
>
>  import os
> +import os.path
>  import errno
>  import shutil
>  import stat
>  import time
>  import sys
> @@ -200,11 +201,11 @@
>      elif os.path.islink(src):
>          linkto = os.readlink(src)
>          if symlinks:
>              return os.symlink(linkto, dest)
>          else:
> -            return copy_func(dest, linkto, symlinks)
> +            return copy_func(dest, os.path.realpath(src))
>      elif os.path.isfile(src):
>          return shutil.copy2(src, dest)
>      else:
>          return shutil.copytree(src, dest, symlinks)
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20150323/086c6d67/attachment.html>


More information about the Scons-users mailing list