Re: Handling APR_HAS_LARGE_FILES

2011-04-04 Thread Ignaz Birnstingl
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


Handling APR_HAS_LARGE_FILES

2011-03-30 Thread Ignaz Birnstingl
Hello,

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?

Thanks,
Ignaz


Re: Handling APR_HAS_LARGE_FILES

2011-03-30 Thread Ben Noordhuis
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.