I've been looking over the various code in my build scripts to cope with JCC variations necessary to build PyLucene, and I wonder if some of it might not be better pushed back into the JCC package itself. I've attached the portion of my Linux build script to show you what I mean.
This seems to me both brittle and bizarre (yes, it's a csh script). Couldn't some of this be put into JCC, and some into a configure script for PyLucene? A good chunk is coping with setuptools, which might be pushed into the setup.py file for JCC. And adding a wrapper tool, say called "jcc", for use in the PyLucene Makefile, might also be a good thing; it could know where Java is, make sure the target install directory is on the PYTHONPATH, for instance, and handle the difference in jcc invocations. And I haven't even looked at 3.x yet... Bill # figure out site-packages location. We need to know this because # we need to use setuptools if we are going to support the # "--shared" option in JCC, which we need, and setuptools is broken # in that it thinks we are children playing with matches and won't # install into directories that aren't on our sys.path *already*, # even if we're not currently using things from that directory. So # we need to figure out where setuptools will put this, so that we # can use "--shared" with JCC. # Most unices use site-packages, but one of them uses dist-packages set sitedir=`${python} -c "import sys; print [x for x in sys.path if (x.endswith('/site-packages') or x.endswith('/dist-packages'))][0]"` set py_major=`${python} -c "import sys; print sys.version_info[0]"` set py_minor=`${python} -c "import sys; print sys.version_info[1]"` # 64-bit libraries go into lib64, not lib set arch=`${python} -c "import platform; print platform.uname()[4]"` if (($arch == "x86_64") || ($arch == "amd64")) then set libdir="lib64" else set libdir="lib" endif # let's hope setuptools figures it the same way! set sitespot=${distdir}/${libdir}/python${py_major}.${py_minor}/site-packages if (! -d ${sitespot}) then mkdir -p ${sitespot} endif # finally make setuptools happy by making sure this is on our PYTHONPATH setenv PYTHONPATH ${sitespot} # now, we need to make sure we have the properly patched version of # setuptools. So just re-install setuptools after adding the patch. cd ../setuptools-* if ( -e ../pylucene-*/jcc/jcc/patches/patch.43.0.6c7 ) then patch -Nup0 < ../pylucene-*/jcc/jcc/patches/patch.43.0.6c7 else if ( -e ../pylucene-*/jcc/jcc/patches/patch.43 ) then patch -Nup0 < ../pylucene-*/jcc/jcc/patches/patch.43 endif python setup.py build python setup.py install --prefix=${distdir} # we need to know where java is, to build PyLucene. There's no good # way to know this, on Linux, so UpLib added a script that looks in all the # usual places, and works about 70% of the time. set javahome=`${python} ../uplib-*/unix/linux/figure-linux-java.py` echo "JAVA_HOME is ${javahome}" # We need to know whether Python supports the -m commandline flag. # There are (of course) three different flavors: -m jcc.__main__, -m jcc, and something old. set moduleflag=`${python} -c "import sys; print ((sys.version_info >= (2, 6)) and '2') or ((sys.version_info >= (2, 5)) and '1') or '0'"` cd ../pylucene-*/jcc setenv JCC_ARGSEP ";" setenv JCC_INCLUDES "${javahome}/include;${javahome}/include/linux" if (($arch == "x86_64") || ($arch == "amd64")) then setenv JCC_LFLAGS "-L${javahome}/jre/lib/amd64;-ljava;-L${javahome}/jre/lib/amd64/server;-ljvm;-Wl,-rpath=${javahome}/jre/lib/amd64:${javahome}/jre/lib/amd64/server" else setenv JCC_LFLAGS "-L${javahome}/jre/lib/i386;-ljava;-L${javahome}/jre/lib/i386/client;-ljvm;-Wl,-rpath=${javahome}/jre/lib/i386:${javahome}/jre/lib/i386/client" endif setenv PYTHONPATH ${sitespot} ${python} setup.py install --prefix=${distdir} cd .. setenv JAVA_HOME "$javahome" if ($moduleflag == "2") then set JCCCOMMAND="${python} -m jcc.__main__ --shared" else if ($moduleflag == "1") then set JCCCOMMAND="${python} -m jcc --shared" else set jccpath=./jcc/build/lib.*/jcc setenv PYTHONPATH ${PYTHONPATH}:${jccpath} set JCCCOMMAND="${python} ${jccpath}/__init__.py --shared" endif make PREFIX_PYTHON=/usr ANT=ant PYTHON=${python} JCC="${JCCCOMMAND}" NUM_FILES=1 make PREFIX_PYTHON=/usr ANT=ant PYTHON=${python} JCC="${JCCCOMMAND}" NUM_FILES=1 install INSTALL_OPT="--prefix '${distdir}'" set lucenejar=`pwd`/build/lucene/lucene-core-*jar echo "lucenejar is $lucenejar" setenv PYTHONPATH ${sitespot}