Updated Branches: refs/heads/COUCHDB-1426 56a00ede8 -> 64a163472 (forced update)
COUCHDB-1426 Ensure use of specified SpiderMonkey There were a few bugs in configuration settings when users specified --with-js-include and --with-js-lib for custom SpiderMonkey installations when a SpiderMonkey library is installed globally. This patch addresses this by reordering configuration checks to use the specified variables without adding information from pkg-config checks or from default settings. There is also a new setting --with-js-lib-name which is required due to SpiderMonkey having so many names for its libraries. If configuration or building fails the most likely scenario is that it picked up an older installed SpiderMonkey in the library search path. To fix you should only need to add --with-js-lib-name with the value that should be passed to the linker. Ie, -lfoo would be set as "--with-js-lib-name=foo". Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/64a16347 Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/64a16347 Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/64a16347 Branch: refs/heads/COUCHDB-1426 Commit: 64a1634725ee1ef1e8ee182e4960a027a513265a Parents: 589a923 Author: Paul Joseph Davis <[email protected]> Authored: Tue Mar 13 20:44:45 2012 -0500 Committer: Paul Joseph Davis <[email protected]> Committed: Wed Mar 14 17:20:32 2012 -0500 ---------------------------------------------------------------------- configure.ac | 114 ++++++++++++++++++++++--------------- src/couchdb/priv/Makefile.am | 1 + 2 files changed, 68 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/64a16347/configure.ac ---------------------------------------------------------------------- diff --git a/configure.ac b/configure.ac index 30a1d65..1f43713 100644 --- a/configure.ac +++ b/configure.ac @@ -112,6 +112,20 @@ else AC_MSG_RESULT([no]) fi +AC_ARG_VAR([ERLC_FLAGS], [general flags to prepend to ERLC_FLAGS]) +AC_ARG_VAR([FLAGS], [general flags to prepend to LDFLAGS and CPPFLAGS]) +AS_CASE([$(uname -s)], + [CYGWIN*], [] , + [*], [ + CPPFLAGS="$CPPFLAGS -I/opt/local/include" + CPPFLAGS="$CPPFLAGS -I/usr/local/include" + CPPFLAGS="$CPPFLAGS -I/usr/include" + LDFLAGS="$LDFLAGS -L/opt/local/lib" + LDFLAGS="$LDFLAGS -L/usr/local/lib" +]) +CPPFLAGS="$CPPFLAGS $FLAGS" +LDFLAGS="$LDFLAGS $FLAGS" + AC_PATH_PROG([ERL], [erl]) AS_IF([test x${ERL} = x], [ AC_MSG_ERROR([Could not find the `erl' executable. Is Erlang installed?]) @@ -137,13 +151,34 @@ AC_ARG_WITH([erlang], [AC_HELP_STRING([--with-erlang=PATH], ]) AC_SUBST(ERLANG_FLAGS) -PKG_CHECK_MODULES([JS], [mozjs185], [ +AC_ARG_WITH([js-lib], [AC_HELP_STRING([--with-js-lib=PATH], + [set PATH to the SpiderMonkey library directory])], + [ + JS_LIB_DIR=$withval +], [ + PKG_CHECK_MODULES([JS], [mozjs185], [ JS_LIB_DIR="$(${PKG_CONFIG} --variable=libdir mozjs185)" + ], [ + PKG_CHECK_MODULES([JS], [mozilla-js >= 1.7], [ + JS_LIB_DIR="$(${PKG_CONFIG} --variable=sdkdir mozilla-js)/lib" + ], [ + JS_LIB_DIR="${libdir}" + ]) + ]) +]) +JS_LDFLAGS="-L$JS_LIB_DIR $LDFLAGS" + + +AC_ARG_WITH([js-include], [AC_HELP_STRING([--with-js-include=PATH], + [set PATH to the SpiderMonkey include directory])], [ + JS_INCLUDE="$withval" + JS_CFLAGS="-I$JS_INCLUDE" + JS_CFLAGS="$JS_CFLAGS -I$JS_INCLUDE/js" + JS_CFLAGS="$JS_CFLAGS -I$JS_INCLUDE/mozjs" ], [ - PKG_CHECK_MODULES([JS], [mozilla-js >= 1.7], [ - JS_LIB_DIR="$(${PKG_CONFIG} --variable=sdkdir mozilla-js)/lib" + PKG_CHECK_MODULES([JS], [mozjs185], [ + JS_CFLAGS="-I$(${PKG_CONFIG} --cflags mozjs185)" ], [ - JS_LIB_DIR="${libdir}" JS_CFLAGS="-I/usr/include" JS_CFLAGS="$JS_CFLAGS -I/usr/include/js" JS_CFLAGS="$JS_CFLAGS -I/usr/include/mozjs" @@ -152,42 +187,12 @@ PKG_CHECK_MODULES([JS], [mozjs185], [ ]) ]) -AC_ARG_WITH([js-include], [AC_HELP_STRING([--with-js-include=PATH], - [set PATH to the SpiderMonkey include directory])], [ - JS_INCLUDE="$withval" - JS_CFLAGS="-I$JS_INCLUDE" -], []) - -AC_ARG_WITH([js-lib], [AC_HELP_STRING([--with-js-lib=PATH], - [set PATH to the SpiderMonkey library directory])], - [ - JS_LIB_DIR=$withval - JS_LIBS="-L$withval" -], []) - use_js_trunk=no AC_ARG_ENABLE([js-trunk], [AC_HELP_STRING([--enable-js-trunk], [allow use of SpiderMonkey versions newer than js185-1.0.0])], [ use_js_trunk=$enableval ], []) -AC_ARG_VAR([ERLC_FLAGS], [general flags to prepend to ERLC_FLAGS]) -AC_ARG_VAR([FLAGS], [general flags to prepend to LDFLAGS and CPPFLAGS]) -AS_CASE([$(uname -s)], - [CYGWIN*], [] , - [*], [ - CPPFLAGS="$CPPFLAGS -I/opt/local/include" - CPPFLAGS="$CPPFLAGS -I/opt/local/include/js" - CPPFLAGS="$CPPFLAGS -I/usr/local/include" - CPPFLAGS="$CPPFLAGS -I/usr/local/include/js" - CPPFLAGS="$CPPFLAGS -I/usr/include" - CPPFLAGS="$CPPFLAGS -I/usr/include/js" - LDFLAGS="$LDFLAGS -L/opt/local/lib" - LDFLAGS="$LDFLAGS -L/usr/local/lib" -]) -CPPFLAGS="$CPPFLAGS $FLAGS" -LDFLAGS="$LDFLAGS $FLAGS" - # The erlang cc.sh/ld.sh scripts will convert a -O option # into the same optimization flags erlang itself uses. CFLAGS="-O2 $CFLAGS" @@ -206,10 +211,12 @@ AS_CASE([$(uname -s)], AM_CONDITIONAL([WINDOWS], [test x$IS_WINDOWS = xTRUE]) -OLD_LIBS="$LIBS" -LIBS="$JS_LIBS $LIBS" OLD_CPPFLAGS="$CPPFLAGS" +OLD_LDFLAGS="$LDFLAGS" +OLD_LIBS="$LIBS" CPPFLAGS="$JS_CFLAGS $CPPFLAGS" +LDFLAGS="$JS_LDFLAGS" +LIBS="$JS_LIBS $LIBS" AC_CHECK_HEADER([jsapi.h], [], [ AC_CHECK_HEADER([js/jsapi.h], @@ -222,15 +229,24 @@ AC_CHECK_HEADER([jsapi.h], [], [ Are the Mozilla SpiderMonkey headers installed?]) ])]) -AC_CHECK_LIB([mozjs185], [JS_NewContext], [JS_LIB_BASE=mozjs185], [ - AC_CHECK_LIB([mozjs185-1.0], [JS_NewContext], [JS_LIB_BASE=mozjs185-1.0], [ - AC_CHECK_LIB([mozjs], [JS_NewContext], [JS_LIB_BASE=mozjs], [ - AC_CHECK_LIB([js], [JS_NewContext], [JS_LIB_BASE=js], [ - AC_CHECK_LIB([js3250], [JS_NewContext], [JS_LIB_BASE=js3250], [ - AC_CHECK_LIB([js32], [JS_NewContext], [JS_LIB_BASE=js32], [ - AC_MSG_ERROR([Could not find the js library. +AC_ARG_WITH([js-lib-name], [AC_HELP_STRING([--with-js-lib-name=NAME], + [set Spidermonkey library NAME])], [ + JS_LIB_BASE="$withval" + AC_CHECK_LIB([$JS_LIB_BASE], JS_NewObject, [], [ + AC_MSG_ERROR([Could not find the Spidermonkey library. + +Did you specify the correct library name?])]) + ], [ + AC_CHECK_LIB(mozjs, [JS_NewObject], [JS_LIB_BASE=mozjs], [ + AC_CHECK_LIB(js, [JS_NewObject], [JS_LIB_BASE=js], [ + AC_CHECK_LIB([js3250], [JS_NewObject], [JS_LIB_BASE=js3250], [ + AC_CHECK_LIB([js32], [JS_NewObject], [JS_LIB_BASE=js32], [ + AC_CHECK_LIB([mozjs185-1.0], [JS_NewObject], [JS_LIB_BASE=mozjs185-1.0], [ + AC_CHECK_LIB(mozjs185, [JS_NewObject], [JS_LIB_BASE=mozjs185], [ + AC_MSG_ERROR([Could not find the js library. Is the Mozilla SpiderMonkey library installed?])])])])])])]) +]) # Figure out what version of SpiderMonkey to use @@ -318,12 +334,16 @@ if test x${IS_WINDOWS} = xTRUE; then fi fi -JS_LIBS="-l$JS_LIB_BASE -lm $JS_LIBS" -AC_SUBST(JS_LIBS) - -LIBS="$OLD_LIBS" +JS_CFLAGS="$CPPFLAGS" +JS_LDFLAGS="$LDFLAGS" +JS_LIBS="-l$JS_LIB_BASE -lm $LIBS" CPPFLAGS="$OLD_CPPFLAGS" +LDFLAGS="$OLD_LDFLAGS" +LIBS="$OLD_LIBS" +AC_SUBST(JS_CFLAGS) +AC_SUBST(JS_LDFLAGS) +AC_SUBST(JS_LIBS) AC_ARG_WITH([win32-icu-binaries], [AC_HELP_STRING([--with-win32-icu-binaries=PATH], [set PATH to the Win32 native ICU binaries directory])], [ http://git-wip-us.apache.org/repos/asf/couchdb/blob/64a16347/src/couchdb/priv/Makefile.am ---------------------------------------------------------------------- diff --git a/src/couchdb/priv/Makefile.am b/src/couchdb/priv/Makefile.am index 704e870..ac02791 100644 --- a/src/couchdb/priv/Makefile.am +++ b/src/couchdb/priv/Makefile.am @@ -61,6 +61,7 @@ COUCHJS_SRCS = \ locallibbin_PROGRAMS = couchjs couchjs_SOURCES = $(COUCHJS_SRCS) couchjs_CFLAGS = -g -Wall -Werror -D_BSD_SOURCE $(CURL_CFLAGS) $(JS_CFLAGS) +couchjs_LDFLAGS = $(JS_LDFLAGS) couchjs_LDADD = $(CURL_LIBS) $(JS_LIBS) couchpriv_DATA = stat_descriptions.cfg
