On Nov 9, 2008, at 6:43 AM, Max Bowsher wrote:

Alan D. Cabrera wrote:
On Nov 8, 2008, at 2:55 PM, Max Bowsher wrote:
The difficulty is that there is no standard on how to manage the
multitude of flavours of native binaries that are possible.

For example, there's architecture and OS that need to be considered, but for all but then you start to get things like C library version being involved. If you are looking to do anything with apr-util as well as apr itself, then the problem explodes with the number of extra dependencies.

I was thinking that the artifact name could be

apr-<osname>-<processor>

e.g. apr-linux-x86_64.   Or we can have a more general

apr-<osname>-<processor>-<configuration>

where configuration is a token that represents a particular
configuration of options, e.g. apr-msdos-8086-aztecc.

This is the right place to start (though may I suggest <arch>-<os>
rather than <os>-<arch>, for consistency with the prior art that I'm
aware of, namely autoconf-style system names and the
freehep-nar-maven-plugin).

(There's also the question of what architecture/processor naming scheme
to use - amd64 vs. x86_64, i386 vs. i586 vs. i686, etc. - "dpkg
--print-architecture", "uname -m", and Java's os.arch manage to be
inconsistent more often than not.)

I'm not sure that we need to choose one over the other. Let me ask you this, why would we need fine grained detail such as "i386 vs. i586 vs. i686"? Is that really necessary?

More of an issue, though, is the dependencies on other system libraries,
and what versions thereof, the APR artifact may have. For example, the
APR shared lib on my Ubuntu system depends on glibc >= 2.4, and libuuid1.

This means it won't work on Debian etch / Ubuntu dapper, for example, or other distros of similar age, nor would it work if libuuid1 was missing
- quite unlikely, I admit, but possible.

Whilst these dependencies are not *that* onerous, especially once Debian
lenny succeeds etch as stable, they do illustrate the problem.

I'm not sure why APR would allow such a system dependancy. APR is supposed to make application developers' lives easier. Why would I have to worry about libuuid1 missing? I'm new to APR and am getting my head around what it will and will not do for me.

In particular, beware that the specific version of glibc required isn't
something determined just by the apr source, but by the version being
compiled against, and even the compiler flags being used.

For example, if the chosen option was to force a glibc 2.3.x compatible
build, I believe that forcing HAVE_PTHREAD_MUTEX_ROBUST to off and
setting the -fno-stack-protector compiler option would disable the
features that currently cause us to require glibc 2.4 at run-time if
present at compile-time.

That might be a viable option for producing an adequately compatible
binary for Maven deployment.

Version 2.3.x strikes me as really old. Unless I'm missing something, we, in my case, won't have to deal with that corner case.

Leaving aside the compatibility issues for a moment, what is the
intended method for Maven projects to depend on the APR artifacts? Would
they need to specify a specific flavour hardcoded in their POM
(potentially conditionalized with a long series of profiles, though this likely wouldn't be flexible enough to do a completely satisfactory job)?
Or is there a better way that I'm unaware of?

I think in this case, my case, we only need to worry about a few stock configurations, e.g. Linux and Windows. For me that would handle 99.9% of my universe. More exotic configurations can use the naming conventions that we are currently working out and publish on an as needed basis; I don't anticipate this happening often.

To give some more color to what I want to do, I want to make OSGi bundles for APR. I would use OSGi's native code loading mechanism to "dispatch" the correct library.

I have to admit that "wrinkles" that you presented above seem to be rare corner cases in my world.


Regards,
Alan



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to