On 14/12/2011, Alain Frisch <al...@frisch.fr> wrote:
> On 12/14/2011 04:49 PM, Adrien wrote:
>> But windows actually has symlinks. Kind of. Starting with Vista and the
>> corresponding NTFS version. But by default you need to be an administrator
>> to use them, you can only create a limited number of symlink in a given
>> folder afaiu, some functions work on the symlink and some on the target
>> (stat()/lstat()). They have a number of limitations and last time I looked
>> at them, I found them to be mostly unusable because of their limitations.
>>
>> They're one quite big issue I've had for packages on windows: if I
>> cross-compile a library from Linux, and make a tarball which has a number
>> of
>> symlink in it. What to do when untarring on windows? Try to create
>> symlinks?
>> Use hardlinks when possible? Copy the file's contents? Something else?
>
> Even if Windows supports kinds of symlink internally, this is a rarely
> used/exposed features. I think it's a bad idea to rely on them for a
> packaging system (targeted to "native" Windows users). They would look
> "foreign" to users, and we should expect a lot of bad support from
> existing tools.

After some discussion and pondering, I think that symlinks won't be stored
as-is in the package but will instead be created during some sort of
post-install hook (yypkg doesn't work that way but you get the idea). Then,
if the OS or FS doesn't handle symlinks in an acceptable way, I think the
following fallbacks could be used:
1- if symlink's target is a file in the symlink's folder: use a hardlink
2- if symlink's target is a file in another folder: cp the file
3- if symlink's target is a folder: try to use symlinks
4- if symlink's target is a folder and 3- is impossible, cp -r the folder

3- is based on the optimistic but realistic assumption that there aren't
many symlinks to folders in a given folder, therefore avoiding the limit of
31 symlinks in a given folder on windows.

I've used the following commands to find how many symlinks to directories I
had in a given folder (hope it's right) (on a full slackware):
find -P / -mount -type l -xtype d | xargs -L 1 -x dirname | sort |
uniq -c | sort -n

I got: /usr/man: 11, /etc: 9, /usr/doc/gimp-2.6.11: 8, /usr/include: 7,
/usr/X11R6: 7, /media: 7, /usr/lib64/X11: 6, /usr/lib64: 6, ..., /usr/doc:
5, /usr/ 5...

That shows the option 3- is quite likely to succeed. Also, note that
slackware adds some symlinks to do things the way it wants (it predates
Linux' standard fs hierachy ;-) ).

I'd be interested in any comments. Thanks.

Regards,
Adrien Nader

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to