2 # Makefile for building PyLucene
 
   4 # Supported operating systems: Mac OS X, Linux and Windows.
 
   5 # See INSTALL file for requirements.
 
   6 # See jcc/INSTALL for information about --shared.
 
   9 #   1. Edit the sections below as documented
 
  10 #   2. Edit the JARS variable to add optional contrib modules not defaulted
 
  14 # The install target installs the lucene python extension in python's
 
  15 # site-packages directory.
 
  21 LUCENE_SVN=http://svn.apache.org/repos/asf/lucene/dev/tags/lucene_solr_3_5_0
 
  22 PYLUCENE:=$(shell pwd)
 
  23 LUCENE_SRC=lucene-java-$(LUCENE_VER)
 
  24 LUCENE=$(LUCENE_SRC)/lucene
 
  27 # You need to uncomment and edit the variables below in the section
 
  28 # corresponding to your operating system.
 
  30 # Windows drive-absolute paths need to be expressed cygwin style.
 
  32 # PREFIX: where programs are normally installed on your system (Unix).
 
  33 # PREFIX_PYTHON: where your version of python is installed.
 
  34 # JCC: how jcc is invoked, depending on the python version:
 
  38 #      $(PYTHON) -m jcc.__main__
 
  42 #      $(PYTHON) $(PREFIX_PYTHON)/lib/python2.4/site-packages/jcc/__main__.py
 
  43 # NUM_FILES is the number of wrapper files to generate. By default, jcc
 
  44 # generates all C++ classes into one single file. This may exceed a compiler
 
  48 # Mac OS X 10.6 (64-bit Python 2.6, Java 1.6)
 
  51 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  52 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64
 
  55 # Mac OS X 10.6 (MacPorts 1.8.0 64-bit Python 2.7, Java 1.6)
 
  56 #PREFIX_PYTHON=/opt/local
 
  58 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  59 #JCC=$(PYTHON) -m jcc --shared --arch x86_64
 
  62 # Mac OS X 10.6 (MacPorts 1.8.0 64-bit Python 2.6, Java 1.6)
 
  63 #PREFIX_PYTHON=/opt/local
 
  65 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  66 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64
 
  69 # Mac OS X 10.6 (64-bit and 32-bit Python 2.6 together, Java 1.6)
 
  72 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  73 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64 --arch i386
 
  76 # Mac OS X 10.5 (32-bit Python 2.5, Java 1.5)
 
  79 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  80 #JCC=$(PYTHON) -m jcc --shared
 
  83 # Mac OS X  (Python 2.3.5, Java 1.5, setuptools 0.6c7, Intel Mac OS X 10.4)
 
  86 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  87 #JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.3-py2.3-macosx-10.4-i386.egg/jcc/__init__.py
 
  90 # Mac OS X  (Python 2.3.5, Java 1.5, setuptools 0.6c7, PPC Mac OS X 10.4)
 
  93 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
  94 #JCC=$(PYTHON) /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/JCC-2.3-py2.3-macosx-10.4-ppc.egg/jcc/__init__.py
 
  97 # Linux     (Ubuntu 6.06, Python 2.4, Java 1.5, no setuptools)
 
 100 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
 101 #JCC=$(PYTHON) $(PREFIX_PYTHON)/lib/python2.4/site-packages/jcc/__init__.py
 
 104 # Linux     (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9)
 
 107 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
 108 #JCC=$(PYTHON) -m jcc --shared
 
 111 PREFIX_PYTHON=$(VIRTUAL_ENV)
 
 113 PYTHON=$(PREFIX_PYTHON)/bin/python
 
 114 JCC=$(PYTHON) -m jcc.__main__ --shared
 
 120 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
 121 #JCC=$(PYTHON) -m jcc
 
 124 # Solaris   (Solaris 11, Python 2.4 32-bit, Sun Studio 12, Java 1.6)
 
 126 #ANT=/usr/local/apache-ant-1.7.0/bin/ant
 
 127 #PYTHON=$(PREFIX_PYTHON)/bin/python
 
 128 #JCC=$(PYTHON) $(PREFIX_PYTHON)/lib/python2.4/site-packages/jcc/__init__.py
 
 131 # Windows   (Win32, Python 2.5.1, Java 1.6, ant 1.7.0)
 
 132 #PREFIX_PYTHON=/cygdrive/o/Python-2.5.2/PCbuild
 
 133 #ANT=JAVA_HOME=o:\\Java\\jdk1.6.0_02 /cygdrive/o/java/apache-ant-1.7.0/bin/ant
 
 134 #PYTHON=$(PREFIX_PYTHON)/python.exe
 
 135 #JCC=$(PYTHON) -m jcc --shared
 
 138 # Windows   (Win32, msys/MinGW, Python 2.6.4, Java 1.6, ant 1.7.1 (WinAnt))
 
 139 #PREFIX_PYTHON=/c/Python26
 
 140 #ANT=JAVA_HOME="c:\\Program Files\\Java\\jdk1.6.0_18" "/c/Program Files/WinAnt/bin/ant"
 
 141 #PYTHON=$(PREFIX_PYTHON)/python.exe
 
 142 #JCC=$(PYTHON) -m jcc.__main__ --shared --compiler mingw32
 
 145 # Windows   (Win32, Python 2.7, Java 1.6, ant 1.8.1, Java not on PATH)
 
 146 #PREFIX_PYTHON=/cygdrive/c/Python27
 
 147 #ANT=JAVA_HOME=c:\\jdk1.6.0_22 /cygdrive/c/java/apache-ant-1.8.1/bin/ant
 
 148 #PYTHON=$(PREFIX_PYTHON)/python.exe
 
 149 #JCC=$(PYTHON) -m jcc --shared --find-jvm-dll
 
 154 # comment/uncomment the desired/undesired optional contrib modules below
 
 155 JARS+=$(ANALYZERS_JAR)          # many language analyzers
 
 156 JARS+=$(MEMORY_JAR)             # single-document memory index
 
 157 JARS+=$(HIGHLIGHTER_JAR)        # needs memory contrib
 
 158 JARS+=$(EXTENSIONS_JAR)         # needs highlighter contrib
 
 159 JARS+=$(QUERIES_JAR)            # regex and other contrib queries
 
 161 #JARS+=$(SMARTCN_JAR)            # smart chinese analyzer
 
 162 #JARS+=$(SPATIAL_JAR)            # spatial lucene
 
 163 JARS+=$(GROUPING_JAR)           # grouping module
 
 164 JARS+=$(JOIN_JAR)               # join module
 
 165 JARS+=$(FACET_JAR)              # facet module
 
 166 JARS+=$(SPELLCHECKER_JAR)       # spellchecker/suggest module
 
 170 # No edits required below
 
 179 DEFINES=-DPYLUCENE_VER="\"$(VERSION)\"" -DLUCENE_VER="\"$(LUCENE_VER)\""
 
 181 LUCENE_JAR=$(LUCENE)/build/lucene-core-$(LUCENE_VER).jar
 
 182 ANALYZERS_JAR=$(LUCENE)/build/contrib/analyzers/common/lucene-analyzers-$(LUCENE_VER).jar
 
 183 HIGHLIGHTER_JAR=$(LUCENE)/build/contrib/highlighter/lucene-highlighter-$(LUCENE_VER).jar
 
 184 MEMORY_JAR=$(LUCENE)/build/contrib/memory/lucene-memory-$(LUCENE_VER).jar
 
 185 QUERIES_JAR=$(LUCENE)/build/contrib/queries/lucene-queries-$(LUCENE_VER).jar
 
 186 EXTENSIONS_JAR=build/jar/extensions.jar
 
 187 SMARTCN_JAR=$(LUCENE)/build/contrib/analyzers/smartcn/lucene-smartcn-$(LUCENE_VER).jar
 
 188 STEMPEL_JAR=$(LUCENE)/build/contrib/analyzers/stempel/lucene-stempel-$(LUCENE_VER).jar
 
 189 SPATIAL_JAR=$(LUCENE)/build/contrib/spatial/lucene-spatial-$(LUCENE_VER).jar
 
 190 GROUPING_JAR=$(LUCENE)/build/contrib/grouping/lucene-grouping-$(LUCENE_VER).jar
 
 191 JOIN_JAR=$(LUCENE)/build/contrib/join/lucene-join-$(LUCENE_VER).jar
 
 192 FACET_JAR=$(LUCENE)/build/contrib/facet/lucene-facet-$(LUCENE_VER).jar
 
 193 SPELLCHECKER_JAR=$(LUCENE)/build/contrib/spellchecker/lucene-spellchecker-$(LUCENE_VER).jar
 
 195 ICUPKG:=$(shell which icupkg)
 
 197 .PHONY: generate compile install default all clean realclean \
 
 198         sources test jars distrib
 
 203         mkdir -p $(LUCENE_SRC)
 
 204         svn $(SVNOP) -r $(LUCENE_SVN_VER) $(LUCENE_SVN)/lucene $(LUCENE_SRC)/lucene
 
 206 sources: $(LUCENE_SRC)
 
 209         mkdir -p $(LUCENE)-orig
 
 210         tar -C $(LUCENE) -cf - . | tar -C $(LUCENE)-orig -xvf -
 
 212 from-orig: $(LUCENE)-orig
 
 214         tar -C $(LUCENE)-orig -cf - . | tar -C $(LUCENE) -xvf -
 
 218         $(MAKE) $(LUCENE_JAR)
 
 220 $(LUCENE_JAR): $(LUCENE)
 
 221         cd $(LUCENE); $(ANT) -Dversion=$(LUCENE_VER)
 
 223 $(ANALYZERS_JAR): $(LUCENE_JAR)
 
 224         cd $(LUCENE)/contrib/analyzers/common; $(ANT) -Dversion=$(LUCENE_VER)
 
 226 $(MEMORY_JAR): $(LUCENE_JAR)
 
 227         cd $(LUCENE)/contrib/memory; $(ANT) -Dversion=$(LUCENE_VER)
 
 229 $(HIGHLIGHTER_JAR): $(LUCENE_JAR)
 
 230         cd $(LUCENE)/contrib/highlighter; $(ANT) -Dversion=$(LUCENE_VER)
 
 232 $(QUERIES_JAR): $(LUCENE_JAR)
 
 233         cd $(LUCENE)/contrib/queries; $(ANT) -Dversion=$(LUCENE_VER)
 
 235 $(EXTENSIONS_JAR): $(LUCENE_JAR)
 
 236         $(ANT) -f extensions.xml -Dlucene.dir=$(LUCENE)
 
 238 $(SMARTCN_JAR): $(LUCENE_JAR)
 
 239         cd $(LUCENE)/contrib/analyzers/smartcn; $(ANT) -Dversion=$(LUCENE_VER)
 
 241 $(STEMPEL_JAR): $(LUCENE_JAR)
 
 242         cd $(LUCENE)/contrib/analyzers/stempel; $(ANT) -Dversion=$(LUCENE_VER)
 
 244 $(SPATIAL_JAR): $(LUCENE_JAR)
 
 245         cd $(LUCENE)/contrib/spatial; $(ANT) -Dversion=$(LUCENE_VER)
 
 247 $(GROUPING_JAR): $(LUCENE_JAR)
 
 248         cd $(LUCENE)/contrib/grouping; $(ANT) -Dversion=$(LUCENE_VER)
 
 250 $(JOIN_JAR): $(LUCENE_JAR)
 
 251         cd $(LUCENE)/contrib/join; $(ANT) -Dversion=$(LUCENE_VER)
 
 253 $(FACET_JAR): $(LUCENE_JAR)
 
 254         cd $(LUCENE)/contrib/facet; $(ANT) -Dversion=$(LUCENE_VER)
 
 256 $(SPELLCHECKER_JAR): $(LUCENE_JAR)
 
 257         cd $(LUCENE)/contrib/spellchecker; $(ANT) -Dversion=$(LUCENE_VER)
 
 266 RESOURCES=--resources $(LUCENE)/contrib/icu/src/resources
 
 267 ENDIANNESS:=$(shell $(PYTHON) -c "import struct; print struct.pack('h', 1) == '\000\001' and 'b' or 'l'")
 
 269 resources: $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.dat
 
 271 $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.dat: $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.nrm
 
 273         cd $(dir $<); $(ICUPKG) --type $(ENDIANNESS) --add $(notdir $<) new $(notdir $@)
 
 280         @echo ICU not installed
 
 284 GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
 
 286            --package java.lang java.lang.System \
 
 288            --package java.util java.util.Arrays \
 
 291                      java.text.SimpleDateFormat \
 
 292                      java.text.DecimalFormat \
 
 294            --package java.util.regex \
 
 295            --package java.io java.io.StringReader \
 
 296                              java.io.InputStreamReader \
 
 297                              java.io.FileInputStream \
 
 298            --exclude org.apache.lucene.queryParser.Token \
 
 299            --exclude org.apache.lucene.queryParser.TokenMgrError \
 
 300            --exclude org.apache.lucene.queryParser.QueryParserTokenManager \
 
 301            --exclude org.apache.lucene.queryParser.ParseException \
 
 302            --exclude org.apache.lucene.search.regex.JakartaRegexpCapabilities \
 
 303            --exclude org.apache.regexp.RegexpTunnel \
 
 304            --exclude org.apache.lucene.analysis.cn.smart.AnalyzerProfile \
 
 306            --mapping org.apache.lucene.document.Document 'get:(Ljava/lang/String;)Ljava/lang/String;' \
 
 307            --mapping java.util.Properties 'getProperty:(Ljava/lang/String;)Ljava/lang/String;' \
 
 308            --sequence java.util.AbstractList 'size:()I' 'get:(I)Ljava/lang/Object;' \
 
 309            --rename org.apache.lucene.search.highlight.SpanScorer=HighlighterSpanScorer \
 
 310            --version $(LUCENE_VER) \
 
 311            --module python/collections.py \
 
 312            --module python/ICUNormalizer2Filter.py \
 
 313            --module python/ICUFoldingFilter.py \
 
 314            --module python/ICUTransformFilter.py \
 
 322         $(GENERATE) --build $(DEBUG_OPT)
 
 325         $(GENERATE) --install $(DEBUG_OPT) $(INSTALL_OPT)
 
 331         $(GENERATE) --wininst
 
 333 all: sources jars resources compile
 
 334         @echo build of $(PYLUCENE_LIB) complete
 
 337         if test -f $(LUCENE)/build.xml; then cd $(LUCENE); $(ANT) clean; fi
 
 338         rm -rf $(LUCENE)/build build
 
 341         if test ! -d $(LUCENE)/.svn; then rm -rf $(LUCENE_SRC); else rm -rf $(LUCENE)/build; fi
 
 342         rm -rf build samples/LuceneInAction/index samples/LuceneInAction/indexes
 
 345 BUILD_TEST:=$(PYLUCENE)/build/test
 
 347 ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
 
 348   BUILD_TEST:=`cygpath -aw $(BUILD_TEST)`
 
 350   ifeq ($(findstring MINGW,$(OS)),MINGW)
 
 351     BUILD_TEST:=`$(PYTHON) -c "import os, sys; print os.path.normpath(sys.argv[1]).replace(chr(92), chr(92)*2)" $(BUILD_TEST)`
 
 356         mkdir -p $(BUILD_TEST)
 
 357         PYTHONPATH=$(BUILD_TEST) $(GENERATE) --install $(DEBUG_OPT) --install-dir $(BUILD_TEST)
 
 359 samples/LuceneInAction/index:
 
 360         cd samples/LuceneInAction; PYTHONPATH=$(BUILD_TEST) $(PYTHON) index.py
 
 362 test: install-test samples/LuceneInAction/index
 
 363         find test -name 'test_*.py' | PYTHONPATH=$(BUILD_TEST) xargs -t -n 1 $(PYTHON)
 
 364         ls samples/LuceneInAction/*Test.py | PYTHONPATH=$(BUILD_TEST) xargs -t -n 1 $(PYTHON)
 
 365         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/AnalyzerDemo.py
 
 366         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/AnalyzerUtils.py
 
 367         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/BooksLikeThis.py
 
 368         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/Explainer.py samples/LuceneInAction/index programming
 
 369         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/HighlightIt.py
 
 370         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/SortingExample.py
 
 371         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/SynonymAnalyzerViewer.py
 
 374 ARCHIVE=pylucene-$(VERSION)-src.tar.gz
 
 375 SITE=../site/build/site/en
 
 379         svn export . distrib/pylucene-$(VERSION)
 
 380         tar -cf - --exclude build $(LUCENE_SRC) | tar -C distrib/pylucene-$(VERSION) -xvf -
 
 381         mkdir distrib/pylucene-$(VERSION)/doc
 
 382         tar -C $(SITE) -cf - . | tar -C distrib/pylucene-$(VERSION)/doc -xvf -
 
 383         cd distrib; tar -cvzf $(ARCHIVE) pylucene-$(VERSION)
 
 384         cd distrib; gpg2 --armor --output $(ARCHIVE).asc --detach-sig $(ARCHIVE)
 
 385         cd distrib; openssl md5 < $(ARCHIVE) > $(ARCHIVE).md5
 
 388         cd distrib; scp -p $(ARCHIVE) $(ARCHIVE).asc $(ARCHIVE).md5 \
 
 389                            people.apache.org:public_html/staging_area
 
 392         cd distrib; scp -p $(ARCHIVE) $(ARCHIVE).asc $(ARCHIVE).md5 \
 
 393                            people.apache.org:/www/www.apache.org/dist/lucene/pylucene