[Scons-dev] symlink examples for next Parts drop
William Deegan
bill at baddogconsulting.com
Mon Nov 26 20:49:25 EST 2012
Jason,
How does it handle symlinking a directory?
-Bill
On 11/26/2012 03:04 PM, Kenny, Jason L wrote:
>
> Hi guys,
>
> Been busy trying to fix up stuff on my end. As I said I had some code
> to help deal with symlinks, that I think will be useful for SCons.
>
> In this mail I will try to describe what we have and provide some
> simple examples of use it.. for possible review on how we might
> improve it for getting it into SCons.
>
> This is basically from my current draft version of the release notes
> for 0.10.2 drop of Parts I hope to make this week.
>
> *Symlinks*
>
> Symlinks have been refactored and made to work much better. Parts add
> a class of SCons.Node.FS.FileSymbolicLink to handle symbolic links in
> the Scons node tree, which is subclassed from SCons.Node.FS.File. This
> node is not used directly by the user, but is instead returned by some
> factory functions in the environment much like File, Dir, Alias, and
> Value objects are. There are two API function for creating symlinks,
> and one for easy handling of existing links on the system.
>
> To create a symbolic link use the function
>
> *env.SymLink(name, linkto,**kw)*
>
> *name*is the name of the link, like any normal File() would be created
> in Scons
>
> *linkto*is the File or string object for the link to point to.
>
> **kw is optional set of value to override or add the environment used
> to build the symlink
>
> To resolve a exist link on disk or to help define a full list of node
> from a chained call of Symlink() function use the function
>
> *env.ResolveSymLinkChain(link)*
>
> *Link*is the string to an exist symbolic link on disk or
> SCons.Node.FS.FileSymbolicLink node.
>
> */Example:/*
>
> Copy over an existing symlink and the files it points to, into the
> InstallLIb() location
>
> env.InstallLib(
>
> env.ResolveSymLinkChain(
>
> "/usr/lib/libc.so"
>
> ) # will return a list such as [/usr/lib/libc.so, /usr/lib/libc.so.6]
>
> )
>
> Compile a shared library and make some symlinks to it.
>
> */Without ResolveSymLinkChain():/*
>
> # create the SO lib ( note.. You may need add certain flags such as
> *-Wl,-soname,libsymlink.so.1.0* depending on your system)
>
> targets = env.SharedLibrary('symlinks', source = 'symlinks.c',
> SHLIBSUFFIX='.so.1.0')
>
> #create symlinks based off return target list
>
> targets += env.SymLink('${SHLIBPREFIX}symlinks${SHLIBSUFFIX}',
> linkto=targets[0], SHLIBSUFFIX='.so.1')
>
> targets += env.SymLink('${SHLIBPREFIX}symlinks${SHLIBSUFFIX}',
> linkto=targets[-1], SHLIBSUFFIX='.so')
>
> # install values to the install sandbox libs directory
>
> env.InstallLib(targets)
>
> */With ResolveSymLinkChain():/*
>
> targets = env.SharedLibrary('symlinks2',source =
> 'symlinks2.c',SHLIBSUFFIX='.so.1.0' )
>
> # in this case ResolveSymLinkChain return the chain of node pointed by
> the libsymlinks2.so node
>
> env.InstallLib(
>
> env.ResolveSymLinkChain(
>
> env.SymLink(
>
> 'libsymlinks2.so',
>
> env.SymLink(
>
> 'libsymlinks2.so.1',
>
> targets[0]
>
> )
>
> )
>
> )
>
> )
>
> The above examples should look a little like what was being worked on
> now to get symlink versioning working in SCons. I think a small change
> to the builder for posix like systems to process a
>
> env.SharedLibrary(....,GNU_VERSIONING=Version("1.2.3")) # will do
> gnu/soname style versioning generation of the binary and symlinks..
> adds needed flags. Don't get stuck on GNU_VERSIONING, as a name.. I
> only suggest it as I don't know what a better name is.
>
> might be a nice way to go in Parts depending on what SCons does in the
> intern.
>
> Please let me know any thoughts or question you have, so I can clarify
> any points of what we have. Also to be clear this works on windows,
> Linux ( ie host platform = posix), Mac, I believe Solaris was tested
> as well.
>
> Hopefully this is a good reduce API that would be reasonable to add to
> Parts. I should not I am not sure if adding a Dir or Entry version of
> the symlink node will be needed or useful. The main thought is that
> all symlinks are files, but the items they point to may not be a
> file.. so having different forms may be useful for saying something
> about we would point to in the end.. ie this better be a file, or this
> better be a directory. Likewise some systems make a small difference
> in command or API call when you make a symlink to a directory vs a file.
>
> Jason
>
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20121126/27ec0d30/attachment.html>
More information about the Scons-dev
mailing list