Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

We've been using memoize to build stuff for a while now, but we needed something that worked under Windows too. So here's our "fabricate" build tool. It's BSD licensed -- enjoy!


Does it scan your entire filesystem for atimes so as not to miss the .h files over in /usr/include, and if not, how does it know which directories need scanning?


No, it defaults to recursively scanning the current directory, but you can easily override this if you want, eg:

    setup(dirs=['.', '../lib'])


Is there a way to override it to just use strace?


Sure is. This will do it:

    setup(runner='strace_runner')


Neat! Thanks!


I don't get it. Does it intercept file accesses to determine the dependencies? Looks like magic.


Yes, via access times and strace: "When this build stage ran, it checked these files, so remember them as dependencies." Not magic at all, and should automatically work for languages that haven't even been invented yet.


Can it tell (using access times under windows) that the files were modified by that stage of the build command, and not by another unrelated process?

How does it know which drives and directories to scan for recently modified files? Scanning all of them would take a while.


It is possible to do strace-like stuff on Windows too as evidenced by Process Monitor. http://technet.microsoft.com/en-us/sysinternals/bb896645.asp...

If scanning atimes is too slow or unreliable, perhaps fabricate could be updated to use procmon?


Here's a version of strace for Windows: http://www.intellectualheaven.com/default.asp?BH=projects...

I've hacked it to print the actual file names on CreateFile() calls, but it's failing because it doesn't recurse and trace sub-processes. It should be theoretically possible by hooking CreateProcess(), but it's probably hard.


It uses strace, a Linux-specific file change notification hook. It's not available on BSD or (IIRC) OS X, though ktrace is, so it could conceivably be ported. (The page says something vague about cygwin having a comparable hook to strace. I haven't developed for cygwin, though.)

It looks like it checks for files modified specifically by its subprocesses.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: