[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Clojure versioning



Hi,

I am in the process of packaging Clojure 1.2 for Debian.  While
doing so, I noticed that Clojure 1.1 AOT compiled packages, such as
clojure-contrib, won't work with 1.2.  This led me to discover that
AOT compiled packages are in general not guaranteed to work between
Clojure versions.  The way I see it we have two possible solutions:

1) Do nothing.  This would essentially mean all clojure libraries would
   need to move in lockstep with the clojure package.

2) Introduce multi version support for clojure.  Each version of clojure
   would have a version number (major.minor) as part of the package
   name.  I guess a disadvantage here is that new Clojure versions
   may be slow moving through NEW.

To support 2) for libraries we would either need to disable AOT
compilation or have each library build multiple binary versions with
the clojure version embedded in the package name.  I understand that
some scenarios (e.g. gen-class) require AOT so we may be forced to
do the latter.

Maven is an issue.  For those clojure packages that build using maven,
we may need to have library packages invoke maven multiple times
at build time (for the different clojure versions), and rewrite
poms to specify version numbers in the artifact IDs (for clojure
packages only).  From reading the maven-debian-helper code I could
not see how this could be done easily.  Also, in the future we may
need something similar for leiningen, gant or other build systems.

I don't think upstream has a specific solution to this problem,
all pom.xml files I have seen depend on a specific version of clojure.

I'd appreciate any possible feedback on this proposal.  If there are
any Maven experts around I would like to know how feasible the maven
parts are.

Thanks,
-- 
Peter


Reply to: