It seems the most critical point of my earlier post was missed...

On Mon, Jun 6, 2016 at 10:08 AM, <wr...@apache.org> wrote:

> Author: wrowe
> Date: Mon Jun  6 15:08:01 2016
> New Revision: 1747027
>
> URL: http://svn.apache.org/viewvc?rev=1747027&view=rev
> Log:
> Showstopper to patch adoption, along with a more general objection
>
> Modified:
>     httpd/httpd/branches/2.4.x/STATUS
>
> Modified: httpd/httpd/branches/2.4.x/STATUS
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/STATUS?rev=1747027&r1=1747026&r2=1747027&view=diff
>
> ==============================================================================
> --- httpd/httpd/branches/2.4.x/STATUS (original)
> +++ httpd/httpd/branches/2.4.x/STATUS Mon Jun  6 15:08:01 2016
> @@ -203,7 +203,20 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK:
>       2.4.x patch:
> http://home.apache.org/~jailletc36/apr_cstr_casecmp_v2.diff
>       jailletc36: v2: update as per discussion on dev@. Do not mix ap_
> and apr_
>                   namespaces + tweak DOXYGEN comments.
> -     +1: jailletc36, icing
> +     +1: jailletc36, icing
> +     -0: wrowe [Prefer that we pre-@deprecate this API and encourage
> users
> +                to adopt the apr_ convention, reversing the #defines,
> being
> +                ready for the httpd 2.next minor release.]
> +     -1: wrowe [Notes this patch creates binary incompatible versions of
> httpd
> +                with this change; there must be #else stubs in util.c
> sources
> +                compiled against APR 1.6+ for binary compatibility, even
> if
> +                these are simply;
> +                AP_DECLARE(int) ap_cstr_casecmpn(const char *s1,
> +                                                 const char *s2,
> apr_size_t n)
> +                {
> +                    return apr_cstr_casecmpn(s1, s2, n);
> +                }
> +               ]
>

You cannot have httpd build in such a way that when one exigent circumstance
changes,  the resulting httpd binary is now a different binary with
different
exported symbols.

E.g.

  1. Install apr-1.5
  2. Build httpd 2.4.recent
  3. Build thirdparty mod_foo, referencing ap_cstr_casecmp()
  4. Pick up, build and install apr-1.6
  5. Pick up httpd 2.4.latest, build and install over 2.4.recent
  6. Start httpd.  LoadModule mod_foo fails, ap_cstr_casecmp() unresolved
  7. httpd fails to start.

We have a contract with third party modules that, once built against 2.4.x,
the will continue to work unmodified when loaded in 2.4.x+1.

It's a lesson from Compatibility 101.

Reply via email to