FAQ
Hi all,

As a few of you may already know, I've been working on a new
compilation and linking toolkit, called ExtUtils::Builder. It's
intended as a replacement for ExtUtils::CBuilder. ExtUtils::CBuilder
has a number of issues that I'm running into:
1) The only thing it does reliably is creating loadable-objects for
perl. On some platforms it doesn't do shared libraries or executables,
and static libraries aren't in the picture anywhere. It also insists
on linking to perl's dependencies on some platforms. This greatly
reduces the usefulness of the library.
2) It can't plan ahead, it can only perform the compiling/linking.
This is a problem if you for example want to embed it into a Makefile,
but also if you want to modify the commands before running.
3) It's very inflexible in its options. It has for example an
extra_linker_flags option, but it has a fixed position. Since linker
flags tend to be very order dependent, this means it's often the wrong
position. Likewise you can't choose it's exportation method, it always
does some platform-specific thing (either exporting all or exporting a
select set of symbols).

These issues all boil down to «it does exactly what is was designed to
do, don't expect anything more». It goes so deep that a redesign from
scratch is inevitable to me.

I'm dealing with these issues by using a radically different design in
EU:B. I'm using builder roles for the compiler and linker that allow
you to specify what you'd like them to do. The classes implementing
these roles are essentially drivers for various compilers/linkers.
These classes build action objects, that can either be executed, or
turned into a command to be run (e.g. [qw/cc -o foo.o -c foo.c
-Iheaders/]). There's a separate class that inspects perl's
configuration uses that to instantiate the known compiler/linker with
the right options, but the rest of the framework can be used
independently.

It's currently in a fairly early state (and rather lacking
documentation); it's known to work on Linux, HP-UX and OS X but it is
still being ported to other platforms (there is some code for Windows
already). I can very much use some platform specialists for help
there.

Patches and comments are very welcome. The code is at
https://github.com/Leont/extutils-builder

Leon

Search Discussions

  • Jens Rehsack at Nov 21, 2012 at 11:21 am

    On 20.11.12 02:11, Leon Timmermans wrote:
    Hi all,

    As a few of you may already know, I've been working on a new
    compilation and linking toolkit, called ExtUtils::Builder. It's
    intended as a replacement for ExtUtils::CBuilder. ExtUtils::CBuilder
    has a number of issues that I'm running into:
    1) The only thing it does reliably is creating loadable-objects for
    perl. On some platforms it doesn't do shared libraries or executables,
    and static libraries aren't in the picture anywhere. It also insists
    on linking to perl's dependencies on some platforms. This greatly
    reduces the usefulness of the library.
    2) It can't plan ahead, it can only perform the compiling/linking.
    This is a problem if you for example want to embed it into a Makefile,
    but also if you want to modify the commands before running.
    3) It's very inflexible in its options. It has for example an
    extra_linker_flags option, but it has a fixed position. Since linker
    flags tend to be very order dependent, this means it's often the wrong
    position. Likewise you can't choose it's exportation method, it always
    does some platform-specific thing (either exporting all or exporting a
    select set of symbols).

    These issues all boil down to «it does exactly what is was designed to
    do, don't expect anything more». It goes so deep that a redesign from
    scratch is inevitable to me.

    I'm dealing with these issues by using a radically different design in
    EU:B. I'm using builder roles for the compiler and linker that allow
    you to specify what you'd like them to do. The classes implementing
    these roles are essentially drivers for various compilers/linkers.
    These classes build action objects, that can either be executed, or
    turned into a command to be run (e.g. [qw/cc -o foo.o -c foo.c
    -Iheaders/]). There's a separate class that inspects perl's
    configuration uses that to instantiate the known compiler/linker with
    the right options, but the rest of the framework can be used
    independently.

    It's currently in a fairly early state (and rather lacking
    documentation); it's known to work on Linux, HP-UX and OS X but it is
    still being ported to other platforms (there is some code for Windows
    already). I can very much use some platform specialists for help
    there.

    Patches and comments are very welcome. The code is at
    https://github.com/Leont/extutils-builder
    This is really cool stuff for the thing it's designed for. I'm pretty
    sure, it will satisfy a hugh amount of developers.

    Thanks, Leon
    --
    Jens Rehsack

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcpan-workers @
categoriesperl
postedNov 20, '12 at 1:11a
activeNov 21, '12 at 11:21a
posts2
users2
websitecpan.org

2 users in discussion

Leon Timmermans: 1 post Jens Rehsack: 1 post

People

Translate

site design / logo © 2018 Grokbase