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