Brian's Waste of Time

Wed, 25 Jun 2003

Environment Variable Nazi
I just got called an "Environment Variable Nazi" for stating strongly that build systems should not be dependent on local environment variables. While this is absurd to carry to an extreme (ie, $PATH). However, non-standard things definately should not be, like a system $CLASSPATH for application in Ant. For some reason people think I am insane for this, and other build system and configuration/SCCS things.

Libraries should be under SCCS. Stick the bloody jar in CVS. So what if binary diffs suck, drive space is cheap. Open source developers seem, in particular, to dislike this. You build, and run, against particular libraries. If you want to use shared libs on your machine, by all means do, but don't make that default. It creates problems like: you compile against an ancient Log4J, your application requires a new Log4J. Oops. You use a library that requires a library that you require (say, Log4J) and you have an antique on in a system classpath. Oops. System classpath == bad, building against non-standard shared libraries (ie, glibc) bad. Knowing what version you are building and running against via an SCCS == priceless.

Do not use absolute paths. Do not use absolute paths. People know this for coding but think it stops applying for SCCS/CM. Argh.

Do not CVS system dependent properties. This is a subtle one. Basically do not put build.properties under CVS, put build.properties.sample under cvs. I hate rebuilding a build.properties for my system after a minor cvs'd change wiped out my custom setup (say because they use Windows paths in their properties, and I need *nix paths).

Do not assume the filesystem is case insensitive - two popular ones are not.

For this, I get called a pita. Ah well.

0 writebacks [/src] permanent link