Title: Message
Hi Jarek,
 
I think a set of standards for NAnt build files would be awesome.  The documentation would be a great driver for a GUI tool, and although there are a number of examples in the NAnt source files but the addition of a GUI designer would probably help out a lot with the process (IMO) by accomplishing two things:
    1) It would help people get started setting up a new project.
    2) It would allow produce a standardized build script composed of the "better practices" in project setup.
 
Being a version control dude I would add to this list a checkout/ get target that would fetch source from whatever version control system people are using :-). 
 
 
This might be getting a little ahead but I just have a couple of questions on the implementation:
 
> 4. Standard directory layout (bin, build, src, doc, ...), signing key file placement and generation
 
Would it be a good idea to identify standard properties to handle these directories?  Sometimes people do not want to choose a different naming convention or even different names (i.e. Binaries, Build, Source, Documentation).  I am not sure if these "standard" properties should be known about inside of NAnt yet and maybe just "suggested" properties would be "better"?
 
>8. Package generation tools (source package, binary package, installer package)
 
Would we actually generated the <msi /> and (when the rpm task is built :-)) <rpm /> code for a "standard" setup?  That would be a beautiful thing IMO :-).
 
 
Great idea!
 
 
Cheers,
 
 
Clayton
 
 
-----Original Message-----
From: Jaroslaw Kowalski [mailto:[EMAIL PROTECTED]
Sent: September 9, 2004 5:35 AM
To: [EMAIL PROTECTED]
Subject: [Nant-users] Build process unification

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

Reply via email to