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}

Reply via email to