comp.lang.ada
 help / color / mirror / Atom feed
From: Jacob Sparre Andersen <jacob@jacob-sparre.dk>
Subject: Re: CPAN style Ada repository
Date: Thu, 12 Dec 2013 09:23:05 +0100
Date: 2013-12-12T09:23:05+01:00	[thread overview]
Message-ID: <87iouubhqu.fsf@adaheads.sparre-andersen.dk> (raw)
In-Reply-To: 52976431$1@news.actrix.co.nz

banjo <banjo@actrix.co.nz> wrote:

> Would there be interest in a Perl CPAN style Ada repository?

Something like it, yes.

I have earlier discussed the subject with Thomas Løcke and Kim Rostgaard
Christensen in terms of the tools and infrastructure provided with the
Go programming language from Google.

Step one must be to decide what the purpose of the project is.  Some
possibilities:

a) Make it easier for newcomers to Ada to get started.

b) Make it easier to find and install Open Source libraries and
   applications written in Ada.

c) Document how (and how well) Open Source libraries and applications
   written in Ada build and run on various platforms and with various
   compilers.

d) Advertise the existence of other Ada compilers than GNAT.

e) Survive, grow, and encompass all published Open Source Ada source
   texts.

I know that not all contributors to this thread weigh these purposes
equally, but I think they all have value for the Ada community as a
whole.

Based on these objectives I propose:

1) Make a "first download" package, which provides (or downloads or
   validates the existence of) a compiler and a client (developer) tool.

   (Like for Go.  A step towards objective a.)

2) Besides the "first download", the system provides "projects", which
   may be libraries, applications or a mix of both.  (A "library" is
   basically a project without any non-test executables.)  The
   collection of projects can be queried and downloaded through the
   client tool.

   (A step towards objectives a and b.)

3) All projects are required to have some built-in tests.  As a minimum
   there should be test applications which ensure that all compilation
   units in the project sources are compiled.

   (A step towards objective c.)

4) Support multiple compilers.  Tero Koskinen has both GNAT, Irvine
   ICCAda and Janus/Ada on his <http://build.ada-language.com/> site, so
   it should be possible.

   (A step towards objectives c and d.)

5) Make it easy for developers to submit new projects to the system.

   (A step towards objective e.)


Refining the proposals above:

6) Each project needs some build rules.  As we want to support multiple
   compilers (proposal 4), it makes sense to have a very simple
   (proposal 5) build rule format, which then can be compiled to build
   rules for the various supported compilers.

   The minimum requirements for the build rules might be as simple as
   three lists:
    - Which projects this project depends on.
    - Which applications are to be generated by this project.
    - Which test programs are included in the project.

7) If an up-stream project is parametrised (or uses different sources
   for different hosts/compilers/targets), our view of it is multiple
   unparametrised projects.  This will allow for simpler build rules
   (proposal 5 and 6) and at the same time simplify testing (objective c
   and proposal 3)

----------------------------------------------------------------------------

The following is a collection of various ideas for the project on a more
practical level.  These ideas are not (yet) tied properly to the
objectives listed above.


General:
========

- Source-only projects - Skip the whole problem of generating dynamic
  libraries.  Not many systems will have more than one application
  running using large parts of the same Ada library.

- Use ISO dates plus a single latin letter as version identifiers for
  projects.  This will allow about one version per hour per project.  Is
  this an unreasonable limit?

- Project naming: As Ada identifiers with the extra constraint that they
  can't end in "_" & Possible_Version_Identifier or "_" &
  Possible_Version_Identifier & "_test".  (Other constraints?)  This is
  to allow GPR files to reference either the "head" version of a project
  or a specific revision.

- Project parameters:

   + Build rules.

   + Version control link.

   + Provides: API ID's.

   + Dependencies: Both other projects in the system, API ID's _and_
     operating system specific dependencies.

   + (plus revision information)


Client (developer tool):
========================

- Keep track of which projects the developer has fetched explicitly (and
  which specific versions have been requested, where that is relevant)

- Keep track of the dependencies of the installed projects, and make
  sure they are fulfilled.

- When updating; only pull the newest versions of previously requested
  projects, when the developer hasn't asked for a specific version or
  has asked for "head".

- The Go command-line tool has (at least) the following operations: get,
  build, test, run, install.  I'm not sure I care about "run", but
  "drop" (sort-of "uninstall") and "select-compiler" (as we want to
  support more than one) would be nice additions.

Service:
========

- Generate new project versions from up-stream commits automatically.

- Test new project versions automatically as they are generated.

- Only release project versions which pass the tests on at least one
  host-compiler-target combination.

- It would be nice if it automatically could test which revisions of the
  dependencies of a project result in a working (test-passing) system.

- Should we host copies of the sources of the projects as a part of the
  service?  Jim Kimball doesn't like to do it, but I like the idea of
  fetching sources and build rules from a single location.

----------------------------------------------------------------------------

Greetings,

Jacob

PS: I like a name like "go Ada" better than "something-CPAN".
-- 
Those who can't laugh at themselves leave the job to others.

  parent reply	other threads:[~2013-12-12  8:23 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-28 15:41 CPAN style Ada repository banjo
2013-11-29  7:04 ` Thomas Løcke
2013-12-12 10:17   ` Lucretia
2013-12-13  6:54     ` J Kimball
2013-12-13  9:58       ` Lucretia
2013-11-29 19:22 ` Felix Krause
2013-11-29 20:17   ` Simon Wright
2013-11-29 22:53     ` Dennis Lee Bieber
2013-12-09 23:45       ` Yannick Duchêne (Hibou57)
2013-11-29 22:13   ` Jeffrey Carter
2013-11-29 22:15   ` Georg Bauhaus
2013-12-03 18:12     ` Martin
2013-12-03 19:03     ` Randy Brukardt
2013-11-30  1:20   ` Shark8
2013-11-30 13:46   ` gautier_niouzes
2013-11-29 22:07 ` Stephen Leake
2013-11-30 13:12   ` Jacob Sparre Andersen
2013-12-02 17:10     ` Tero Koskinen
2013-12-01  6:36 ` johannes falcone
2013-12-01  7:08   ` Simon Wright
2013-12-01 11:18     ` Brian Drummond
2013-12-01 11:19     ` Brian Drummond
2013-12-01 12:18       ` Jacob Sparre Andersen
2013-12-01  8:24   ` Jacob Sparre Andersen
2013-12-11 20:49 ` Björn Persson
2013-12-12 16:12   ` Stephen Leake
2013-12-13 11:52     ` darkestkhan
2013-12-13 18:38     ` Björn Persson
2013-12-15  5:40       ` Stephen Leake
2013-12-12  8:23 ` Jacob Sparre Andersen [this message]
2013-12-12  9:55   ` Yannick Duchêne (Hibou57)
2013-12-12 10:26     ` Jacob Sparre Andersen
2013-12-12 10:37       ` Brian Drummond
2013-12-12 11:39       ` G.B.
2013-12-12 22:20         ` Jacob Sparre Andersen
2013-12-13  5:43           ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox