Hi!
Inspired by the Gump project, I started
looking at various open source projects (log4net, NDoc, NAnt, NUnit,
ICSharpCode.*) to see how they are built and how they interoperate.
The typical problem is: you want to build a
component (one or more DLLs + some EXEs) based on a set of other pre-built
components that is shipped along with your code or required to be provided. For
example. Nant requires log4net, NDoc, NUnit and ICSharpCode.*. ICSharpCode.SharpCvsLib requires log4net (AFAIR) and so
on.
Unfortunately the build files for each of the
packages are very different. The seem to make different assumptions about the
system they are running on and the system they are targetting. For example,
log4net by default builds for all the frameworks while Nant builds just for the
current framework. log4net doesn't fail when there's no signing key, while some
other projects do. There are also differences in property names used to direct
the build process.
Do you think it would be feasible to create
something like a ".NET OSS Build Standard" based on nant scripts that could then
be adopted by all the projects. I think that it would greatly simplify the
development process and integration among various projects.
I think we could codify the following naming and
semantics for:
1. Standard target names (build, install, clean,
dist, test, doc, ...)
2. A standard way to set default/release build
(using properties or targets)
3. A standard way to set and use the target
framework
4. Standard directory layout (bin, build, src, doc,
...), signing key file placement and generation
5. A standard way of specifying external
dependencies and output file placement (there should always be a clean option to
use other binary than the one that comes with the package).
6. Standard compiler defines (NET, MONO, MONO_1_0,
NETCF and so on)
7. Optimization options
8. Package generation tools (source package, binary
package, installer package)
9. A way to structure your projects, split them
into build files and manage dependencies
10. A standard way (directory structure, naming) to
provide unit tests and a way to run them, generate and store
reports.
I believe that now, 3 years after the .NET release,
there's been a lot of "best practice" accumulated in the community. It could be
easily turned into a standard set of guidelines for the projects to
follow.
With this in place we could have a "NAnt Project
Wizard" that would generate the standard build file based on these
assumptions.
Maybe we could include some of this logic in the
NAnt itself (for example 2, 6, 7, perhaps also 5 could become NAnt
options).
What do you think?
Jarek
|
- [Nant-users] Build process unification Jaroslaw Kowalski
- Re: [Nant-users] Build process unification Gary Feldman
- RE: [Nant-users] Build process unification Bonnett, Evan A
- Re: [Nant-users] Build process unification Merrill Cornish
- Re: [Nant-users] Build process unification Gary Feldman
- Re: [Nant-users] Build process unification Merrill Cornish
- RE: [Nant-users] Build process unification Clayton Harbour