Hi Monty

So I hade to understand pandora-build last week, here are some
comments. I suppose this is as good a list as any to share this. I
leave it to you to break this into meaningful launchpad blueprints.

Relative to the autoconf mess that is your starting point, I see some
good and modular design going on in pandora. I can kind of understand
what you're trying to do. You ask for a very simple plugin.ini from
me. This makes me happy.

I didn't find a single line of documentation and no really useful code
comments either. This made me unhappy, especially as you were not
online last week. You can choose: Either you write documentation or
you don't go to Burning man.


Then for some specific usability comments:


build_conditional:

With the exception of memcached_* plugins, everyone that links to an
external lib does this:

build_conditional="$ac_cv_libv8" = "yes"

But $ac_cv_libv8 is an autoconf-internal (lower case) variable. So you
need to have secret knowledge of ./configure internals at this point.
Considering how clean and simple pandora-build is otherwise, this is a
real shame.

Why don't introduce:

# Needs libv8.so to build
external_dependency=libv8
# In case of missing dependencies, this module is excluded,
# but rest of build is allowed to continue
required=no

...which would then be transformed by pandora-build into
"$ac_cv_libv8" = "yes". You could then still leave build_conditional
as an advanced option for those that want to build their own condition
statement using any autoconf code they want.

I also have ldflags=${LTLIBV8} in plugin.ini. With the above change,
this could be automatically added by pandora-build too.


configure.ac magic:

Ok, so I proceeded to build my module that links against libv8.so. A
few more problems:

At first, .configure is not checking for libv8.so at all, so the above
build_dependency means my module is never built. With my proposed
changed above, you should make "required=" default to "yes", so that
in all such situations the build will stop and user will see what the
error is. required=no would then be a conscious action by the dev to
allow the build to proceed.

Even though there is no documentation, I'm a smart guy so after an
hour of random ls and grep, I realize I need to create a file
m4/pandora_have_libv8.m4 So I pick a simple one and make a copy and
replace libsomethingelse with libv8.

Nothing happens. Since I've never understood what all the layers in
autotools work, it takes me quite long to understand I need to add a
line in configure.ac to actually include the check for libv8. If
you're trying to create a build system for those of us who are unable
to understand autotools, I'd suggest:

Simple: pandora-build makes sure all tests in m4/ are run in
configure.ac. (Either by including them or erroring out with clear
message when you need to add something to configure.ac or somewhere
else.)

More advanced: a repository of tests (as copied from bzr branch
lp:pandora-build) exist in m4/test-repository/ and those you want to
run are symlinked from m4/enabled-tests/. Pandora-build makes sure all
tests in m4/enabled-tests/ are run in configure.ac.


gcc vs g++:

Drizzle is compiled as C++, and v8 is C++. But the pandora_have* tests
default to gcc (C) so my test fails and again build_conditional is
false. I eventually learn from google I must add AC_LANG_CPLUSPLUS to
my m4 file. I have no idea if/how this is possible, but it could be a
nice feature that if the project being built is C++, then either this
should have just worked or I would have gotten an error. Of course,
this is quite a rare problem to be honest, but I mention it for
completeness.

That was all. After 12 hours wasted by this kind of routine autotools
mess (helped by pandora-build, but made worse by no documentation) I
got my new drizzle plugin to build. Things are quite slow at work so I
don't mind, just wanted to give feedback.

henrik
-- 
henrik.i...@avoinelama.fi
+358-40-8211286 skype: henrik.ingo irc: hingo
www.openlife.cc

My LinkedIn profile: http://www.linkedin.com/profile/view?id=9522559

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : drizzle-discuss@lists.launchpad.net
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to