On 07/06/2012 01:31 PM, David Nalley wrote:
On Fri, Jul 6, 2012 at 1:07 PM, Robert Schweikert <rjsch...@suse.com> wrote:
On 07/06/2012 12:54 PM, Kevin Kluge wrote:

I understood GCC to have a AL 2.0 license and to be used by the UI, as
described in [1].   So it should at least be acceptable per license.   I
don't see why it has to be kept in the source tree but a removal of it
should also include build changes to download a known-stable version for use
in the build,


Downloading things during build will not work in all cases, thus a "download
something to build the stack" is not a good option.

Things in the source tree should be either in source format or describable
as an dependency. If a "download it automatically" feature is needed for
developer convenience then it should be an explicit feature that can be
enabled.

I am thinking here primarily of package build systems such as OBS (Open
Build Service) that do not provide network access when packages are being
built.

If it's a dependency, can we just move it to the deps directory?

I would prefer not to have a deps directory. From my point of view anything the code (source) depends on falls into two buckets.

1.) Functionality provided in another source file that is part of the code base.

2.) Functionality provided by some code external to the project.

Handling of stuff that falls into bucket 1 is pretty straight forward as it is under the control of the project, although even here dependencies can be tricky to manage. Everything else that falls into bucket 2 is external to the project and should be treated as such, i.e. keep it out of the tree and document the dependency. The documented dependencies fall into 2 categories:

a.) build dependencies; such as ant and other tools
b.) run dependencies (a runtime dependency may also be a build
                      time dependency); such as libvirt-java

From a distribution perspective everything that falls into the dependency category can and should be provided as a package. This in the end is the packagers responsibility and not the responsibility of the project. There's another angle to this for developers I agree, more on this below.

Part of my issue as new-comer to the project and trying to get decent quality packages for SUSE is that things are mingled together and there are layered build systems, waf ontop of ant and maybe other stuff. While the build works, thanks to the work done for fedora by David, I am not really happy with this I cannot wrap my head around how things are put together. It would be nice to get to a point where things are clearly delineated and we can have a README file that clearly spells out what the dependencies are and how to build the various components Alex is working on, (avoiding the overloaded word "package" as in the distro context int means something different).


Fedora's build systems are the same way.
Moreover, while we can have a system that downloads prohibited
dependencies, it must be a non-default option.
http://www.apache.org/legal/3party.html#options


This is where I see the "convenience function" for developers come into play. For those that just what to hack on the code base and do not care much about how things are built etc. it is nice to have an "automated" way to pull in all these dependencies, ant setup-buildenv, for example might be a good target that could provide all these dependencies. However, with the dependencies out of the tree and explicitly stated it is also easy for packages to create -devel packages that let CloudStack developers install all the devel dependencies and still have them managed by their distro's package manager.

Yes, the implication of this is that all .jar files that are currently in the repository go away.

-> find . -name "*.jar" | wc
    162     162    6604

ouch.....

And again there are 2 options:

- the .jar file is superfluous in which case it is simple to remove
- the dependency is real and falls into a.) or b.) above, this implies
   ~ we have to document the dependency
   ~ get rid of the jar file
   ~ let developers know they are responsible for managing their
     build system accordingly.

I am not certain how this plays into the setup of the continuous integration server, but that should be manageable in a reasonable way.

Robert


--
Robert Schweikert                           MAY THE SOURCE BE WITH YOU
SUSE-IBM Software Integration Center                   LINUX
Tech Lead
rjsch...@suse.com
rschw...@ca.ibm.com
781-464-8147


Reply via email to