Design Process : Development Framework
======================================

[options="autowidth"]
|====================================
|*State*       | _Final_
|*Date*        | _2007-06-08_
|*Proposed by* | Cehteh
|====================================




Development Framework
---------------------
Here we collect how the tree/repository will be set up and which tools are
needed/required for working on lumiera.




Description
~~~~~~~~~~~
.Tools required:
* Unix like shell environment with standard tools
* we don't require a specific linux distribution
* Git 1.5.3 (not out yet, but really soon, we want submodules support)
* GNU toolchain, autoconf/automake (maybe SCons or something else?)
* Bouml (version case unresolved)

.Tools suggested:
* doxygen




Tasks
^^^^^
* _Cehteh_ will setup a initial repository
  (see -> link:{rfc}/RepositorySetup.html[RfC: proposed repository structure])
* ichthyo has setup a debian-APT-depot at 'deb/ichthyostega.de' and will
  add backport packages there if necessary so the debian-people can stay near
  Etch/stable in the next time
* _Ichthyo_ volunteers to get the new source into a debian package structure from
  start (same as the current cinelerra is)

.And for later:
* decide on a Unit Test framework
  (see -> link:rfc/UnitTestsPython.html[RfC Unit-Tests])
* can we get some continuous integration running somewhere (nightly builds,
  testsuite)?
* find a viable toolchain for writing more formal documentation.
  ReStructured Text, Docbook etc?




Cons
^^^^
* Git submodules are just not usable yet; we need to come along with one
  monolitic large project until they are available.


Alternatives
^^^^^^^^^^^^
* use visual studio and .NET [big]#😇#




Rationale
~~~~~~~~~
The project will be tied to a distributed infrastructure based on Git. With recent
Git submodules support it should be easy to let contributors only checkpout/work on
parts of the tree (plugins, documentation, i18n, ...). We want to build up a
set of maintenance scripts in an `./admin` directory.

At the moment we go for rather bleeding edge tools, because we want to stay at
a given version to avoid incompatibility problems. Later on a version switch
needs agreement/notification by all devs.




Comments
--------

I am always in favor of getting the basic project organization and all
scripting up and running very early in a project. I would like if the project
would take a rather conservative approach on the required Libs and Tools, so
that finally, when we get into a beta state, we can run/compile on the major
distros without too much pain. I wouldn't completely abandon the idea to target
*bsd and osX as well later on.

I would propose to move Doxygen to ``required''. The Idea to use SCons sounds
quite appealing to me at the moment. Besides that, I think this RfC could be
moved to ``Draft''.

Ichthyostega:: '2007-06-17T00:18:40Z'

Moved to Draft. For Developer documentation I would prefer doxygen. For user
documentation we can make a similar/same think like nicolasm did for
cinelerra2, means wiki for edits, git to maintain it, based on gnu texinfo.
Texinfo is quite limiting in its capabilities but it suffices, seeing the
current cin2 docs, i say its rather well done.

We need to factor out some of the proposals from this page to subpages (scons,
documentation, testing,...)

ct:: '2007-06-17T17:27:59Z'

It would really suck if we have to go through the experiences described in the article
https://web.archive.org/web/20060427005516/http://freshmeat.net/articles/view/889/[»Stop the autoconf insanity!«].
I have experienced parts of that
in the past. I have only some beginner experience with writing autotoolized
projects (mostly based on trial-and-error) and no experience in any other build
system (such as scons). As such, I still believe that autotools can be
manageable (for me personally) once the initial hurdle of learning is overcome.

I all for Doxygen documentation. Related to documentation are
http://splint.org/[Splint: Annotation-Assisted Lightweight Static Checking].
See also http://splint.org/manual/html/appC.html[descriptions of annotations (in comments)].
I suggest
that we consider using such a tool for QA. Like ct said, this should be
discussed in a subpage.

I agree with using currently bleeding-edge tools.

 * _historic remark(Ichthyo):_ who wrote that comment? (neither me nor ct)


We have now a ``compatibility wiki'', finalized this proposal

ct:: '2008-03-26T13:43:26Z'

''''
....
​
​
​
....

Assessment 2025
~~~~~~~~~~~~~~~
[underline]#In hindsight,# this RfC captures the baseline of our project setup. +
We soon settled upon the following toolchain, which is used up to today:

- One published Git repository per developer, with direct pull / merging; +
  history is consolidated eventually into the
  link:{rfc}/MasterRepositorySetup.html#historical_remark[»official Lumiera repository«],
  which is made accessible at
  https://git.lumiera.org/?p=LUMIERA;a=summary[`git://git.lumiera.org/LUMIERA`]
- We never used link:{rfc}/GitSubmoduleTransistion.html#_comments[Git submodules]...
- https://www.scons.org/[SCons] became the primary buildsystem soon,
  with Autotools discontinued in 2011
- https://trac.edgewall.org/[Trac] is used as planning- and ticket system.
- API documentation is extracted with https://www.doxygen.nl/[Doxygen]
- Website and documentation pages are generated by
  https://asciidoc-py.github.io/[Asciidoc], with source files for
  documentation maintained
  https://git.lumiera.org/?p=LUMIERA;a=blob;f=doc/index.txt;h=9bc0f11e6fb67588388e7616320b695841571278;hb=20f3252892d5b53a05ecd8aeb571122806baba17[in-tree],
  published
  https://git.lumiera.org/?p=website;a=blob;f=build_website.sh;h=60b90e18d5732d66566baf2c20a217212a5dcece;hb=aefc91e13a95a3c742dc8143c374ec982e0aa56b[automatically on push].
- A https://classic.tiddlywiki.com/[TiddlyWiki] is used for development notes
- for Unit-Tests, we use our own minimalist
  https://git.lumiera.org/?p=LUMIERA;a=blob;f=src/lib/test/run.hpp;h=035633af9bde7a8053bcd304baffc21693dcf031;hb=20f3252892d5b53a05ecd8aeb571122806baba17[Test-runner].
  and a
  https://git.lumiera.org/?p=LUMIERA;a=blob;f=tests/test.sh;h=8c13810eb475bbacd97c528607e6750f47bb145e;hb=20f3252892d5b53a05ecd8aeb571122806baba17[shell script]
  to support definition of test collections.
- A Debian package is maintained with
  https://wiki.debian.org/PackagingWithGit[git-buildpackage] and published
  in our own DEB depot generated by the
  https://wiki.debian.org/DebianRepository/SetupWithReprepro[reprepro tooling].
- UML plays only a marginal role today -- yet in fact we generated our initial class
  hierarchy with https://web.archive.org/web/20070625100128/http://bouml.free.fr/[Bouml],
  as proposed by _Cehteh_. Sometimes, UML design sketches are made with
  https://uml.sourceforge.io/[Umbrello], while schematic drawings,
  Icons and graphic elements for the GUI are maintained
  with https://inkscape.org/[Inkscape]
- Test-visualisation relies heavily on
  https://graphviz.org/[Graphviz] and
  http://www.gnuplot.info/[Gnuplot]

Ichthyostega:: '2025-09-20'


''''
Back to link:/x/DesignProcess.html[Lumiera Design Process overview]
