Thread: [Assorted-commits] SF.net SVN: assorted: [466] simple-build/trunk/README
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-02-16 21:59:29
|
Revision: 466 http://assorted.svn.sourceforge.net/assorted/?rev=466&view=rev Author: yangzhang Date: 2008-02-16 13:59:33 -0800 (Sat, 16 Feb 2008) Log Message: ----------- updated readme Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-02-16 21:46:24 UTC (rev 465) +++ simple-build/trunk/README 2008-02-16 21:59:33 UTC (rev 466) @@ -1,4 +1,46 @@ +Overview +-------- + +Keep your builds as simple as possible. Never repeat yourself. Separation of +rules from declared goals. + +Eventually aims to be a complete solution for software configuration, building, +installation and distribution. + +Current features: + +- automatic dependency tracking for C/C++ and Scala + - only specify top-level source files + - simple-build uses the compiler to generate dependency files that are + included into the Makefile for fine-grained dependency tracking + - very useful for when you are working across multiple projects (in my case, + the culprits are often C++ Commons, Scala Commons, etc.) + +Planned features: + +- out-of-the-box support for C, C++, Java, Scala +- software deployment + - installation + - web publishing + - workspace setup (e.g. for experiments with large datasets) +- documentation generation that respects existing platforms/conventions + - doxygen for C/C++ + - epydoc for Python + - scaladoc for Scala + - javadoc for Java +- distribution and packaging that respects existing platforms/conventions + - autotools for C/C++ + - more, stronger heuristics than autoscan + - generate acinclude.m4 + - setuptools/pypi for Python + - sbaz for Scala + - jars for Java +- continuous build and continuous testing + - maven for Java/Scala +- somehow merge with simple-setup (generate simple-setup files too?) +- stronger inference (e.g. mainclass inference, library test inference) + Requirements -------------- +------------ -jyaml-1.3.jar +- jyaml-1.3.jar This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-02-24 06:40:59
|
Revision: 486 http://assorted.svn.sourceforge.net/assorted/?rev=486&view=rev Author: yangzhang Date: 2008-02-23 22:41:04 -0800 (Sat, 23 Feb 2008) Log Message: ----------- updated documentation Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-02-24 06:40:00 UTC (rev 485) +++ simple-build/trunk/README 2008-02-24 06:41:04 UTC (rev 486) @@ -9,16 +9,19 @@ Current features: +- out-of-the-box support for C, C++, Java, Scala - automatic dependency tracking for C/C++ and Scala - only specify top-level source files - simple-build uses the compiler to generate dependency files that are included into the Makefile for fine-grained dependency tracking - - very useful for when you are working across multiple projects (in my case, - the culprits are often C++ Commons, Scala Commons, etc.) + - rebuilds occur only when necessary + - particularly useful for when you are working across multiple projects (in + my case, the culprits are often C++ Commons, Scala Commons, etc.) +- automatic library specification by checking headers against well-known + header-to-library mappings Planned features: -- out-of-the-box support for C, C++, Java, Scala - software deployment - installation - web publishing @@ -35,10 +38,10 @@ - setuptools/pypi for Python - sbaz for Scala - jars for Java -- continuous build and continuous testing +- continuous build, testing - maven for Java/Scala + - DART/cmake for C/C++ - somehow merge with simple-setup (generate simple-setup files too?) -- stronger inference (e.g. mainclass inference, library test inference) Requirements ------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-02-24 06:59:56
|
Revision: 495 http://assorted.svn.sourceforge.net/assorted/?rev=495&view=rev Author: yangzhang Date: 2008-02-23 23:00:01 -0800 (Sat, 23 Feb 2008) Log Message: ----------- minor note Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-02-24 06:57:52 UTC (rev 494) +++ simple-build/trunk/README 2008-02-24 07:00:01 UTC (rev 495) @@ -42,6 +42,7 @@ - maven for Java/Scala - DART/cmake for C/C++ - somehow merge with simple-setup (generate simple-setup files too?) +- support on other platforms (e.g. pthread -> thr on BSD) Requirements ------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-02-24 20:48:10
|
Revision: 498 http://assorted.svn.sourceforge.net/assorted/?rev=498&view=rev Author: yangzhang Date: 2008-02-24 12:48:14 -0800 (Sun, 24 Feb 2008) Log Message: ----------- added a bunch of information to the readme Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-02-24 20:47:57 UTC (rev 497) +++ simple-build/trunk/README 2008-02-24 20:48:14 UTC (rev 498) @@ -1,12 +1,16 @@ +% SimpleBuild +% Yang Zhang + Overview -------- -Keep your builds as simple as possible. Never repeat yourself. Separation of -rules from declared goals. - Eventually aims to be a complete solution for software configuration, building, installation and distribution. +Some vague principles: keep your build configurations as tiny as possible. +Leverage/target existing build and package systems. Lots of features. +Extensibility. Portability. Cross-language. Cross-project. Etc. + Current features: - out-of-the-box support for C, C++, Java, Scala @@ -19,7 +23,49 @@ my case, the culprits are often C++ Commons, Scala Commons, etc.) - automatic library specification by checking headers against well-known header-to-library mappings +- in-place or out-of-place builds +Requirements +------------ + +- [JYaml] 1.3 + +Examples +-------- + +Say the directory `~/myapp/` contains two C++ programs: `client.cc` and +`server.cc`. To build these with SimpleBuild, create a file called `build` +containing the following [YAML] data: + + client: + srcs: [client.cc] + + server: + srcs: [server.cc] + libs: [pthread, profiler] + +Now running `simple-build` generates a `GNUmakefile` that can be used to +compile both programs in a variety of ways. We could alternatively keep the +source tree clean of generated files by changing to a different directory and +running `simple-build ~/myapp/build`. + +The `libs` field lists libraries that are to be linked with the application. +`simple-build` is also capable of inferring libraries by automatically +determining the headers included by your source files and then mapping these +onto library names. + +The `GNUmakefile` also contains a mechanism for [automatically generating +dependencies] from your source files. This mechanism relies on `gcc -M` and +some GNU `make` tricks. I also take other cues from Peter Miller's excellent +paper ["Recursive Make Considered Harmful"]. + +This automatic dependency generation is also available for Java and Scala; the +mechanism there relies on the compilers' verbose output, and has only been +tested with Sun's `javac`. + +Todo +---- + Planned features: - software deployment @@ -43,8 +89,100 @@ - DART/cmake for C/C++ - somehow merge with simple-setup (generate simple-setup files too?) - support on other platforms (e.g. pthread -> thr on BSD) +- look into: + - [precompiled headers] + - [lzz], [preprocess] + - [autodepend] +- selective target specification: enable configuration of rules (esp. `all`) to + build only certain targets that the user is interested in (currently all + configurations of all programs are built) -Requirements +Related Work ------------ -- jyaml-1.3.jar +The decision to write yet another build system was based on the empty-handed +outcome of a long (and depressing) quest. Here are brief commentaries of some +other build systems. + +- [autotools]: The de-facto standard for portable source distributions, but + writing portable, meaningful `configure.ac` scripts requires a lot of care, + which doesn't suit well the frequent one-off programs I write. Also, + `autotools` doesn't do much for Java or Scala. The aspiration for SimpleBuild + is to one day be able to generate `autotools` inputs (as well as other kinds + of software packaging). + +- [Boost.Build]: A system for building C++ projects. Documentation hints that + it is capable of discovering transitive dependencies as well. This seems like + the closest thing to what I wanted. + +- [GNU `make`]: Currently, SimpleBuild targets only `make`. + +- [ANT]: A portable, "cleaner" version of `make`. Where `make` relies on shell + commands for its actions, ANT relies on actions implemented in Java (either + built-in or provided by extensions). Also, ANT does not by default (i.e., + all targets are "phony"). It is also rid of other `make` idiosyncracies + (syntax, whitespace values, etc.). + +- [Maven]: Much more than a build system, Maven tries to cover everything + related to the general maintenance of software with attention to + cross-project maintenance, and is even a standard way of publishing and + obtaining software. A number of plug-ins (also automatically obtained) take + care of continuous builds, testing, and integration, all presented in a + cohesive dashboard interface. It requires the project follow certain + conventions (e.g. in file organization), but this turns out to be reasonable + for most projects. Again, Maven is not as meaningful for one-off Scala + scripts ([Scala Maven tools] do exist, BTW), but this is where I hope to take + `SimpleBuild` someday. + +- [clump]: A way to build C programs without any build configuration file + whatsoever. The idea of automatic library inference via a header-to-library + database came from here. + +- [CMake]: Cross-platform `make`. Uses its own quirky scripting language and + has quite a few features. I should probably target this. + +- [WAF]: An even simpler/more barren build system. You actually write + imperative scripts for each build you need. A bit scary. + +- [DART]: Somewhat like Maven but for C++, providing a tests/reports/dashboards + for monitoring the status of projects. From the same people behind CMake. + +- [SCons]: For building C, C++, Java, and more. Very minimalistic in its + approach, and imposes (even defines well) few abstractions. It doesn't have + many features. + +- [buildr]: A drop-in replacement for Maven written in Ruby. Supports Scala, + apparently. + +- [rake]: SCons in Ruby. + +- [rant]: Ant in Ruby. + +- [SAnt]: Ant in Scala (abandoned). + +[jyaml]: http://jyaml.sourceforge.net/ + +[precompiled headers]: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html +[lzz]: http://www.lazycplusplus.com/ +[preprocess]: http://os.inf.tu-dresden.de/~hohmuth/prj/preprocess/ +[autodepend]: http://autodepend.sourceforge.net/ + +[YAML]: http://yaml.org/ +[automatically generating dependencies]: http://make.paulandlesley.org/autodep.html +["Recursive Make Considered Harmful"]: http://miller.emu.id.au/pmiller/books/rmch/ + +[ANT]: http://ant.apache.org/ +[Boost.Build]: http://boost.org/boost-build2/ +[CMake]: http://www.cmake.org/ +[DART]: http://www.itk.org/Dart/HTML/Index.html +[GNU `make`]: http://www.gnu.org/software/make/ +[Maven]: http://maven.apache.org/ +[SAnt]: http://code.google.com/p/sant/ +[SCons]: http://www.scons.org/ +[Scala Maven tools]: http://scala-tools.org/ +[WAF]: http://code.google.com/p/waf/ +[autotools]: http://sources.redhat.com/autobook/ +[buildr]: http://incubator.apache.org/buildr/ +[clump]: http://www.fexl.com/clump/ +[rake]: http://rake.rubyforge.org/ +[rant]: http://rant.rubyforge.org/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-02-24 22:40:10
|
Revision: 499 http://assorted.svn.sourceforge.net/assorted/?rev=499&view=rev Author: yangzhang Date: 2008-02-24 14:40:15 -0800 (Sun, 24 Feb 2008) Log Message: ----------- minor updates to readme Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-02-24 20:48:14 UTC (rev 498) +++ simple-build/trunk/README 2008-02-24 22:40:15 UTC (rev 499) @@ -139,7 +139,9 @@ database came from here. - [CMake]: Cross-platform `make`. Uses its own quirky scripting language and - has quite a few features. I should probably target this. + has quite a few features. I should probably target this. ["Why the KDE + project switched to CMake"] is a nice article on CMake (vs. auto* and SCons). + I've been using CMake as well. - [WAF]: An even simpler/more barren build system. You actually write imperative scripts for each build you need. A bit scary. @@ -170,6 +172,7 @@ [YAML]: http://yaml.org/ [automatically generating dependencies]: http://make.paulandlesley.org/autodep.html ["Recursive Make Considered Harmful"]: http://miller.emu.id.au/pmiller/books/rmch/ +["Why the KDE project switched to CMake"]: http://lwn.net/Articles/188693/ [ANT]: http://ant.apache.org/ [Boost.Build]: http://boost.org/boost-build2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-03-03 05:00:07
|
Revision: 585 http://assorted.svn.sourceforge.net/assorted/?rev=585&view=rev Author: yangzhang Date: 2008-03-02 21:00:13 -0800 (Sun, 02 Mar 2008) Log Message: ----------- new readme for publisher Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-03-03 04:55:33 UTC (rev 584) +++ simple-build/trunk/README 2008-03-03 05:00:13 UTC (rev 585) @@ -1,6 +1,3 @@ -% SimpleBuild -% Yang Zhang - Overview -------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-03-05 07:09:39
|
Revision: 607 http://assorted.svn.sourceforge.net/assorted/?rev=607&view=rev Author: yangzhang Date: 2008-03-04 23:09:45 -0800 (Tue, 04 Mar 2008) Log Message: ----------- added setup instructions Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-03-05 06:12:14 UTC (rev 606) +++ simple-build/trunk/README 2008-03-05 07:09:45 UTC (rev 607) @@ -35,6 +35,24 @@ - [JYaml] 1.3 +Setup +----- + +Install the files using `setup.bash`. + +First, set `$SIMPLEBUILD` to the directory (e.g., +`/opt/simple-build/share/simple-build/`) that will contain the SimpleBuild data +files. + +Make sure that `$SCALA_COMMONS_SRC` is set correctly (pointing to the `src/` +subdir) or that `~/scom` is (or symlinks to) the `scala-commons/` directory. + +Then run `make run`. This will run SimpleBuild on its own `build` file, +yielding a `GNUmakefile` on which you can again run `make`. + +Run `setup.bash` again to install the generated launcher script `simple-build`. +Make sure that `simple-build` works by trying out some of the tests. + Examples -------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-05-08 20:16:31
|
Revision: 751 http://assorted.svn.sourceforge.net/assorted/?rev=751&view=rev Author: yangzhang Date: 2008-05-08 13:16:13 -0700 (Thu, 08 May 2008) Log Message: ----------- added some links Modified Paths: -------------- simple-build/trunk/README Modified: simple-build/trunk/README =================================================================== --- simple-build/trunk/README 2008-05-08 19:35:24 UTC (rev 750) +++ simple-build/trunk/README 2008-05-08 20:16:13 UTC (rev 751) @@ -114,6 +114,8 @@ - support on other platforms (e.g. pthread -> thr on BSD) - look into: - [precompiled headers] + - [tamer] + - [wtf] - [lzz], [preprocess] - [autodepend] - selective target specification: enable configuration of rules (esp. `all`) to @@ -193,7 +195,9 @@ [precompiled headers]: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html [lzz]: http://www.lazycplusplus.com/ [preprocess]: http://os.inf.tu-dresden.de/~hohmuth/prj/preprocess/ +[tamer]: http://www.read.cs.ucla.edu/tamer/ [autodepend]: http://autodepend.sourceforge.net/ +[wtf]: http://nmstl.sourceforge.net/ [YAML]: http://yaml.org/ [automatically generating dependencies]: http://make.paulandlesley.org/autodep.html @@ -215,3 +219,10 @@ [clump]: http://www.fexl.com/clump/ [rake]: http://rake.rubyforge.org/ [rant]: http://rant.rubyforge.org/ + +Here are some interesting articles: + +- [The Quest for the Perfect Build + System](http://www.gamesfromwithin.com/articles/0506/000092.html) +- [The Quest for the Perfect Build System Part + 2](http://www.gamesfromwithin.com/articles/0509/000100.html) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |