lein-cljsbuild provides a (deprecated, to be removed) feature called "crossovers" that provides a very limited preprocessing of certain files during the cljsbuild build process; a special comment string is removed, allowing one to work around the
-macros declarations required in ClojureScript
ns forms. Crossover files must otherwise be fully portable. Language/runtime-specific code must be maintained in separate files. However, (my) experience shows that this can quickly lead to the situation where one has to think a lot about in which file to put a specific function, in order to go though the whole preprocessing machinery. Functions are split into namespaces because of conditional compilation, and not because they belong to the same part or module of the program.
Define a custom tagged literal that implements conditional read-time expressions:
/condf [ (and jdk-1.6+ clj-1.5.*)
else (some-old-fashioned-code) ]
Proof of concept here: https://github.com/miner/wilkins