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
>
> --
> [email protected] mailing list
>
>
--
[email protected] mailing list