On 2/20/08, Felipe Contreras <[EMAIL PROTECTED]> wrote: > Hi gentooists, > > I've been reading news sites about some changes happening in Gentoo > and I thought it might be a good time to submit some ideas I've been > baking for several years. > > I come from a Linux From Scratch background, I like the feeling of > knowing every single corner of my system and the fact that there isn't > anything that I don't want or need. However, typing every single > command by hand is far from ideal, so at first I started writing some > scripts and eventually I wrote a build system that suited my needs. I > did it in bash for several reasons. > > After a while I realized bash wasn't exactly the best language to > write such thing. Mainly because: > > a) The code ends up with a lot of stuff for handling strings properly > (like escaping sequences)
Yes this is annoying > b) Error are difficult to handle since bash doesn't have exceptions I disagree here: most errors are fatal anyway any non fatal errors can be printed and saved via the elog facility. > c) Persistent information is difficult to achieve (no database stuff) How is this a bash limitation? Most languages don't have 'database stuff' built in. I don't see how saving stuff to files is much different than the env dumping we do in bash? > d) Package information is difficult to fetch/store (no objects/struct) Yes. > > A more featured language could allow for example: filtered output, > exception handling->state storage->resuming. > > But the big deal is with the package definition, recently I learned > about Domain Specific Languages, and I think that is the best option. > > A new dsl allows many interesting features in the package definition > itself like: inheritance, exceptions, arrays, hash tables, objects, > modules, documentation, information messages, etc. Note that most languages allow for the same things...so why would we author our own language? What runtime would it use? > > Take this example: > > package Binutils < Gnu > definition > @version = "2.17" > @name = "binutils" > super() # run the Gnu definition stuff > > @config_opts = "--disable-nls --with-sysroot=\"#{$sys_root}\" > --enable-shared --disable-multilib" > end > > steps > build > cd #{$top_build_dir} > mkdir -p [EMAIL PROTECTED] > cd [EMAIL PROTECTED] > :configure "script" => "../[EMAIL PROTECTED]/configure", "opts" => > @config_opts > make configure-host > make > end > > install > cd #{$top_build_dir} > cd [EMAIL PROTECTED] > make install > end > end > end > > This is based on an already working prototype made in Ruby, so it's > biased towards Ruby facilities. It looks Rakish ;) > > I've tried different build systems: rpm, dpkg, autopackage. > Unfortunately I never tried ebuild because it was based on bash as far > as I could tell. Typically a 'build system' would refer to 'autotools' or 'ant' or 'setuptools' not an ebuild. > > After almost a decade of using Linux I still haven't found a build > system that suits all my needs. AFAIK ebuild is the most advanced but > it's still relying on ancient technology (bash scripts) so there will > always be limitations despite the brilliant ideas. Bash is not 'ancient' and it works suprisingly well for the vast majority of cases. I realize using a high level language would probably make some tasks easier (mmm dicts and real arrays). There is the matter of porting over 10000 ebuilds however ;) > > The core of a distribution is the "packaging" system, and the core of > the packaging system is the building system, which has no reason not > to be distribution agnostic, and actually, packaging system agnostic. > > Why not create a new build system with a state of the art programming > language, and an advanced DSL that actually other distributions could > use? I would talk to Drobbins, he was talking about something like this to manage complexity. > > I would like to hear your opinions on this matter. > > -- > Felipe Contreras > > -- > gentoo-dev@lists.gentoo.org mailing list > > -- gentoo-dev@lists.gentoo.org mailing list