It seems that commit bc5c54c987f548505a3877e8a0e460abe0b2a081 introduced some linux specific things...
hsc2hs Touch.hsc Touch.hsc: In function ‘main’: Touch.hsc:46: error: ‘UTIME_OMIT’ undeclared (first use in this function) Touch.hsc:46: error: (Each undeclared identifier is reported only once Touch.hsc:46: error: for each function it appears in.) Touch.hsc:48: error: ‘UTIME_NOW’ undeclared (first use in this function) Touch.hsc:67: error: ‘AT_FDCWD’ undeclared (first use in this function) Touch.hsc:68: error: ‘AT_SYMLINK_NOFOLLOW’ undeclared (first use in this function) compiling Touch_hsc_make.c failed command was: /usr/bin/gcc -c -m32 -I/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.3/include/ Touch_hsc_make.c -o Touch_hsc_make.o make: *** [Touch.hs] Error 1
I dug around the OSX documentation and fcntl.h header file and it seems that UTIME_OMIT, UTIME_NOW, AT_FDCWD and AT_SYMLINK_NOFOLLOW aren't defined (at least on OSX). I suspect the BSD's in general will have problems compiling git-annex.
Hmm.. is utimensat available at all?
I've committed an update that may convince at least some compilers to expose this newer POSIX stuff. I don't know if it will help, please let me know.
I'm leaving this bug open because this feature, however minor is not available on OSX and BSD.
I have added a partial implementation using lutimes(3), which should be available on the BSDs. However, it's ifdefed out due to a casting problem: The TimeSpec uses a CTime, while lutimes uses a CLong. These data types may be internally the same on some or all platforms, so if you want this feature you can try changing the "ifdef 0" in Touch.hsc to 1 and try it, see if "git annex add" mirrors file modification time in created symlinks, and let me know.
ok, pulling the latest master and building on OSX now does this...
changing the #if 0 to 1 gives this...
it seems that commit 6634b6a6b84a924f6f6059b5bea61f449d056eee has broken support for OSX.