diff options
author | Ian Lynagh <igloo@earth.li> | 2011-12-02 16:55:28 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2011-12-02 16:55:28 +0000 |
commit | 2694bb74158bac7276cded2435bba8e889659f98 (patch) | |
tree | 67496c4d879a3589bda9329d7b63e7dcd2a979be /rules/build-dependencies.mk | |
parent | b2d3c5576050a69c26a546ba10726618a72d4b67 (diff) | |
download | haskell-2694bb74158bac7276cded2435bba8e889659f98.tar.gz |
Use touchy rather than touch when building on Windows
With Windows 7 in a vitrual box VM on OS X, some very odd things happen
with dates and time stamps when SSHing into cygwin. e.g. here the
"Change" time is in the past:
$ date; touch foo; stat foo
Fri Dec 2 16:58:07 GMTST 2011
File: `foo'
Size: 0 Blocks: 0 IO Block: 65536 regular
empty file
Device: 540aba0bh/1409989131d Inode: 562949953592977 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ian) Gid: ( 513/ None)
Access: 2011-12-02 16:58:07.414457900 +0000
Modify: 2011-12-02 16:58:07.414457900 +0000
Change: 2011-12-02 16:58:03.495141800 +0000
Birth: 2011-12-02 16:57:57.731469900 +0000
And if we copy such a file, then the copy is older (as determined by the
"Modify" time) than the original:
$ date; touch foo; stat foo; cp foo bar; stat bar
Fri Dec 2 16:59:10 GMTST 2011
File: `foo'
Size: 0 Blocks: 0 IO Block: 65536 regular
empty file
Device: 540aba0bh/1409989131d Inode: 1407374883725128 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ian) Gid: ( 513/ None)
Access: 2011-12-02 16:59:10.118457900 +0000
Modify: 2011-12-02 16:59:10.118457900 +0000
Change: 2011-12-02 16:59:06.189477700 +0000
Birth: 2011-12-02 16:57:57.731469900 +0000
File: `bar'
Size: 0 Blocks: 0 IO Block: 65536 regular
empty file
Device: 540aba0bh/1409989131d Inode: 281474976882512 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ian) Gid: ( 513/ None)
Access: 2011-12-02 16:59:06.394555800 +0000
Modify: 2011-12-02 16:59:06.394555800 +0000
Change: 2011-12-02 16:59:06.395532400 +0000
Birth: 2011-12-02 16:58:40.921899600 +0000
This means that make thinks that things are out of date when it
shouldn't, so reinvokes itself repeatedly until the MAKE_RESTARTS
infinite-recursion test triggers.
The touchy program, like most other programs, creates files with both
Modify and Change in the past, which is still a little odd, but is
consistent, so doesn't break make.
Diffstat (limited to 'rules/build-dependencies.mk')
-rw-r--r-- | rules/build-dependencies.mk | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk index c9c62cdcdc..6ab2edcde0 100644 --- a/rules/build-dependencies.mk +++ b/rules/build-dependencies.mk @@ -31,9 +31,9 @@ ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES" # indirectly) include the generated includes files. $$($1_$2_depfile_haskell) : $$(includes_H_CONFIG) $$(includes_H_PLATFORM) -$$($1_$2_depfile_haskell) : $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$($1_$2_HC_MK_DEPEND_DEP) | $$$$(dir $$$$@)/. +$$($1_$2_depfile_haskell) : $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$($1_$2_HC_MK_DEPEND_DEP) $$(TOUCH_DEP) | $$$$(dir $$$$@)/. $$(call removeFiles,$$@.tmp) - touch $$@.tmp + "$$(TOUCH_CMD)" $$@.tmp ifneq "$$($1_$2_HS_SRCS)" "" "$$($1_$2_HC_MK_DEPEND)" -M $$($1_$2_MKDEPENDHS_FLAGS) \ $$(filter-out -split-objs, $$($1_$2_v_ALL_HC_OPTS)) \ @@ -54,9 +54,9 @@ endif # includes files. $$($1_$2_depfile_c_asm) : $$(includes_H_CONFIG) $$(includes_H_PLATFORM) -$$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) | $$$$(dir $$$$@)/. +$$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) $$(TOUCH_DEP) | $$$$(dir $$$$@)/. $$(call removeFiles,$$@.tmp) - touch $$@.tmp + "$$(TOUCH_CMD)" $$@.tmp ifneq "$$(strip $$($1_$2_C_FILES_DEPS)$$($1_$2_S_FILES))" "" # We ought to actually do this for each way in $$($1_$2_WAYS), but then # it takes a long time to make the C deps for the RTS (30 seconds rather |