On Friday, November 04, 2011 1:24 AM, "Jonathan Nieder" <jrnie...@gmail.com> wrote: > [[[ > Introduce a --enable-sqlite-compatibility-version=X.Y.Z option for > ./configure to allow people building Subversion to specify how old the > system being deployed on might be. Setting the compatibility version > to an older version turns on code in subversion that works around > infelicities in older versions and relaxes the version check ("SQLite > compiled for 3.7.4, but running with 3.7.3") at initialization time. > > If the compat version is set to a version before the minimum supported > version (3.6.18), the build will fail early so the person building can > adjust her expectations. > > The default for the compat version is the currently installed version, > so there should be no change in behavior for users not passing this > option to the configure script. > > * subversion/include/private/svn_dep_compat.h > (SVN_SQLITE_MIN_VERSION_NUMBER, SVN_SQLITE_MIN_VERSION): Set to > SQLITE_VERSION_NUMBER, SQLITE_VERSION if undefined. > (SQLITE_VERSION_AT_LEAST): Check SVN_SQLITE_MIN_VERSION_NUMBER instead > of SQLITE_VERSION_NUMBER. > > * subversion/libsvn_subr/sqlite.c (init_sqlite): Check sqlite version > against SVN_SQLITE_MIN_VERSION_NUMBER instead of SQLITE_VERSION_NUMBER. > > * configure.ac: Provide a --enable-sqlite-compatibility-version switch > that sets SVN_SQLITE_MIN_VERSION_NUMBER and SVN_SQLITE_MIN_VERSION. > > * build/ac-macros/sqlite.m4 > (SVN_SQLITE_VERNUM_PARSE): Make it reusable (in particular for > configure.ac), by taking a version string and a variable to store the > corresponding version number as arguments. > (SVN_SQLITE_MIN_VERNUM_PARSE): Simplify by calling > SVN_SQLITE_VERNUM_PARSE. > (SVN_SQLITE_PKG_CONFIG): Adapt SVN_SQLITE_VERNUM_PARSE call to the new > calling convention. > ]]] > > +++ subversion/include/private/svn_dep_compat.h (working copy) > @@ -107,6 +107,32 @@ > #endif /* SERF_VERSION_AT_LEAST */ > > +/** > + * By default, if libsvn is built against one version of SQLite > + * and then run using an older version, svn will error out: ... > +#ifndef SVN_SQLITE_MIN_VERSION_NUMBER > +#define SVN_SQLITE_MIN_VERSION_NUMBER SQLITE_VERSION_NUMBER > +#define SVN_SQLITE_MIN_VERSION SQLITE_VERSION > +#endif /* SVN_SQLITE_MIN_VERSION_NUMBER */ > +
Hmm. I wonder if we should be more paranoid here when checking/defining the macros. Probably I'm just being overly careful. > #ifdef __cplusplus > Index: configure.ac > =================================================================== > --- configure.ac (revision 1197399) > +++ configure.ac (working copy) > @@ -172,6 +172,18 @@ > SVN_LIB_SQLITE(${SQLITE_MINIMUM_VER}, ${SQLITE_RECOMMENDED_VER}, > ${SQLITE_URL}) > > +AC_ARG_ENABLE(sqlite-compatibility-version, > + AS_HELP_STRING([--enable-sqlite-compatibility-version=X.Y.Z], > + [Allow binary to run against older SQLite]), Perhaps have the help string mention how ARG is used? "Allow binary to run against SQLite as old as ARG" Also, should you forbid passing this arg when linking against a static SQLite? > + [sqlite_compat_ver=$enableval],[sqlite_compat_ver=no]) > + > +if test -n "$sqlite_compat_ver" && test "$sqlite_compat_ver" != no; then > + SVN_SQLITE_VERNUM_PARSE([$sqlite_compat_ver], > + [sqlite_compat_ver_num]) > + CFLAGS="-DSVN_SQLITE_MIN_VERSION='\"$sqlite_compat_ver\"' $CFLAGS" > + CFLAGS="-DSVN_SQLITE_MIN_VERSION_NUMBER=$sqlite_compat_ver_num $CFLAGS" > +fi > + > dnl Set up a number of directories --------------------- > > dnl Create SVN_BINDIR for proper substitution I've committed the sqlite3.m4 part in r1198169. The rest looks good too, but I'm going to wait a day or two before committing the remainder, to let people join the conversation if they have feedback. Thanks, Daniel