2011/3/31 Ignaz Birnstingl <ign...@gmail.com>:
> 2011/3/30 Ben Noordhuis <i...@bnoordhuis.nl>:
>> On Wed, Mar 30, 2011 at 16:25, Ignaz Birnstingl <ign...@gmail.com> wrote:
>>> we are trying to develop a proprietary (i.e. closed-source, binary-shipped)
>>> Apache module and have run into troubles with binary incompatibilities
>>> because of APR_HAS_LARGE_FILES being either 0 or 1. I have only found
>>> http://osdir.com/ml/apache.apr.devel/2003-05/msg00028.html but this does not
>>> exactly describe our problem.
>>> The problem is that depending on APR_HAS_LARGE_FILES the sizes and offsets
>>> of structs (e.g. request_rec) change, breaking binary compatibility. Now we
>>> could compile the module twice - once with large file support and once
>>> without large file support but this leads to yet more binaries we would have
>>> to ship (32/64bit, Apache2.0/2.2, LFS=0/LFS=1). Besides, I guess most
>>> customers do not know/care if their httpd was compiled with LFS or without.
>>>
>>> So my question: How do you handle these kinds of problems? (Are there any
>>> proprietary Apache modules out there? ;-)) Are there some best practices or
>>> is there something I am missing? Is there a way to find out at run-time if
>>> httpd was compiled with LFS or without?
>>
>> If you have to ship a binary blob, you are probably best off shipping
>> a module for each supported platform and supply some glue source code
>> that loads the appropriate module at runtime, akin to what the NVIDIA
>> Linux driver does.
>>
>> But if you are going to support a multitude of platforms and
>> architectures, you really should reconsider your 'binary only' policy.
>> I assure you support is going to be a royal pain, not to mention the
>> irate customers. This is the voice of experience speaking.
>>
>
> Thank you for the hint - I guess we will have to develop something
> like a mod_stable_abi which offers a stable binary interface
> (get_uri_from_request(void *request_rec), ... *sigh*), loads our blob
> at run-time and which can be compiled with apxs (or statically if
> mod_so is missing).
>
> As for shipping the source: Compiling our module is not very easy (as
> it is developed in C++ and incorporates different libraries, including
> a static version of APR 1.3.9) and definitely not possible with apxs.
> I don't think it would be any easier for our customers to compile it
> themselves besides the obvious issue that not every web server
> administrator has the necessary build environment installed and we do
> not want to support all build environments (compilers, linkers) out
> there.
>
> --
> Ignaz
>

Just to clarify: I confused the Windows and Unix header files when
choosing the title of this discussion. What I meant was that apr_off_t
gets typedef'ed to either off64_t, off_t or long. This caused the
binary incompatibility at our module (we built it with
apr_off_t=off64_t while on another Linux box httpd was compiled with
apr_off_t=long).

-- 
Ignaz

Reply via email to