From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 Date: Fri, 7 Jan 2011 11:13:42 +0200 Message-ID: From: Ciprian Dorin Craciun To: 9fans@9fans.net Content-Type: text/plain; charset=UTF-8 Subject: [9fans] mk (from plan9ports) modification time resolution issue? Topicbox-Message-UUID: 90e29176-ead6-11e9-9d60-3106f5b1d025 Hello all! I've played today with mk (from plan9ports), and I thin I've stumbled upon the following issue: if both the build of a prerequisite and the target itself is less than a second (the same second), then mk believes it must remake the target when invoked a second time. See below as each time I rerun mk it rebuilds again one less target... I believe this is from the fact that mk uses as a time resolution seconds (as provided for example by `utime`) and not finer grained resolution (as provided for example by `utimes`). Now my question is: I understand that mk must be portable and have as few operating-system dependent code, but wouldn't it be better to: * either implement the usage of `utimens` in plan9ports; * or use `<=` as a comparison instead of `<`; Thanks, Ciprian. ~~~~ # this time is ok to build targets $ touch ./vbs.scm $ mk -f ./make.mk -e all ./.outputs/vbs.scm(1294390872) < ./vbs.scm(1294391133) cp -T -- ./vbs.scm ./.outputs/vbs.scm ./.outputs/vbs.c(1294390872) < ./.outputs/vbs.scm(1294391151) ( cd ./.outputs && csc -t -J -o ./vbs.c ./vbs.scm ; ) ./.outputs/vbs.o(1294390872) < ./.outputs/vbs.c(1294391151) gcc -c -o ./.outputs/vbs.o ./.outputs/vbs.c ./.outputs/vbs.elf(1294390872) < ./.outputs/vbs.o(1294391151) gcc -o ./.outputs/vbs.elf -lchicken ./.outputs/vbs.o ./.outputs/vbs-app.o ./.outputs/vbs-context.o ./.outputs/vbs-environment.o ./.outputs/vbs-mk-builder.o ./.outputs/vbs-transcript.o ./.outputs/vbs-fs-tools.o ./.outputs/environments.o ~~~~ # starting from now we just rebuild targets because of the resolution $ mk -f ./make.mk -e all ./.outputs/vbs.c(1294391151) < ./.outputs/vbs.scm(1294391151) ( cd ./.outputs && csc -t -J -o ./vbs.c ./vbs.scm ; ) ./.outputs/vbs.o(1294391151) < ./.outputs/vbs.c(1294391175) gcc -c -o ./.outputs/vbs.o ./.outputs/vbs.c ./.outputs/vbs.elf(1294391151) < ./.outputs/vbs.o(1294391175) gcc -o ./.outputs/vbs.elf -lchicken ./.outputs/vbs.o ./.outputs/vbs-app.o ./.outputs/vbs-context.o ./.outputs/vbs-environment.o ./.outputs/vbs-mk-builder.o ./.outputs/vbs-transcript.o ./.outputs/vbs-fs-tools.o ./.outputs/environments.o ~~~~ $ mk -f ./make.mk -e all ./.outputs/vbs.o(1294391175) < ./.outputs/vbs.c(1294391175) gcc -c -o ./.outputs/vbs.o ./.outputs/vbs.c ./.outputs/vbs.elf(1294391175) < ./.outputs/vbs.o(1294391184) gcc -o ./.outputs/vbs.elf -lchicken ./.outputs/vbs.o ./.outputs/vbs-app.o ./.outputs/vbs-context.o ./.outputs/vbs-environment.o ./.outputs/vbs-mk-builder.o ./.outputs/vbs-transcript.o ./.outputs/vbs-fs-tools.o ./.outputs/environments.o ~~~~ $ mk -f ./make.mk -e all ./.outputs/vbs.elf(1294391184) < ./.outputs/vbs.o(1294391184) gcc -o ./.outputs/vbs.elf -lchicken ./.outputs/vbs.o ./.outputs/vbs-app.o ./.outputs/vbs-context.o ./.outputs/vbs-environment.o ./.outputs/vbs-mk-builder.o ./.outputs/vbs-transcript.o ./.outputs/vbs-fs-tools.o ./.outputs/environments.o ~~~~ $ mk -f ./make.mk -e all mk: 'all' is up to date ~~~~