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

William Blevins wblevins001 at gmail.com
Mon Mar 23 22:26:04 EDT 2015


Nathan,

Pull request created:
https://bitbucket.org/scons/scons/pull-request/227/issue-2395-symlink-support-hotfix/diff

Sorry about that,
William

On Mon, Mar 23, 2015 at 8:52 PM, William Blevins <wblevins001 at gmail.com>
wrote:

> Nathan,
>
> I was able to reproduce.  I will submit the pull request soon for review.
>
> V/R,
> William
>
> On Mon, Mar 23, 2015 at 8:24 PM, William Blevins <wblevins001 at gmail.com>
> wrote:
>
>> Nathan,
>>
>> Can you give me a snippet of code for the test case?  Under what
>> condition does this happen?  Are you manipulating the SCons CWD?
>>
>> V/R,
>> William
>>
>> On Mon, Mar 23, 2015 at 7:59 PM, William Blevins <wblevins001 at gmail.com>
>> wrote:
>>
>>> Nathan,
>>>
>>> Nvm.  I reread the code, and that makes perfect sense.  It's not a link
>>> anymore :)
>>>
>>> V/R,
>>> William
>>>
>>> On Mon, Mar 23, 2015 at 7:52 PM, William Blevins <wblevins001 at gmail.com>
>>> wrote:
>>>
>>>> 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/a0a797bc/attachment.html>


More information about the Scons-users mailing list