34b3c2fcf1976a361df5d6f2b119df713ae469c0
[pylucene.git] / Makefile
1
2 # Makefile for building PyLucene
3 #
4 # Supported operating systems: Mac OS X, Linux and Windows.
5 # See INSTALL file for requirements.
6 # See jcc/INSTALL for information about --shared.
7
8 # Steps to build
9 #   1. Edit the sections below as documented
10 #   2. Edit the JARS variable to add optional contrib modules not defaulted
11 #   3. make
12 #   4. make install
13 #
14 # The install target installs the lucene python extension in python's
15 # site-packages directory.
16 #
17
18 VERSION=3.5.0-3
19 LUCENE_SVN_VER=HEAD
20 LUCENE_VER=3.5.0
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
25
26
27 # You need to uncomment and edit the variables below in the section
28 # corresponding to your operating system.
29 #
30 # Windows drive-absolute paths need to be expressed cygwin style.
31 #
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:
35 #  - python 2.7:
36 #      $(PYTHON) -m jcc
37 #  - python 2.6:
38 #      $(PYTHON) -m jcc.__main__
39 #  - python 2.5:
40 #      $(PYTHON) -m jcc
41 #  - python 2.4:
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
45 # limit.
46 #
47
48 # Mac OS X 10.6 (64-bit Python 2.6, Java 1.6)
49 #PREFIX_PYTHON=/usr
50 #ANT=ant
51 #PYTHON=$(PREFIX_PYTHON)/bin/python
52 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64
53 #NUM_FILES=4
54
55 # Mac OS X 10.6 (MacPorts 1.8.0 64-bit Python 2.7, Java 1.6)
56 #PREFIX_PYTHON=/opt/local
57 #ANT=ant
58 #PYTHON=$(PREFIX_PYTHON)/bin/python
59 #JCC=$(PYTHON) -m jcc --shared --arch x86_64
60 #NUM_FILES=4
61
62 # Mac OS X 10.6 (MacPorts 1.8.0 64-bit Python 2.6, Java 1.6)
63 #PREFIX_PYTHON=/opt/local
64 #ANT=ant
65 #PYTHON=$(PREFIX_PYTHON)/bin/python
66 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64
67 #NUM_FILES=4
68
69 # Mac OS X 10.6 (64-bit and 32-bit Python 2.6 together, Java 1.6)
70 #PREFIX_PYTHON=/usr
71 #ANT=ant
72 #PYTHON=$(PREFIX_PYTHON)/bin/python
73 #JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64 --arch i386
74 #NUM_FILES=4
75
76 # Mac OS X 10.5 (32-bit Python 2.5, Java 1.5)
77 #PREFIX_PYTHON=/usr
78 #ANT=ant
79 #PYTHON=$(PREFIX_PYTHON)/bin/python
80 #JCC=$(PYTHON) -m jcc --shared
81 #NUM_FILES=4
82
83 # Mac OS X  (Python 2.3.5, Java 1.5, setuptools 0.6c7, Intel Mac OS X 10.4)
84 #PREFIX_PYTHON=/usr
85 #ANT=ant
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
88 #NUM_FILES=4
89
90 # Mac OS X  (Python 2.3.5, Java 1.5, setuptools 0.6c7, PPC Mac OS X 10.4)
91 #PREFIX_PYTHON=/usr
92 #ANT=ant
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
95 #NUM_FILES=4
96
97 # Linux     (Ubuntu 6.06, Python 2.4, Java 1.5, no setuptools)
98 #PREFIX_PYTHON=/usr
99 #ANT=ant
100 #PYTHON=$(PREFIX_PYTHON)/bin/python
101 #JCC=$(PYTHON) $(PREFIX_PYTHON)/lib/python2.4/site-packages/jcc/__init__.py
102 #NUM_FILES=4
103
104 # Linux     (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9)
105 #PREFIX_PYTHON=/usr
106 #ANT=ant
107 #PYTHON=$(PREFIX_PYTHON)/bin/python
108 #JCC=$(PYTHON) -m jcc --shared
109 #NUM_FILES=4
110
111 # FreeBSD
112 #PREFIX_PYTHON=/usr
113 #ANT=ant
114 #PYTHON=$(PREFIX_PYTHON)/bin/python
115 #JCC=$(PYTHON) -m jcc
116 #NUM_FILES=4
117
118 # Solaris   (Solaris 11, Python 2.4 32-bit, Sun Studio 12, Java 1.6)
119 #PREFIX_PYTHON=/usr
120 #ANT=/usr/local/apache-ant-1.7.0/bin/ant
121 #PYTHON=$(PREFIX_PYTHON)/bin/python
122 #JCC=$(PYTHON) $(PREFIX_PYTHON)/lib/python2.4/site-packages/jcc/__init__.py
123 #NUM_FILES=4
124
125 # Windows   (Win32, Python 2.5.1, Java 1.6, ant 1.7.0)
126 #PREFIX_PYTHON=/cygdrive/o/Python-2.5.2/PCbuild
127 #ANT=JAVA_HOME=o:\\Java\\jdk1.6.0_02 /cygdrive/o/java/apache-ant-1.7.0/bin/ant
128 #PYTHON=$(PREFIX_PYTHON)/python.exe
129 #JCC=$(PYTHON) -m jcc --shared
130 #NUM_FILES=4
131
132 # Windows   (Win32, msys/MinGW, Python 2.6.4, Java 1.6, ant 1.7.1 (WinAnt))
133 #PREFIX_PYTHON=/c/Python26
134 #ANT=JAVA_HOME="c:\\Program Files\\Java\\jdk1.6.0_18" "/c/Program Files/WinAnt/bin/ant"
135 #PYTHON=$(PREFIX_PYTHON)/python.exe
136 #JCC=$(PYTHON) -m jcc.__main__ --shared --compiler mingw32
137 #NUM_FILES=4
138
139 # Windows   (Win32, Python 2.7, Java 1.6, ant 1.8.1, Java not on PATH)
140 #PREFIX_PYTHON=/cygdrive/c/Python27
141 #ANT=JAVA_HOME=c:\\jdk1.6.0_22 /cygdrive/c/java/apache-ant-1.8.1/bin/ant
142 #PYTHON=$(PREFIX_PYTHON)/python.exe
143 #JCC=$(PYTHON) -m jcc --shared --find-jvm-dll
144 #NUM_FILES=4
145
146 JARS=$(LUCENE_JAR)
147
148 # comment/uncomment the desired/undesired optional contrib modules below
149 JARS+=$(ANALYZERS_JAR)          # many language analyzers
150 JARS+=$(MEMORY_JAR)             # single-document memory index
151 JARS+=$(HIGHLIGHTER_JAR)        # needs memory contrib
152 JARS+=$(EXTENSIONS_JAR)         # needs highlighter contrib
153 JARS+=$(QUERIES_JAR)            # regex and other contrib queries
154 #JARS+=$(SMARTCN_JAR)            # smart chinese analyzer
155 #JARS+=$(SPATIAL_JAR)            # spatial lucene
156 JARS+=$(GROUPING_JAR)           # grouping module
157 JARS+=$(JOIN_JAR)               # join module
158 JARS+=$(FACET_JAR)              # facet module
159 JARS+=$(SPELLCHECKER_JAR)       # spellchecker/suggest module
160
161
162 #
163 # No edits required below
164 #
165
166 SVNOP?=export
167
168 ifeq ($(DEBUG),1)
169   DEBUG_OPT=--debug
170 endif
171
172 DEFINES=-DPYLUCENE_VER="\"$(VERSION)\"" -DLUCENE_VER="\"$(LUCENE_VER)\""
173
174 LUCENE_JAR=$(LUCENE)/build/lucene-core-$(LUCENE_VER).jar
175 ANALYZERS_JAR=$(LUCENE)/build/contrib/analyzers/common/lucene-analyzers-$(LUCENE_VER).jar
176 HIGHLIGHTER_JAR=$(LUCENE)/build/contrib/highlighter/lucene-highlighter-$(LUCENE_VER).jar
177 MEMORY_JAR=$(LUCENE)/build/contrib/memory/lucene-memory-$(LUCENE_VER).jar
178 QUERIES_JAR=$(LUCENE)/build/contrib/queries/lucene-queries-$(LUCENE_VER).jar
179 EXTENSIONS_JAR=build/jar/extensions.jar
180 SMARTCN_JAR=$(LUCENE)/build/contrib/analyzers/smartcn/lucene-smartcn-$(LUCENE_VER).jar
181 SPATIAL_JAR=$(LUCENE)/build/contrib/spatial/lucene-spatial-$(LUCENE_VER).jar
182 GROUPING_JAR=$(LUCENE)/build/contrib/grouping/lucene-grouping-$(LUCENE_VER).jar
183 JOIN_JAR=$(LUCENE)/build/contrib/join/lucene-join-$(LUCENE_VER).jar
184 FACET_JAR=$(LUCENE)/build/contrib/facet/lucene-facet-$(LUCENE_VER).jar
185 SPELLCHECKER_JAR=$(LUCENE)/build/contrib/spellchecker/lucene-spellchecker-$(LUCENE_VER).jar
186
187 ICUPKG:=$(shell which icupkg)
188
189 .PHONY: generate compile install default all clean realclean \
190         sources test jars distrib
191
192 default: all
193
194 $(LUCENE_SRC):
195         mkdir -p $(LUCENE_SRC)
196         svn $(SVNOP) -r $(LUCENE_SVN_VER) $(LUCENE_SVN)/lucene $(LUCENE_SRC)/lucene
197
198 sources: $(LUCENE_SRC)
199
200 to-orig: sources
201         mkdir -p $(LUCENE)-orig
202         tar -C $(LUCENE) -cf - . | tar -C $(LUCENE)-orig -xvf -
203
204 from-orig: $(LUCENE)-orig
205         mkdir -p $(LUCENE)
206         tar -C $(LUCENE)-orig -cf - . | tar -C $(LUCENE) -xvf -
207
208 lucene:
209         rm -f $(LUCENE_JAR)
210         $(MAKE) $(LUCENE_JAR)
211
212 $(LUCENE_JAR): $(LUCENE)
213         cd $(LUCENE); $(ANT) -Dversion=$(LUCENE_VER)
214
215 $(ANALYZERS_JAR): $(LUCENE_JAR)
216         cd $(LUCENE)/contrib/analyzers/common; $(ANT) -Dversion=$(LUCENE_VER)
217
218 $(MEMORY_JAR): $(LUCENE_JAR)
219         cd $(LUCENE)/contrib/memory; $(ANT) -Dversion=$(LUCENE_VER)
220
221 $(HIGHLIGHTER_JAR): $(LUCENE_JAR)
222         cd $(LUCENE)/contrib/highlighter; $(ANT) -Dversion=$(LUCENE_VER)
223
224 $(QUERIES_JAR): $(LUCENE_JAR)
225         cd $(LUCENE)/contrib/queries; $(ANT) -Dversion=$(LUCENE_VER)
226
227 $(EXTENSIONS_JAR): $(LUCENE_JAR)
228         $(ANT) -f extensions.xml -Dlucene.dir=$(LUCENE)
229
230 $(SMARTCN_JAR): $(LUCENE_JAR)
231         cd $(LUCENE)/contrib/analyzers/smartcn; $(ANT) -Dversion=$(LUCENE_VER)
232
233 $(SPATIAL_JAR): $(LUCENE_JAR)
234         cd $(LUCENE)/contrib/spatial; $(ANT) -Dversion=$(LUCENE_VER)
235
236 $(GROUPING_JAR): $(LUCENE_JAR)
237         cd $(LUCENE)/contrib/grouping; $(ANT) -Dversion=$(LUCENE_VER)
238
239 $(JOIN_JAR): $(LUCENE_JAR)
240         cd $(LUCENE)/contrib/join; $(ANT) -Dversion=$(LUCENE_VER)
241
242 $(FACET_JAR): $(LUCENE_JAR)
243         cd $(LUCENE)/contrib/facet; $(ANT) -Dversion=$(LUCENE_VER)
244
245 $(SPELLCHECKER_JAR): $(LUCENE_JAR)
246         cd $(LUCENE)/contrib/spellchecker; $(ANT) -Dversion=$(LUCENE_VER)
247
248 JCCFLAGS?=
249
250 jars: $(JARS)
251
252
253 ifneq ($(ICUPKG),)
254
255 RESOURCES=--resources $(LUCENE)/contrib/icu/src/resources
256 ENDIANNESS:=$(shell $(PYTHON) -c "import struct; print struct.pack('h', 1) == '\000\001' and 'b' or 'l'")
257
258 resources: $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.dat
259
260 $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.dat: $(LUCENE)/contrib/icu/src/resources/org/apache/lucene/analysis/icu/utr30.nrm
261         rm -f $@
262         cd $(dir $<); $(ICUPKG) --type $(ENDIANNESS) --add $(notdir $<) new $(notdir $@)
263
264 else
265
266 RESOURCES=
267
268 resources:
269         @echo ICU not installed
270
271 endif
272
273 GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
274            $(JCCFLAGS) \
275            --package java.lang java.lang.System \
276                                java.lang.Runtime \
277            --package java.util java.util.Arrays \
278                                java.util.HashMap \
279                                java.util.HashSet \
280                      java.text.SimpleDateFormat \
281                      java.text.DecimalFormat \
282                      java.text.Collator \
283            --package java.util.regex \
284            --package java.io java.io.StringReader \
285                              java.io.InputStreamReader \
286                              java.io.FileInputStream \
287            --exclude org.apache.lucene.queryParser.Token \
288            --exclude org.apache.lucene.queryParser.TokenMgrError \
289            --exclude org.apache.lucene.queryParser.QueryParserTokenManager \
290            --exclude org.apache.lucene.queryParser.ParseException \
291            --exclude org.apache.lucene.search.regex.JakartaRegexpCapabilities \
292            --exclude org.apache.regexp.RegexpTunnel \
293            --exclude org.apache.lucene.analysis.cn.smart.AnalyzerProfile \
294            --python lucene \
295            --mapping org.apache.lucene.document.Document 'get:(Ljava/lang/String;)Ljava/lang/String;' \
296            --mapping java.util.Properties 'getProperty:(Ljava/lang/String;)Ljava/lang/String;' \
297            --sequence java.util.AbstractList 'size:()I' 'get:(I)Ljava/lang/Object;' \
298            --rename org.apache.lucene.search.highlight.SpanScorer=HighlighterSpanScorer \
299            --version $(LUCENE_VER) \
300            --module python/collections.py \
301            --module python/ICUNormalizer2Filter.py \
302            --module python/ICUFoldingFilter.py \
303            --module python/ICUTransformFilter.py \
304            $(RESOURCES) \
305            --files $(NUM_FILES)
306
307 generate: jars
308         $(GENERATE)
309
310 compile: jars
311         $(GENERATE) --build $(DEBUG_OPT)
312
313 install: jars
314         $(GENERATE) --install $(DEBUG_OPT) $(INSTALL_OPT)
315
316 bdist: jars
317         $(GENERATE) --bdist
318
319 wininst: jars
320         $(GENERATE) --wininst
321
322 all: sources jars resources compile
323         @echo build of $(PYLUCENE_LIB) complete
324
325 clean:
326         if test -f $(LUCENE)/build.xml; then cd $(LUCENE); $(ANT) clean; fi
327         rm -rf $(LUCENE)/build build
328
329 realclean:
330         if test ! -d $(LUCENE)/.svn; then rm -rf $(LUCENE_SRC); else rm -rf $(LUCENE)/build; fi
331         rm -rf build samples/LuceneInAction/index samples/LuceneInAction/indexes
332
333 OS=$(shell uname)
334 BUILD_TEST:=$(PYLUCENE)/build/test
335
336 ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
337   BUILD_TEST:=`cygpath -aw $(BUILD_TEST)`
338 else
339   ifeq ($(findstring MINGW,$(OS)),MINGW)
340     BUILD_TEST:=`$(PYTHON) -c "import os, sys; print os.path.normpath(sys.argv[1]).replace(chr(92), chr(92)*2)" $(BUILD_TEST)`
341   endif
342 endif
343
344 install-test:
345         mkdir -p $(BUILD_TEST)
346         PYTHONPATH=$(BUILD_TEST) $(GENERATE) --install $(DEBUG_OPT) --install-dir $(BUILD_TEST)
347
348 samples/LuceneInAction/index:
349         cd samples/LuceneInAction; PYTHONPATH=$(BUILD_TEST) $(PYTHON) index.py
350
351 test: install-test samples/LuceneInAction/index
352         find test -name 'test_*.py' | PYTHONPATH=$(BUILD_TEST) xargs -t -n 1 $(PYTHON)
353         ls samples/LuceneInAction/*Test.py | PYTHONPATH=$(BUILD_TEST) xargs -t -n 1 $(PYTHON)
354         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/AnalyzerDemo.py
355         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/AnalyzerUtils.py
356         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/BooksLikeThis.py
357         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/Explainer.py samples/LuceneInAction/index programming
358         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/HighlightIt.py
359         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/SortingExample.py
360         PYTHONPATH=$(BUILD_TEST) $(PYTHON) samples/LuceneInAction/SynonymAnalyzerViewer.py
361
362
363 ARCHIVE=pylucene-$(VERSION)-src.tar.gz
364 SITE=../site/build/site/en
365
366 distrib:
367         mkdir -p distrib
368         svn export . distrib/pylucene-$(VERSION)
369         tar -cf - --exclude build $(LUCENE_SRC) | tar -C distrib/pylucene-$(VERSION) -xvf -
370         mkdir distrib/pylucene-$(VERSION)/doc
371         tar -C $(SITE) -cf - . | tar -C distrib/pylucene-$(VERSION)/doc -xvf -
372         cd distrib; tar -cvzf $(ARCHIVE) pylucene-$(VERSION)
373         cd distrib; gpg2 --armor --output $(ARCHIVE).asc --detach-sig $(ARCHIVE)
374         cd distrib; openssl md5 < $(ARCHIVE) > $(ARCHIVE).md5
375
376 stage:
377         cd distrib; scp -p $(ARCHIVE) $(ARCHIVE).asc $(ARCHIVE).md5 \
378                            people.apache.org:public_html/staging_area
379
380 release:
381         cd distrib; scp -p $(ARCHIVE) $(ARCHIVE).asc $(ARCHIVE).md5 \
382                            people.apache.org:/www/www.apache.org/dist/lucene/pylucene
383
384 print-%:
385         @echo $* = $($*)