diff --git a/.gitignore b/.gitignore
index 65328f5..d23ba53 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/solr-8.4.1-src.tgz
+SOURCES/solr-8.1.1-src.tgz
diff --git a/.lucene.metadata b/.lucene.metadata
index 3e830ec..ed36f32 100644
--- a/.lucene.metadata
+++ b/.lucene.metadata
@@ -1 +1 @@
-7531a8e6e5e0b289bf781e1e0a80de79ee0176d0 SOURCES/solr-8.4.1-src.tgz
+47e53290e1f5db5d0ee769d38d64e3875f2578d7 SOURCES/solr-8.1.1-src.tgz
diff --git a/SOURCES/0001-Disable-ivy-settings.patch b/SOURCES/0001-Disable-ivy-settings.patch
index 68ecb0b..717e5ab 100644
--- a/SOURCES/0001-Disable-ivy-settings.patch
+++ b/SOURCES/0001-Disable-ivy-settings.patch
@@ -11,7 +11,7 @@ diff --git a/lucene/common-build.xml b/lucene/common-build.xml
index 0bbd19a..6767ffe 100644
--- a/lucene/common-build.xml
+++ b/lucene/common-build.xml
-@@ -438,7 +438,6 @@
+@@ -419,7 +419,6 @@
you have an idea, fix it.
unless="ivy.settings.uptodate" -->
diff --git a/SOURCES/0002-Dependency-generation.patch b/SOURCES/0002-Dependency-generation.patch
index e90a4dc..07be6eb 100644
--- a/SOURCES/0002-Dependency-generation.patch
+++ b/SOURCES/0002-Dependency-generation.patch
@@ -9,46 +9,40 @@ Subject: [PATCH 2/3] Dependency generation
.../lucene/dependencies/GetMavenDependenciesTask.java | 2 ++
3 files changed, 8 insertions(+), 4 deletions(-)
-diff --git a/build.xml b/build.xml
-index 3d7ee87..33e5f07 100644
---- a/build.xml
-+++ b/build.xml
-@@ -615,7 +615,6 @@ File | Project Structure | Platform Settings | SDKs):
-
-
-
--
-
-
-
diff --git a/lucene/build.xml b/lucene/build.xml
-index e3cf905..facc19b 100644
+index 3c1439c..23d291a 100644
--- a/lucene/build.xml
+++ b/lucene/build.xml
-@@ -427,12 +427,8 @@
+@@ -425,12 +425,14 @@
-
-
+
++
--
--
--
++
diff --git a/lucene/common-build.xml b/lucene/common-build.xml
-index 41da3f2..d2f9d16 100644
+index 6767ffe..75f6579 100644
--- a/lucene/common-build.xml
+++ b/lucene/common-build.xml
-@@ -1876,7 +1876,7 @@ ${ant.project.name}.test.dependencies=${test.classpath.list}
+@@ -1855,9 +1855,9 @@ ${ant.project.name}.test.dependencies=${test.classpath.list}
+
+
-
+-
++
@@ -56,7 +50,7 @@ diff --git a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDepend
index 610323f..13bde29 100644
--- a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java
+++ b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java
-@@ -537,6 +537,7 @@ public class GetMavenDependenciesTask extends Task {
+@@ -535,6 +535,7 @@ public class GetMavenDependenciesTask extends Task {
private Collection getTransitiveDependenciesFromIvyCache
(String groupId, String artifactId, String version) {
SortedSet transitiveDependencies = new TreeSet<>();
@@ -64,7 +58,7 @@ index 610323f..13bde29 100644
// E.g. ~/.ivy2/cache/xerces/xercesImpl/ivy-2.9.1.xml
File ivyXmlFile = new File(new File(new File(ivyCacheDir, groupId), artifactId), "ivy-" + version + ".xml");
if ( ! ivyXmlFile.exists()) {
-@@ -558,6 +559,7 @@ public class GetMavenDependenciesTask extends Task {
+@@ -556,6 +557,7 @@ public class GetMavenDependenciesTask extends Task {
+ groupId + ':' + artifactId + ':' + version + " from "
+ ivyXmlFile.getAbsolutePath(), e);
}
diff --git a/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch b/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch
new file mode 100644
index 0000000..8a65efb
--- /dev/null
+++ b/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch
@@ -0,0 +1,1337 @@
+From 9101a214c2b38c1a7bb154c3b48f4a1b3ce63ea4 Mon Sep 17 00:00:00 2001
+From: Mat Booth
+Date: Thu, 14 Feb 2019 18:25:01 +0000
+Subject: [PATCH 3/3] Remove dep on missing google geometry library
+
+---
+ lucene/CHANGES.txt | 5 -
+ .../s2-geometry-library-java-1.0.0.jar.sha1 | 1 -
+ .../s2-geometry-library-java-LICENSE-ASL.txt | 202 ------------
+ .../s2-geometry-library-java-NOTICE.txt | 0
+ lucene/spatial-extras/ivy.xml | 2 -
+ .../spatial/prefix/tree/S2PrefixTree.java | 157 ---------
+ .../spatial/prefix/tree/S2PrefixTreeCell.java | 297 ------------------
+ .../spatial/prefix/tree/S2ShapeFactory.java | 40 ---
+ .../prefix/tree/SpatialPrefixTreeFactory.java | 2 -
+ .../spatial/spatial4j/Geo3dShapeFactory.java | 24 +-
+ .../spatial/prefix/tree/S2PrefixTreeTest.java | 113 -------
+ .../spatial/spatial4j/Geo3dRptTest.java | 23 +-
+ .../lucene/spatial3d/geom/GeoS2Shape.java | 202 ------------
+ .../spatial3d/geom/GeoS2ShapeFactory.java | 50 ---
+ .../spatial3d/geom/StandardObjects.java | 1 -
+ 15 files changed, 7 insertions(+), 1112 deletions(-)
+ delete mode 100644 lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1
+ delete mode 100644 lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt
+ delete mode 100644 lucene/licenses/s2-geometry-library-java-NOTICE.txt
+ delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java
+ delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java
+ delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java
+ delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java
+ delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java
+ delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java
+
+diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
+index 67aba94..eeee301 100644
+--- a/lucene/CHANGES.txt
++++ b/lucene/CHANGES.txt
+@@ -690,11 +690,6 @@ New Features
+ (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau,
+ Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe)
+
+-* LUCENE-8126: Add new spatial prefix tree (SPT) based on google S2 geometry.
+- It can only be used currently with Geo3D spatial context and it provides
+- improvements on indexing time for non-points shapes and on query performance.
+- (Ignacio Vera, David Smiley).
+-
+ Improvements
+
+ * LUCENE-8081: Allow IndexWriter to opt out of flushing on indexing threads
+diff --git a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 b/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1
+deleted file mode 100644
+index ef4e3ee..0000000
+--- a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1
++++ /dev/null
+@@ -1 +0,0 @@
+-f95b25589b40b5b0965deb592445073ff3efa299
+diff --git a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt b/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt
+deleted file mode 100644
+index 03c7bfc..0000000
+--- a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt
++++ /dev/null
+@@ -1,202 +0,0 @@
+-
+- Apache License
+- Version 2.0, January 2004
+- http://www.apache.org/licenses/
+-
+- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+-
+- 1. Definitions.
+-
+- "License" shall mean the terms and conditions for use, reproduction,
+- and distribution as defined by Sections 1 through 9 of this document.
+-
+- "Licensor" shall mean the copyright owner or entity authorized by
+- the copyright owner that is granting the License.
+-
+- "Legal Entity" shall mean the union of the acting entity and all
+- other entities that control, are controlled by, or are under common
+- control with that entity. For the purposes of this definition,
+- "control" means (i) the power, direct or indirect, to cause the
+- direction or management of such entity, whether by contract or
+- otherwise, or (ii) ownership of fifty percent (50%) or more of the
+- outstanding shares, or (iii) beneficial ownership of such entity.
+-
+- "You" (or "Your") shall mean an individual or Legal Entity
+- exercising permissions granted by this License.
+-
+- "Source" form shall mean the preferred form for making modifications,
+- including but not limited to software source code, documentation
+- source, and configuration files.
+-
+- "Object" form shall mean any form resulting from mechanical
+- transformation or translation of a Source form, including but
+- not limited to compiled object code, generated documentation,
+- and conversions to other media types.
+-
+- "Work" shall mean the work of authorship, whether in Source or
+- Object form, made available under the License, as indicated by a
+- copyright notice that is included in or attached to the work
+- (an example is provided in the Appendix below).
+-
+- "Derivative Works" shall mean any work, whether in Source or Object
+- form, that is based on (or derived from) the Work and for which the
+- editorial revisions, annotations, elaborations, or other modifications
+- represent, as a whole, an original work of authorship. For the purposes
+- of this License, Derivative Works shall not include works that remain
+- separable from, or merely link (or bind by name) to the interfaces of,
+- the Work and Derivative Works thereof.
+-
+- "Contribution" shall mean any work of authorship, including
+- the original version of the Work and any modifications or additions
+- to that Work or Derivative Works thereof, that is intentionally
+- submitted to Licensor for inclusion in the Work by the copyright owner
+- or by an individual or Legal Entity authorized to submit on behalf of
+- the copyright owner. For the purposes of this definition, "submitted"
+- means any form of electronic, verbal, or written communication sent
+- to the Licensor or its representatives, including but not limited to
+- communication on electronic mailing lists, source code control systems,
+- and issue tracking systems that are managed by, or on behalf of, the
+- Licensor for the purpose of discussing and improving the Work, but
+- excluding communication that is conspicuously marked or otherwise
+- designated in writing by the copyright owner as "Not a Contribution."
+-
+- "Contributor" shall mean Licensor and any individual or Legal Entity
+- on behalf of whom a Contribution has been received by Licensor and
+- subsequently incorporated within the Work.
+-
+- 2. Grant of Copyright License. Subject to the terms and conditions of
+- this License, each Contributor hereby grants to You a perpetual,
+- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+- copyright license to reproduce, prepare Derivative Works of,
+- publicly display, publicly perform, sublicense, and distribute the
+- Work and such Derivative Works in Source or Object form.
+-
+- 3. Grant of Patent License. Subject to the terms and conditions of
+- this License, each Contributor hereby grants to You a perpetual,
+- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+- (except as stated in this section) patent license to make, have made,
+- use, offer to sell, sell, import, and otherwise transfer the Work,
+- where such license applies only to those patent claims licensable
+- by such Contributor that are necessarily infringed by their
+- Contribution(s) alone or by combination of their Contribution(s)
+- with the Work to which such Contribution(s) was submitted. If You
+- institute patent litigation against any entity (including a
+- cross-claim or counterclaim in a lawsuit) alleging that the Work
+- or a Contribution incorporated within the Work constitutes direct
+- or contributory patent infringement, then any patent licenses
+- granted to You under this License for that Work shall terminate
+- as of the date such litigation is filed.
+-
+- 4. Redistribution. You may reproduce and distribute copies of the
+- Work or Derivative Works thereof in any medium, with or without
+- modifications, and in Source or Object form, provided that You
+- meet the following conditions:
+-
+- (a) You must give any other recipients of the Work or
+- Derivative Works a copy of this License; and
+-
+- (b) You must cause any modified files to carry prominent notices
+- stating that You changed the files; and
+-
+- (c) You must retain, in the Source form of any Derivative Works
+- that You distribute, all copyright, patent, trademark, and
+- attribution notices from the Source form of the Work,
+- excluding those notices that do not pertain to any part of
+- the Derivative Works; and
+-
+- (d) If the Work includes a "NOTICE" text file as part of its
+- distribution, then any Derivative Works that You distribute must
+- include a readable copy of the attribution notices contained
+- within such NOTICE file, excluding those notices that do not
+- pertain to any part of the Derivative Works, in at least one
+- of the following places: within a NOTICE text file distributed
+- as part of the Derivative Works; within the Source form or
+- documentation, if provided along with the Derivative Works; or,
+- within a display generated by the Derivative Works, if and
+- wherever such third-party notices normally appear. The contents
+- of the NOTICE file are for informational purposes only and
+- do not modify the License. You may add Your own attribution
+- notices within Derivative Works that You distribute, alongside
+- or as an addendum to the NOTICE text from the Work, provided
+- that such additional attribution notices cannot be construed
+- as modifying the License.
+-
+- You may add Your own copyright statement to Your modifications and
+- may provide additional or different license terms and conditions
+- for use, reproduction, or distribution of Your modifications, or
+- for any such Derivative Works as a whole, provided Your use,
+- reproduction, and distribution of the Work otherwise complies with
+- the conditions stated in this License.
+-
+- 5. Submission of Contributions. Unless You explicitly state otherwise,
+- any Contribution intentionally submitted for inclusion in the Work
+- by You to the Licensor shall be under the terms and conditions of
+- this License, without any additional terms or conditions.
+- Notwithstanding the above, nothing herein shall supersede or modify
+- the terms of any separate license agreement you may have executed
+- with Licensor regarding such Contributions.
+-
+- 6. Trademarks. This License does not grant permission to use the trade
+- names, trademarks, service marks, or product names of the Licensor,
+- except as required for reasonable and customary use in describing the
+- origin of the Work and reproducing the content of the NOTICE file.
+-
+- 7. Disclaimer of Warranty. Unless required by applicable law or
+- agreed to in writing, Licensor provides the Work (and each
+- Contributor provides its Contributions) on an "AS IS" BASIS,
+- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+- implied, including, without limitation, any warranties or conditions
+- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+- PARTICULAR PURPOSE. You are solely responsible for determining the
+- appropriateness of using or redistributing the Work and assume any
+- risks associated with Your exercise of permissions under this License.
+-
+- 8. Limitation of Liability. In no event and under no legal theory,
+- whether in tort (including negligence), contract, or otherwise,
+- unless required by applicable law (such as deliberate and grossly
+- negligent acts) or agreed to in writing, shall any Contributor be
+- liable to You for damages, including any direct, indirect, special,
+- incidental, or consequential damages of any character arising as a
+- result of this License or out of the use or inability to use the
+- Work (including but not limited to damages for loss of goodwill,
+- work stoppage, computer failure or malfunction, or any and all
+- other commercial damages or losses), even if such Contributor
+- has been advised of the possibility of such damages.
+-
+- 9. Accepting Warranty or Additional Liability. While redistributing
+- the Work or Derivative Works thereof, You may choose to offer,
+- and charge a fee for, acceptance of support, warranty, indemnity,
+- or other liability obligations and/or rights consistent with this
+- License. However, in accepting such obligations, You may act only
+- on Your own behalf and on Your sole responsibility, not on behalf
+- of any other Contributor, and only if You agree to indemnify,
+- defend, and hold each Contributor harmless for any liability
+- incurred by, or claims asserted against, such Contributor by reason
+- of your accepting any such warranty or additional liability.
+-
+- END OF TERMS AND CONDITIONS
+-
+- APPENDIX: How to apply the Apache License to your work.
+-
+- To apply the Apache License to your work, attach the following
+- boilerplate notice, with the fields enclosed by brackets "[]"
+- replaced with your own identifying information. (Don't include
+- the brackets!) The text should be enclosed in the appropriate
+- comment syntax for the file format. We also recommend that a
+- file or class name and description of purpose be included on the
+- same "printed page" as the copyright notice for easier
+- identification within third-party archives.
+-
+- Copyright [yyyy] [name of copyright owner]
+-
+- Licensed under the Apache License, Version 2.0 (the "License");
+- you may not use this file except in compliance with the License.
+- You may obtain a copy of the License at
+-
+- http://www.apache.org/licenses/LICENSE-2.0
+-
+- Unless required by applicable law or agreed to in writing, software
+- distributed under the License is distributed on an "AS IS" BASIS,
+- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- See the License for the specific language governing permissions and
+-limitations under the License.
+\ No newline at end of file
+diff --git a/lucene/licenses/s2-geometry-library-java-NOTICE.txt b/lucene/licenses/s2-geometry-library-java-NOTICE.txt
+deleted file mode 100644
+index e69de29..0000000
+diff --git a/lucene/spatial-extras/ivy.xml b/lucene/spatial-extras/ivy.xml
+index c3d982f..df67503 100644
+--- a/lucene/spatial-extras/ivy.xml
++++ b/lucene/spatial-extras/ivy.xml
+@@ -25,8 +25,6 @@
+
+
+
+-
+-
+
+
+
+diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java
+deleted file mode 100644
+index f77c578..0000000
+--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java
++++ /dev/null
+@@ -1,157 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial.prefix.tree;
+-
+-import java.util.ArrayList;
+-import java.util.List;
+-
+-import com.google.common.geometry.S2CellId;
+-import com.google.common.geometry.S2LatLng;
+-import com.google.common.geometry.S2Projections;
+-import org.apache.lucene.util.BytesRef;
+-import org.locationtech.spatial4j.context.SpatialContext;
+-import org.locationtech.spatial4j.distance.DistanceUtils;
+-import org.locationtech.spatial4j.shape.Point;
+-import org.locationtech.spatial4j.shape.Shape;
+-
+-/**
+- * Spatial prefix tree for S2 Geometry. Shape factories
+- * for the given {@link SpatialContext} must implement the interface {@link S2ShapeFactory}.
+- *
+- * The tree can be configured on how it divided itself by providing an arity. The default arity is 1
+- * which divided every sub-cell in 4 (except the first level that is always divided by 6) . Arity 2
+- * divides sub-cells in 16 and arity 3 in 64 sub-cells.
+- *
+- * @lucene.experimental
+- */
+-public class S2PrefixTree extends SpatialPrefixTree {
+-
+-
+- /**
+- * Factory for creating {@link S2PrefixTree} instances with useful defaults
+- */
+- protected static class Factory extends SpatialPrefixTreeFactory {
+-
+- @Override
+- protected int getLevelForDistance(double degrees) {
+- S2PrefixTree grid = new S2PrefixTree(ctx, S2PrefixTree.getMaxLevels(1));
+- return grid.getLevelForDistance(degrees);
+- }
+-
+- @Override
+- protected SpatialPrefixTree newSPT() {
+- return new S2PrefixTree(ctx,
+- maxLevels != null ? maxLevels : S2PrefixTree.getMaxLevels(1));
+- }
+-
+- }
+-
+- //factory to generate S2 cell shapes
+- protected final S2ShapeFactory s2ShapeFactory;
+- protected final int arity;
+-
+- /**
+- * Creates a S2 spatial tree with arity 1.
+- *
+- * @param ctx The provided spatial context. The shape factor of the spatial context
+- * must implement {@link S2ShapeFactory}
+- * @param maxLevels The provided maximum level for this tree.
+- */
+- public S2PrefixTree(SpatialContext ctx, int maxLevels) {
+- this(ctx, maxLevels, 1);
+- }
+-
+- /**
+- * Creates a S2 spatial tree with provided arity.
+- *
+- * @param ctx The provided spatial context. The shape factor of the spatial context
+- * must implement {@link S2ShapeFactory}
+- * @param maxLevels The provided maximum level for this tree.
+- * @param arity The arity of the tree.
+- */
+- public S2PrefixTree(SpatialContext ctx, int maxLevels, int arity) {
+- super(ctx, maxLevels);
+- if (!(ctx.getShapeFactory() instanceof S2ShapeFactory)) {
+- throw new IllegalArgumentException("Spatial context does not support S2 spatial index.");
+- }
+- this.s2ShapeFactory = (S2ShapeFactory) ctx.getShapeFactory();
+- if (arity <1 || arity > 3) {
+- throw new IllegalArgumentException("Invalid value for S2 tree arity. Possible values are 1, 2 or 3. Provided value is " + arity + ".");
+- }
+- this.arity = arity;
+- }
+-
+- /**
+- * Get max levels for this spatial tree.
+- *
+- * @param arity The arity of the tree.
+- * @return The maximum number of levels by the provided arity.
+- */
+- public static int getMaxLevels(int arity) {
+- return S2CellId.MAX_LEVEL/arity + 1;
+- }
+-
+- @Override
+- public int getLevelForDistance(double dist) {
+- if (dist == 0){
+- return maxLevels;
+- }
+- int level = S2Projections.MAX_WIDTH.getMinLevel(dist * DistanceUtils.DEGREES_TO_RADIANS);
+- int roundLevel = level % arity != 0 ? 1 : 0;
+- level = level/arity + roundLevel;
+- return Math.min(maxLevels, level + 1);
+- }
+-
+- @Override
+- public double getDistanceForLevel(int level) {
+- if (level == 0) {
+- return 180;
+- }
+- return S2Projections.MAX_WIDTH.getValue(arity * (level - 1)) * DistanceUtils.RADIANS_TO_DEGREES;
+- }
+-
+- @Override
+- public Cell getWorldCell() {
+- return new S2PrefixTreeCell(this, null);
+- }
+-
+- @Override
+- public Cell readCell(BytesRef term, Cell scratch) {
+- S2PrefixTreeCell cell = (S2PrefixTreeCell) scratch;
+- if (cell == null) {
+- cell = (S2PrefixTreeCell) getWorldCell();
+- }
+- cell.readCell(this, term);
+- return cell;
+- }
+-
+- @Override
+- public CellIterator getTreeCellIterator(Shape shape, int detailLevel) {
+- if (!(shape instanceof Point)) {
+- return super.getTreeCellIterator(shape, detailLevel);
+- }
+- Point p = (Point) shape;
+- S2CellId id = S2CellId.fromLatLng(S2LatLng.fromDegrees(p.getY(), p.getX())).parent(arity * (detailLevel - 1));
+- List cells = new ArrayList<>(detailLevel);
+- for (int i=0; i < detailLevel - 1; i++) {
+- cells.add(new S2PrefixTreeCell(this, id.parent(i * arity)));
+- }
+- cells.add(new S2PrefixTreeCell(this, id));
+- return new FilterCellIterator(cells.iterator(), null);
+- }
+-}
+\ No newline at end of file
+diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java
+deleted file mode 100644
+index e9b5818..0000000
+--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java
++++ /dev/null
+@@ -1,297 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial.prefix.tree;
+-
+-import java.util.ArrayList;
+-import java.util.HashMap;
+-import java.util.List;
+-import java.util.Map;
+-import java.util.Objects;
+-
+-import com.google.common.geometry.S2CellId;
+-import org.apache.lucene.util.BytesRef;
+-import org.locationtech.spatial4j.shape.Shape;
+-import org.locationtech.spatial4j.shape.SpatialRelation;
+-
+-/**
+- * This class represents a S2 pixel in the RPT.
+- *
+- * @lucene.internal
+- */
+-class S2PrefixTreeCell implements CellCanPrune {
+-
+- //Faces of S2 Geometry
+- private static S2CellId[] FACES = new S2CellId[6];
+-
+- static {
+- FACES[0] = S2CellId.fromFacePosLevel(0, 0, 0);
+- FACES[1] = S2CellId.fromFacePosLevel(1, 0, 0);
+- FACES[2] = S2CellId.fromFacePosLevel(2, 0, 0);
+- FACES[3] = S2CellId.fromFacePosLevel(3, 0, 0);
+- FACES[4] = S2CellId.fromFacePosLevel(4, 0, 0);
+- FACES[5] = S2CellId.fromFacePosLevel(5, 0, 0);
+- }
+-
+- /*Special character to define a cell leaf*/
+- private static final byte LEAF = '+';
+- /*Tokens are used to serialize cells*/
+- private static final byte[] TOKENS = {'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
+- /*Map containing mapping between tokens and integer values*/
+- private static final Map PIXELS;
+-
+- static {
+- PIXELS = new HashMap<>(TOKENS.length);
+- for (int i = 0; i < TOKENS.length; i++) {
+- PIXELS.put(TOKENS[i], i);
+- }
+- }
+-
+- S2CellId cellId;
+- int level; //cache level
+- S2PrefixTree tree;
+-
+- SpatialRelation shapeRel = null;
+- boolean isLeaf;
+- Shape shape = null;
+-
+- S2PrefixTreeCell(S2PrefixTree tree, S2CellId cellId) {
+- this.cellId = cellId;
+- this.tree = tree;
+- setLevel();
+- if (getLevel() == tree.getMaxLevels()) {
+- setLeaf();
+- }
+- }
+-
+- void readCell(S2PrefixTree tree, BytesRef ref) {
+- isLeaf = false;
+- shape = null;
+- shapeRel = null;
+- this.tree = tree;
+- cellId = getS2CellIdFromBytesRef(ref);
+- setLevel();
+- if (isLeaf(ref) || getLevel() == tree.getMaxLevels()) {
+- setLeaf();
+- }
+- }
+-
+- @Override
+- public SpatialRelation getShapeRel() {
+- return shapeRel;
+- }
+-
+- @Override
+- public void setShapeRel(SpatialRelation rel) {
+- shapeRel = rel;
+- }
+-
+- @Override
+- public boolean isLeaf() {
+- return isLeaf;
+- }
+-
+- @Override
+- public void setLeaf() {
+- isLeaf = true;
+- }
+-
+- @Override
+- public BytesRef getTokenBytesWithLeaf(BytesRef result) {
+- result = getTokenBytesNoLeaf(result);
+- //max levels do not have leaf
+- if (isLeaf() && !(getLevel() == tree.getMaxLevels())) {
+- //Add leaf byte
+- result.bytes[result.offset + result.length] = LEAF;
+- result.length++;
+- }
+- return result;
+- }
+-
+- @Override
+- public BytesRef getTokenBytesNoLeaf(BytesRef result) {
+- if (result == null) {
+- result = new BytesRef();
+- }
+- getBytesRefFromS2CellId(cellId, result);
+- return result;
+- }
+-
+- @Override
+- public int getLevel() {
+- return this.level;
+- }
+-
+- /**
+- * Cache level of cell.
+- */
+- private void setLevel() {
+- if (this.cellId == null) {
+- this.level = 0;
+- } else {
+- assert cellId.level() % tree.arity == 0;
+- this.level = (this.cellId.level() / tree.arity) + 1;
+- }
+- }
+-
+- @Override
+- public CellIterator getNextLevelCells(Shape shapeFilter) {
+- S2CellId[] children;
+- if (cellId == null) { // this is the world cell
+- children = FACES;
+- } else {
+- int nChildren = (int) Math.pow(4, tree.arity);
+- children = new S2CellId[nChildren];
+- children[0] = cellId.childBegin(cellId.level() + tree.arity);
+- for (int i = 1; i < nChildren; i++) {
+- children[i] = children[i - 1].next();
+- }
+- }
+- List cells = new ArrayList<>(children.length);
+- for (S2CellId pixel : children) {
+- cells.add(new S2PrefixTreeCell(tree, pixel));
+- }
+- return new FilterCellIterator(cells.iterator(), shapeFilter);
+- }
+-
+- @Override
+- public Shape getShape() {
+- if (shape == null) {
+- if (cellId == null) { //World cell
+- shape = tree.getSpatialContext().getWorldBounds();
+- } else {
+- shape = tree.s2ShapeFactory.getS2CellShape(cellId);
+- }
+- }
+- return shape;
+- }
+-
+- @Override
+- public boolean isPrefixOf(Cell c) {
+- if (cellId == null) {
+- return true;
+- }
+- S2PrefixTreeCell cell = (S2PrefixTreeCell) c;
+- return cellId.contains(cell.cellId);
+- }
+-
+- @Override
+- public int compareToNoLeaf(Cell fromCell) {
+- if (cellId == null) {
+- return 1;
+- }
+- S2PrefixTreeCell cell = (S2PrefixTreeCell) fromCell;
+- return cellId.compareTo(cell.cellId);
+- }
+-
+- /**
+- * Check if a cell is a leaf.
+- *
+- * @param ref The Byteref of the leaf
+- * @return true if it is a leaf, e.g last byte is the special Character.
+- */
+- private boolean isLeaf(BytesRef ref) {
+- return (ref.bytes[ref.offset + ref.length - 1] == LEAF);
+- }
+-
+- /**
+- * Get the {@link S2CellId} from the {@link BytesRef} representation.
+- *
+- * @param ref The bytes.
+- * @return the corresponding S2 cell.
+- */
+- private S2CellId getS2CellIdFromBytesRef(BytesRef ref) {
+- int length = ref.length;
+- if (isLeaf(ref)) {
+- length--;
+- }
+- if (length == 0) {
+- return null; //world cell
+- }
+- int face = PIXELS.get(ref.bytes[ref.offset]);
+- S2CellId cellId = FACES[face];
+- long id = cellId.id();
+- for (int i = ref.offset + 1; i < ref.offset + length; i++) {
+- int thisLevel = i - ref.offset;
+- int pos = PIXELS.get(ref.bytes[i]);
+- // first child at level
+- id = id - (id & -id) + (1L << (2 * (S2CellId.MAX_LEVEL - thisLevel * tree.arity)));
+- // next until pos
+- id = id + pos * ((id & -id) << 1);
+- }
+- return new S2CellId(id);
+- }
+-
+- /**
+- * Codify a {@link S2CellId} into its {@link BytesRef} representation.
+- *
+- * @param cellId The S2 Cell id to codify.
+- * @param bref The byteref representation.
+- */
+- private void getBytesRefFromS2CellId(S2CellId cellId, BytesRef bref) {
+- if (cellId == null) {//world cell
+- bref.length = 0;
+- return;
+- }
+- int length = getLevel() + 1;
+- byte[] b = bref.bytes.length >= length ? bref.bytes : new byte[length];
+- b[0] = TOKENS[cellId.face()];
+- for (int i = 1; i < getLevel(); i++) {
+- int offset = 0;
+- int level = tree.arity * i;
+- for (int j = 1; j < tree.arity; j++) {
+- offset = 4 * offset + cellId.childPosition(level - tree.arity + j);
+- }
+- b[i] = TOKENS[4 * offset + cellId.childPosition(level)];
+- }
+- bref.bytes = b;
+- bref.length = getLevel();
+- bref.offset = 0;
+- }
+-
+- @Override
+- public int getSubCellsSize() {
+- if (cellId == null) { //root node
+- return 6;
+- }
+- return (int) Math.pow(4, tree.arity);
+- }
+-
+- @Override
+- public int hashCode() {
+- if (cellId == null) {
+- return super.hashCode();
+- }
+- return this.cellId.hashCode();
+- }
+-
+- @Override
+- public boolean equals(Object o) {
+- S2PrefixTreeCell cell = (S2PrefixTreeCell) o;
+- return Objects.equals(cellId, cell.cellId);
+- }
+-
+- @Override
+- public String toString() {
+- if (cellId == null) {
+- return "0";
+- }
+- return cellId.toString();
+- }
+-}
+\ No newline at end of file
+diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java
+deleted file mode 100644
+index 1306f60..0000000
+--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java
++++ /dev/null
+@@ -1,40 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial.prefix.tree;
+-
+-
+-import com.google.common.geometry.S2CellId;
+-import org.locationtech.spatial4j.shape.Shape;
+-import org.locationtech.spatial4j.shape.ShapeFactory;
+-
+-/**
+- * Shape factory for Spatial contexts that support S2 geometry. It is an extension of
+- * Spatial4j {@link ShapeFactory}.
+- *
+- * @lucene.experimental
+- */
+-public interface S2ShapeFactory extends ShapeFactory{
+-
+- /**
+- * Factory method for S2 cell shapes.
+- *
+- * @param cellId The S2 cell id
+- * @return the shape representing the cell.
+- */
+- Shape getS2CellShape(S2CellId cellId);
+-}
+diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java
+index d88e41a..6e537dd 100644
+--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java
++++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java
+@@ -54,8 +54,6 @@ public abstract class SpatialPrefixTreeFactory {
+ instance = new QuadPrefixTree.Factory();
+ else if ("packedQuad".equalsIgnoreCase(cname))
+ instance = new PackedQuadPrefixTree.Factory();
+- else if ("s2".equalsIgnoreCase(cname))
+- instance = new S2PrefixTree.Factory();
+ else {
+ try {
+ Class> c = classLoader.loadClass(cname);
+diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java
+index 071c775..5c03f20 100644
+--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java
++++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java
+@@ -20,10 +20,6 @@ package org.apache.lucene.spatial.spatial4j;
+ import java.util.ArrayList;
+ import java.util.List;
+
+-import com.google.common.geometry.S2Cell;
+-import com.google.common.geometry.S2CellId;
+-import com.google.common.geometry.S2Point;
+-import org.apache.lucene.spatial.prefix.tree.S2ShapeFactory;
+ import org.apache.lucene.spatial3d.geom.GeoBBox;
+ import org.apache.lucene.spatial3d.geom.GeoBBoxFactory;
+ import org.apache.lucene.spatial3d.geom.GeoCircle;
+@@ -36,7 +32,6 @@ import org.apache.lucene.spatial3d.geom.GeoPointShape;
+ import org.apache.lucene.spatial3d.geom.GeoPointShapeFactory;
+ import org.apache.lucene.spatial3d.geom.GeoPolygon;
+ import org.apache.lucene.spatial3d.geom.GeoPolygonFactory;
+-import org.apache.lucene.spatial3d.geom.GeoS2ShapeFactory;
+ import org.apache.lucene.spatial3d.geom.PlanetModel;
+ import org.locationtech.spatial4j.context.SpatialContext;
+ import org.locationtech.spatial4j.context.SpatialContextFactory;
+@@ -47,13 +42,14 @@ import org.locationtech.spatial4j.shape.Point;
+ import org.locationtech.spatial4j.shape.Rectangle;
+ import org.locationtech.spatial4j.shape.Shape;
+ import org.locationtech.spatial4j.shape.ShapeCollection;
++import org.locationtech.spatial4j.shape.ShapeFactory;
+
+ /**
+- * Geo3d implementation of {@link S2ShapeFactory}
++ * Geo3d implementation of {@link ShapeFactory}
+ *
+ * @lucene.experimental
+ */
+-public class Geo3dShapeFactory implements S2ShapeFactory {
++public class Geo3dShapeFactory implements ShapeFactory {
+
+ private final boolean normWrapLongitude;
+ private SpatialContext context;
+@@ -241,20 +237,6 @@ public class Geo3dShapeFactory implements S2ShapeFactory {
+ return new Geo3dMultiPolygonBuilder();
+ }
+
+- @Override
+- public Shape getS2CellShape(S2CellId cellId) {
+- S2Cell cell = new S2Cell(cellId);
+- GeoPoint point1 = getGeoPoint(cell.getVertexRaw(0));
+- GeoPoint point2 = getGeoPoint(cell.getVertexRaw(1));
+- GeoPoint point3 = getGeoPoint(cell.getVertexRaw(2));
+- GeoPoint point4 = getGeoPoint(cell.getVertexRaw(3));
+- return new Geo3dShape<>(GeoS2ShapeFactory.makeGeoS2Shape(planetModel, point1, point2, point3, point4), context);
+- }
+-
+- private GeoPoint getGeoPoint(S2Point point) {
+- return planetModel.createSurfacePoint(point.get(0), point.get(1), point.get(2));
+- }
+-
+ /**
+ * Geo3d implementation of {@link org.locationtech.spatial4j.shape.ShapeFactory.PointsBuilder} interface to
+ * generate {@link GeoPoint}.
+diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java
+deleted file mode 100644
+index f3bfe3e..0000000
+--- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java
++++ /dev/null
+@@ -1,113 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial.prefix.tree;
+-
+-import com.carrotsearch.randomizedtesting.annotations.Repeat;
+-import com.google.common.geometry.S2CellId;
+-import com.google.common.geometry.S2Projections;
+-import org.apache.lucene.spatial.spatial4j.Geo3dSpatialContextFactory;
+-import org.apache.lucene.util.BytesRef;
+-import org.apache.lucene.util.LuceneTestCase;
+-import org.junit.Test;
+-import org.locationtech.spatial4j.context.SpatialContext;
+-import org.locationtech.spatial4j.shape.Point;
+-
+-/**
+- * Test for S2 Spatial prefix tree.
+- */
+-public class S2PrefixTreeTest extends LuceneTestCase{
+-
+- @Test
+- @Repeat(iterations = 10)
+- public void testCells() {
+- int face = random().nextInt(6);
+- S2CellId id = S2CellId.fromFacePosLevel(face, 0, 0);
+- int arity = random().nextInt(3) + 1;
+- int level = random().nextInt(S2PrefixTree.getMaxLevels(arity));
+- level = level * arity;
+- for (int i = 0; i < level; i++) {
+- int pos = random().nextInt(4);
+- id = id.childBegin();
+- if (pos == 0) continue;
+- id = id.next();
+- if (pos == 1) continue;
+- id = id.next();
+- if (pos == 2) continue;
+- id = id.next();
+- }
+- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(arity), arity);
+- S2PrefixTreeCell cell = new S2PrefixTreeCell(tree, id);
+- BytesRef ref = cell.getTokenBytesWithLeaf(null);
+- if (random().nextBoolean()) {
+- int newOffset = random().nextInt(10) + 1;
+- byte[] newBytes = new byte[ref.bytes.length + newOffset];
+- for (int i = 0; i < ref.bytes.length; i++) {
+- newBytes[i + newOffset] = ref.bytes[i];
+- }
+- ref.bytes = newBytes;
+- ref.offset = ref.offset + newOffset;
+- }
+- S2PrefixTreeCell cell2 = new S2PrefixTreeCell(tree, null);
+- cell2.readCell(tree, ref);
+- assertEquals(cell, cell2);
+- }
+-
+- @Test
+- @Repeat(iterations = 10)
+- public void testDistanceAndLevels() {
+- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(1), 1);
+-
+- double randomDist = random().nextDouble() * 5;
+- int levelDistance = tree.getLevelForDistance(randomDist);
+- double distanceLevel = tree.getDistanceForLevel(levelDistance);
+- assertTrue(randomDist > distanceLevel);
+-
+-
+- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(2), 2);
+-
+- levelDistance = tree.getLevelForDistance(randomDist);
+- distanceLevel = tree.getDistanceForLevel(levelDistance);
+- assertTrue(randomDist > distanceLevel);
+-
+- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(3), 3);
+-
+- levelDistance = tree.getLevelForDistance(randomDist);
+- distanceLevel = tree.getDistanceForLevel(levelDistance);
+- assertTrue(randomDist > distanceLevel);
+-
+- }
+-
+- @Test
+- @Repeat(iterations = 10)
+- public void testPrecision() {
+- int arity = random().nextInt(3) +1;
+- SpatialContext context = new Geo3dSpatialContextFactory().newSpatialContext();
+- S2PrefixTree tree = new S2PrefixTree(context, S2PrefixTree.getMaxLevels(arity), arity);
+- double precision = random().nextDouble();
+- int level = tree.getLevelForDistance(precision);
+- Point point = context.getShapeFactory().pointXY(0, 0);
+- CellIterator iterator = tree.getTreeCellIterator(point, level);
+- S2PrefixTreeCell cell = null;
+- while (iterator.hasNext()) {
+- cell = (S2PrefixTreeCell)iterator.next();
+- }
+- assertTrue(cell.getLevel() == level);
+- double precisionCell = S2Projections.MAX_WIDTH.getValue(cell.cellId.level());
+- assertTrue(precision > precisionCell);
+- }
+-}
+\ No newline at end of file
+diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java
+index 327b65c..cc4cd31 100644
+--- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java
++++ b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java
+@@ -27,8 +27,6 @@ import org.apache.lucene.spatial.composite.CompositeSpatialStrategy;
+ import org.apache.lucene.spatial.prefix.RandomSpatialOpStrategyTestCase;
+ import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy;
+ import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree;
+-import org.apache.lucene.spatial.prefix.tree.QuadPrefixTree;
+-import org.apache.lucene.spatial.prefix.tree.S2PrefixTree;
+ import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree;
+ import org.apache.lucene.spatial.query.SpatialOperation;
+ import org.apache.lucene.spatial.serialized.SerializedDVStrategy;
+@@ -36,7 +34,6 @@ import org.apache.lucene.spatial3d.geom.GeoAreaShape;
+ import org.apache.lucene.spatial3d.geom.GeoPath;
+ import org.apache.lucene.spatial3d.geom.GeoPathFactory;
+ import org.apache.lucene.spatial3d.geom.GeoPoint;
+-import org.apache.lucene.spatial3d.geom.GeoPointShape;
+ import org.apache.lucene.spatial3d.geom.GeoPolygonFactory;
+ import org.apache.lucene.spatial3d.geom.PlanetModel;
+ import org.apache.lucene.spatial3d.geom.RandomGeo3dShapeGenerator;
+@@ -53,18 +50,9 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase {
+ private SpatialPrefixTree grid;
+ private RecursivePrefixTreeStrategy rptStrategy;
+
+- private void setupGrid() {
+- int type = random().nextInt(4);
+- if (type == 0) {
+- this.grid = new GeohashPrefixTree(ctx, 2);
+- } else if (type == 1) {
+- this.grid = new QuadPrefixTree(ctx, 5);
+- } else {
+- int arity = random().nextInt(3) + 1;
+- this.grid = new S2PrefixTree(ctx, 5 - arity, arity);
+- }
++ private void setupGeohashGrid() {
++ this.grid = new GeohashPrefixTree(ctx, 2);//A fairly shallow grid
+ this.rptStrategy = newRPT();
+- this.rptStrategy.setPruneLeafyBranches(random().nextBoolean());
+ }
+
+ protected RecursivePrefixTreeStrategy newRPT() {
+@@ -81,7 +69,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase {
+ factory.planetModel = planetModel;
+ ctx = factory.newSpatialContext();
+
+- setupGrid();
++ setupGeohashGrid();
+
+ SerializedDVStrategy serializedDVStrategy = new SerializedDVStrategy(ctx, getClass().getSimpleName() + "_sdv");
+ this.strategy = new CompositeSpatialStrategy("composite_" + getClass().getSimpleName(),
+@@ -123,7 +111,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase {
+ }
+
+ @Test
+- @Repeat(iterations = 30)
++ @Repeat(iterations = 10)
+ public void testOperations() throws IOException {
+ setupStrategy();
+
+@@ -134,9 +122,6 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase {
+ protected Shape randomIndexedShape() {
+ int type = shapeGenerator.randomShapeType();
+ GeoAreaShape areaShape = shapeGenerator.randomGeoAreaShape(type, planetModel);
+- if (areaShape instanceof GeoPointShape) {
+- return new Geo3dPointShape((GeoPointShape) areaShape, ctx);
+- }
+ return new Geo3dShape<>(areaShape, ctx);
+ }
+
+diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java
+deleted file mode 100644
+index b4c5d06..0000000
+--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java
++++ /dev/null
+@@ -1,202 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial3d.geom;
+-
+-import java.io.IOException;
+-import java.io.InputStream;
+-import java.io.OutputStream;
+-
+-/**
+- * Fast implementation of a polygon representing S2 geometry cell. There are no checks validating that
+- * points are convex therefore users must be provide four points in CCW or the logic will fail.
+- *
+- * @lucene.internal
+- */
+-class GeoS2Shape extends GeoBasePolygon {
+-
+- /** The first point */
+- protected final GeoPoint point1;
+- /** The second point */
+- protected final GeoPoint point2;
+- /** The third point */
+- protected final GeoPoint point3;
+- /** The fourth point */
+- protected final GeoPoint point4;
+-
+- /** The first plane */
+- protected final SidedPlane plane1;
+- /** The second plane */
+- protected final SidedPlane plane2;
+- /** The third plane */
+- protected final SidedPlane plane3;
+- /** The fourth plane */
+- protected final SidedPlane plane4;
+-
+- /** Notable points for the first plane */
+- protected final GeoPoint[] plane1Points;
+- /** Notable points for second plane */
+- protected final GeoPoint[] plane2Points;
+- /** Notable points for third plane */
+- protected final GeoPoint[] plane3Points;
+- /** Notable points for fourth plane */
+- protected final GeoPoint[] plane4Points;
+-
+- /** Edge point for this S2 cell */
+- protected final GeoPoint[] edgePoints;
+-
+- /**
+- * It builds from 4 points given in CCW. It must be convex or logic will fail.
+- *
+- *@param planetModel is the planet model.
+- *@param point1 the first point.
+- *@param point2 the second point.
+- *@param point3 the third point.
+- *@param point4 the four point.
+- */
+- public GeoS2Shape(final PlanetModel planetModel, GeoPoint point1, GeoPoint point2, GeoPoint point3, GeoPoint point4) {
+- super(planetModel);
+- this.point1 = point1;
+- this.point2 = point2;
+- this.point3 = point3;
+- this.point4 = point4;
+-
+- // Now build the four planes
+- this.plane1 = new SidedPlane(point4, point1, point2);
+- this.plane2 = new SidedPlane(point1, point2, point3);
+- this.plane3 = new SidedPlane(point2, point3, point4);
+- this.plane4 = new SidedPlane(point3, point4, point1);
+-
+- //collect the notable points for the planes
+- this.plane1Points = new GeoPoint[]{point1, point2};
+- this.plane2Points = new GeoPoint[]{point2, point3};
+- this.plane3Points = new GeoPoint[]{point3, point4};
+- this.plane4Points = new GeoPoint[]{point4, point1};
+-
+- this.edgePoints = new GeoPoint[]{point1};
+- }
+-
+- /**
+- * Constructor for deserialization.
+- * @param planetModel is the planet model.
+- * @param inputStream is the input stream.
+- */
+- public GeoS2Shape(final PlanetModel planetModel, final InputStream inputStream) throws IOException {
+- this(planetModel,
+- (GeoPoint) SerializableObject.readObject(inputStream),
+- (GeoPoint) SerializableObject.readObject(inputStream),
+- (GeoPoint) SerializableObject.readObject(inputStream),
+- (GeoPoint) SerializableObject.readObject(inputStream));
+- }
+-
+- @Override
+- public void write(final OutputStream outputStream) throws IOException {
+- SerializableObject.writeObject(outputStream, point1);
+- SerializableObject.writeObject(outputStream, point2);
+- SerializableObject.writeObject(outputStream, point3);
+- SerializableObject.writeObject(outputStream, point4);
+- }
+-
+-
+- @Override
+- public boolean isWithin(final double x, final double y, final double z) {
+- return plane1.isWithin(x, y, z) &&
+- plane2.isWithin(x, y, z) &&
+- plane3.isWithin(x, y, z) &&
+- plane4.isWithin(x, y, z);
+- }
+-
+-
+- @Override
+- public GeoPoint[] getEdgePoints() {
+- return edgePoints;
+- }
+-
+- @Override
+- public boolean intersects(final Plane p, final GeoPoint[] notablePoints, final Membership... bounds) {
+- return p.intersects(planetModel, plane1, notablePoints, plane1Points, bounds, plane2, plane4) ||
+- p.intersects(planetModel, plane2, notablePoints, plane2Points, bounds, plane3, plane1) ||
+- p.intersects(planetModel, plane3, notablePoints, plane3Points, bounds, plane4, plane2) ||
+- p.intersects(planetModel, plane4, notablePoints, plane4Points, bounds, plane1, plane3);
+- }
+-
+- @Override
+- public boolean intersects(GeoShape geoShape) {
+- return geoShape.intersects(plane1, plane1Points, plane2, plane4) ||
+- geoShape.intersects(plane2, plane2Points, plane3, plane1) ||
+- geoShape.intersects(plane3, plane3Points, plane4, plane2) ||
+- geoShape.intersects(plane4, plane4Points, plane1, plane3);
+- }
+-
+- @Override
+- public void getBounds(Bounds bounds) {
+- super.getBounds(bounds);
+- bounds.addPlane(planetModel, plane1, plane2, plane4)
+- .addPlane(planetModel, plane2, plane3, plane1)
+- .addPlane(planetModel, plane3, plane4, plane2)
+- .addPlane(planetModel, plane4, plane1, plane3)
+- .addPoint(point1).addPoint(point2).addPoint(point3).addPoint(point4);
+- }
+-
+- @Override
+- public double outsideDistance(DistanceStyle distanceStyle, double x, double y, double z) {
+- final double planeDistance1 = distanceStyle.computeDistance(planetModel, plane1, x,y,z, plane2, plane4);
+- final double planeDistance2 = distanceStyle.computeDistance(planetModel, plane2, x,y,z, plane3, plane1);
+- final double planeDistance3 = distanceStyle.computeDistance(planetModel, plane3, x,y,z, plane4, plane2);
+- final double planeDistance4 = distanceStyle.computeDistance(planetModel, plane4, x,y,z, plane1, plane3);
+-
+- final double pointDistance1 = distanceStyle.computeDistance(point1, x,y,z);
+- final double pointDistance2 = distanceStyle.computeDistance(point2, x,y,z);
+- final double pointDistance3 = distanceStyle.computeDistance(point3, x,y,z);
+- final double pointDistance4 = distanceStyle.computeDistance(point4, x,y,z);
+-
+- return Math.min(
+- Math.min(
+- Math.min(planeDistance1, planeDistance2),
+- Math.min(planeDistance3, planeDistance4)),
+- Math.min(
+- Math.min(pointDistance1, pointDistance2),
+- Math.min(pointDistance3, pointDistance4)));
+- }
+-
+- @Override
+- public boolean equals(Object o) {
+- if (!(o instanceof GeoS2Shape))
+- return false;
+- GeoS2Shape other = (GeoS2Shape) o;
+- return super.equals(other) && other.point1.equals(point1)
+- && other.point2.equals(point2) && other.point3.equals(point3)
+- && other.point4.equals(point4);
+- }
+-
+- @Override
+- public int hashCode() {
+- int result = super.hashCode();
+- result = 31 * result + point1.hashCode();
+- result = 31 * result + point2.hashCode();
+- result = 31 * result + point3.hashCode();
+- result = 31 * result + point4.hashCode();
+- return result;
+- }
+-
+- @Override
+- public String toString() {
+- return "GeoS2Shape: {planetmodel="+planetModel+", point1=" + point1 +", point2=" + point2 +", point3=" + point3 +", point4=" + point4+ "}";
+- }
+-
+-}
+-
+diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java
+deleted file mode 100644
+index 848b2e6..0000000
+--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java
++++ /dev/null
+@@ -1,50 +0,0 @@
+-/*
+- * Licensed to the Apache Software Foundation (ASF) under one or more
+- * contributor license agreements. See the NOTICE file distributed with
+- * this work for additional information regarding copyright ownership.
+- * The ASF licenses this file to You under the Apache License, Version 2.0
+- * (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package org.apache.lucene.spatial3d.geom;
+-
+-/**
+- * Class which constructs a GeoPolygon representing S2 google pixel.
+- *
+- * @lucene.experimental
+- */
+-public class GeoS2ShapeFactory {
+-
+- private GeoS2ShapeFactory() {
+- }
+-
+- /**
+- * Creates a convex polygon with 4 planes by providing 4 points in CCW.
+- * This is a very fast shape and there are no checks that the points currently define
+- * a convex shape.
+- *
+- * @param planetModel The planet model
+- * @param point1 the first point.
+- * @param point2 the second point.
+- * @param point3 the third point.
+- * @param point4 the four point.
+- * @return the generated shape.
+- */
+- public static GeoPolygon makeGeoS2Shape(final PlanetModel planetModel,
+- final GeoPoint point1,
+- final GeoPoint point2,
+- final GeoPoint point3,
+- final GeoPoint point4) {
+- return new GeoS2Shape(planetModel, point1, point2, point3, point4);
+- }
+-}
+-
+diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
+index 4e0acae..bcebf43 100644
+--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
++++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
+@@ -75,7 +75,6 @@ class StandardObjects {
+ classRegsitry.put(PlanetModel.class, 35);
+ classRegsitry.put(GeoDegeneratePath.class, 36);
+ classRegsitry.put(GeoExactCircle.class, 37);
+- classRegsitry.put(GeoS2Shape.class, 38);
+
+ for (Class> clazz : classRegsitry.keySet()){
+ codeRegsitry.put(classRegsitry.get(clazz), clazz);
+--
+2.20.1
+
diff --git a/SPECS/lucene.spec b/SPECS/lucene.spec
index 0274076..61bff07 100644
--- a/SPECS/lucene.spec
+++ b/SPECS/lucene.spec
@@ -2,8 +2,8 @@
Summary: High-performance, full-featured text search engine
Name: lucene
-Version: 8.4.1
-Release: 5%{?dist}
+Version: 8.1.1
+Release: 2%{?dist}
Epoch: 0
License: ASL 2.0
URL: http://lucene.apache.org/
@@ -13,25 +13,40 @@ Source0: https://archive.apache.org/dist/lucene/solr/%{version}/solr-%{ve
Patch0: 0001-Disable-ivy-settings.patch
Patch1: 0002-Dependency-generation.patch
+# io.sgr:s2-geometry-library-java is not present on Fedora
+# This patch reverts these two commits:
+# https://github.com/apache/lucene-solr/commit/e3032dd3fcc28570c5f9d2dab4961b5b07555912
+# https://github.com/apache/lucene-solr/commit/e0d6465af94b6c6f7b8d570dee97c98de572c876
+Patch2: 0003-Remove-dep-on-missing-google-geometry-library.patch
+
BuildRequires: ant
BuildRequires: ivy-local
BuildRequires: maven-local
-BuildRequires: mvn(com.ibm.icu:icu4j)
BuildRequires: mvn(org.apache:apache:pom:)
BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
%if %{without jp_minimal}
+BuildRequires: mvn(com.carrotsearch.randomizedtesting:randomizedtesting-runner)
+BuildRequires: mvn(com.ibm.icu:icu4j)
BuildRequires: mvn(commons-codec:commons-codec)
+BuildRequires: mvn(commons-logging:commons-logging)
BuildRequires: mvn(javax.servlet:javax.servlet-api)
BuildRequires: mvn(javax.servlet:servlet-api)
BuildRequires: mvn(junit:junit)
+BuildRequires: mvn(net.sourceforge.nekohtml:nekohtml)
BuildRequires: mvn(org.antlr:antlr4-runtime)
BuildRequires: mvn(org.apache.commons:commons-compress)
+BuildRequires: mvn(org.apache.httpcomponents:httpclient)
+BuildRequires: mvn(org.apache.httpcomponents:httpcore)
+BuildRequires: mvn(org.carrot2:morfologik-fsa)
+BuildRequires: mvn(org.carrot2:morfologik-polish)
+BuildRequires: mvn(org.carrot2:morfologik-stemming)
BuildRequires: mvn(org.eclipse.jetty:jetty-continuation)
BuildRequires: mvn(org.eclipse.jetty:jetty-http)
BuildRequires: mvn(org.eclipse.jetty:jetty-io)
BuildRequires: mvn(org.eclipse.jetty:jetty-server)
BuildRequires: mvn(org.eclipse.jetty:jetty-servlet)
BuildRequires: mvn(org.eclipse.jetty:jetty-util)
+BuildRequires: mvn(org.locationtech.spatial4j:spatial4j)
BuildRequires: mvn(org.ow2.asm:asm)
BuildRequires: mvn(org.ow2.asm:asm-commons)
BuildRequires: mvn(xerces:xercesImpl)
@@ -39,29 +54,6 @@ BuildRequires: mvn(xerces:xercesImpl)
Provides: %{name}-core = %{epoch}:%{version}-%{release}
-# Obsolete since F32
-# Required deps were removed from fedora
-Obsoletes: %{name}-benchmark < 8.1.1-3
-Obsoletes: %{name}-demo < 8.1.1-3
-Obsoletes: %{name}-facet < 8.1.1-3
-Obsoletes: %{name}-replicator < 8.1.1-3
-Obsoletes: %{name}-spatial < 8.1.1-3
-Obsoletes: %{name}-spatial-extras < 8.1.1-3
-Obsoletes: %{name}-spatial3d < 8.1.1-3
-Obsoletes: %{name}-test-framework < 8.4.1-4
-
-%if %{with jp_minimal}
-# Remove left-over packages that would have broken deps when built in minimal mode
-Obsoletes: %{name}-parent < %{version}-%{release}
-Obsoletes: %{name}-solr-grandparent < %{version}-%{release}
-Obsoletes: %{name}-expressions < %{version}-%{release}
-Obsoletes: %{name}-analyzers-phonetic < %{version}-%{release}
-Obsoletes: %{name}-analyzers-icu < %{version}-%{release}
-Obsoletes: %{name}-analyzers-nori < %{version}-%{release}
-Obsoletes: %{name}-analyzers-kuromoji < %{version}-%{release}
-Obsoletes: %{name}-analyzers-stempel < %{version}-%{release}
-%endif
-
BuildArch: noarch
%description
@@ -72,12 +64,9 @@ cross-platform.
%package analysis
Summary: Lucene Common Analyzers
-# Obsoletes since F30
+# Obsoletes added in F30
# This module was removed upstream and no replacement exists
-Obsoletes: %{name}-analyzers-uima < 8.1.1-3
-# Obsolete since F32
-# Required deps were removed from fedora
-Obsoletes: %{name}-analyzers-morfologik < 8.1.1-3
+Obsoletes: %{name}-analyzers-uima < %{version}-%{release}
%description analysis
Lucene Common Analyzers.
@@ -142,11 +131,49 @@ Summary: Lucene Backward Codecs Module
%description backward-codecs
Codecs for older versions of Lucene.
-%package codecs
-Summary: Codecs and postings formats for Apache Lucene
+%if %{without jp_minimal}
+%package parent
+Summary: Parent POM for Lucene
-%description codecs
-Codecs and postings formats for Apache Lucene.
+%description parent
+Parent POM for Lucene.
+
+%package solr-grandparent
+Summary: Lucene Solr grandparent POM
+
+%description solr-grandparent
+Lucene Solr grandparent POM.
+
+%package benchmark
+Summary: Lucene Benchmarking Module
+
+%description benchmark
+Lucene Benchmarking Module.
+
+%package replicator
+Summary: Lucene Replicator Module
+
+%description replicator
+Lucene Replicator Module.
+
+%package test-framework
+Summary: Apache Lucene Java Test Framework
+
+%description test-framework
+Apache Lucene Java Test Framework.
+
+%package expressions
+Summary: Lucene Expressions Module
+
+%description expressions
+Dynamically computed values to sort/facet/search on based on a pluggable
+grammar.
+
+%package demo
+Summary: Lucene Demo Module
+
+%description demo
+Demo for Apache Lucene Java.
%package classification
Summary: Lucene Classification Module
@@ -160,32 +187,35 @@ Summary: Lucene Suggest Module
%description suggest
Lucene Suggest Module.
-%package monitor
-Summary: Lucene Monitor Module
+%package facet
+Summary: Lucene Facets Module
-%description monitor
-Lucene Monitor Module.
+%description facet
+Package for Faceted Indexing and Search.
-%if %{without jp_minimal}
+%package spatial
+Summary: Geospatial indexing APIs for Apache Lucene
-%package parent
-Summary: Parent POM for Lucene
+%description spatial
+Geospatial indexing APIs for Apache Lucene.
-%description parent
-Parent POM for Lucene.
+%package spatial-extras
+Summary: Spatial Strategies for Apache Lucene
-%package solr-grandparent
-Summary: Lucene Solr grandparent POM
+%description spatial-extras
+Spatial Strategies for Apache Lucene.
-%description solr-grandparent
-Lucene Solr grandparent POM.
+%package spatial3d
+Summary: Lucene Spatial 3D
-%package expressions
-Summary: Lucene Expressions Module
+%description spatial3d
+Spatial shapes implemented using 3D planar geometry
-%description expressions
-Dynamically computed values to sort/facet/search on based on a pluggable
-grammar.
+%package codecs
+Summary: Codecs and postings formats for Apache Lucene
+
+%description codecs
+Codecs and postings formats for Apache Lucene.
%package analyzers-phonetic
Summary: Lucene Phonetic Filters
@@ -200,6 +230,13 @@ Summary: Lucene ICU Analysis Components
Provides integration with ICU (International Components for Unicode) for
stronger Unicode and internationalization support.
+%package analyzers-morfologik
+Summary: Lucene Morfologik Polish Lemmatizer
+
+%description analyzers-morfologik
+A dictionary-driven lemmatizer for Polish (includes morphosyntactic
+annotations).
+
%package analyzers-nori
Summary: An analyzer with morphological analysis for Korean
@@ -218,7 +255,7 @@ Summary: Lucene Stempel Analyzer
%description analyzers-stempel
Lucene Stempel Analyzer.
-%endif
+%endif # without jp_minimal
%package javadoc
Summary: Javadoc for Lucene
@@ -231,16 +268,21 @@ Summary: Javadoc for Lucene
%patch0 -p1
%patch1 -p1
+%patch2 -p1
rm -rf solr
find -name "*.jar" -delete
-mkdir -p lucene/build/analysis/{kuromoji,nori}
-
# don't generate uses clauses in osgi metadata
sed -i -e "//a<_nouses>true" dev-tools/maven/pom.xml.template
+# make the target public
+sed -i 's/-filter-pom-templates/filter-pom-templates/' lucene/common-build.xml
+
+# suggest provides spellchecker
+%mvn_alias :%{name}-suggest :%{name}-spellchecker
+
# compatibility with existing packages
%mvn_alias :%{name}-analyzers-common :%{name}-analyzers
@@ -251,9 +293,8 @@ sed -i -e "//a<_nouses>true" dev-tools/maven/pom.xml.t
%build
pushd %{name}
find -maxdepth 2 -type d -exec mkdir -p '{}/lib' \;
-
-# generate maven dependencies
-ant -f build.xml generate-maven-artifacts -Divy.mode=local -Dversion=%{version} -Divy.available=true
+# generate dependencies
+ant -f common-build.xml filter-pom-templates -Divy.mode=local -Dversion=%{version} -Divy.available=true
# fix source dir + move to expected place
for pom in `find build/poms/%{name} -name pom.xml`; do
@@ -262,6 +303,15 @@ done
%pom_disable_module src/test core
%pom_disable_module src/test codecs
+# unresolvable test dep
+%pom_remove_dep org.locationtech.spatial4j:spatial4j::test spatial-extras
+
+# currently unavailable in Fedora
+%pom_remove_dep ua.net.nlp:morfologik-ukrainian-search analysis/morfologik
+
+# test deps
+%pom_add_dep org.antlr:antlr-runtime::test demo
+
popd
mv lucene/build/poms/pom.xml .
@@ -294,26 +344,24 @@ mv lucene/build/poms/pom.xml .
%pom_remove_plugin -r :forbiddenapis
%pom_remove_plugin -r :buildnumber-maven-plugin
-# don't build modules for which deps are not in fedora or not new enough in fedora
+%if %{with jp_minimal}
pushd lucene
+%pom_disable_module codecs
+%pom_disable_module test-framework
%pom_disable_module benchmark
+%pom_disable_module classification
%pom_disable_module demo
-%pom_disable_module test-framework
+%pom_disable_module expressions
%pom_disable_module facet
%pom_disable_module replicator
%pom_disable_module spatial
%pom_disable_module spatial-extras
%pom_disable_module spatial3d
+%pom_disable_module suggest
-%pom_disable_module opennlp analysis
-%pom_disable_module morfologik analysis
-popd
-
-%if %{with jp_minimal}
-pushd lucene
-%pom_disable_module expressions
%pom_disable_module icu analysis
%pom_disable_module kuromoji analysis
+%pom_disable_module morfologik analysis
%pom_disable_module phonetic analysis
%pom_disable_module stempel analysis
%pom_disable_module nori analysis
@@ -323,6 +371,11 @@ popd
%mvn_package :lucene-solr-grandparent __noinstall
%endif
+# OpenNLP is not new enough in Fedora, always disable for now
+pushd lucene
+%pom_disable_module opennlp analysis
+popd
+
# For some reason TestHtmlParser.testTurkish fails when building inside SCLs
%mvn_build -s -f
@@ -338,50 +391,36 @@ popd
%license lucene/LICENSE.txt lucene/NOTICE.txt
%files analysis -f .mfiles-%{name}-analysis
-
%files analyzers-smartcn -f .mfiles-%{name}-analyzers-smartcn
-
%files grouping -f .mfiles-%{name}-grouping
-
%files highlighter -f .mfiles-%{name}-highlighter
-
%files join -f .mfiles-%{name}-join
-
%files memory -f .mfiles-%{name}-memory
-
%files misc -f .mfiles-%{name}-misc
-
%files queries -f .mfiles-%{name}-queries
-
%files queryparser -f .mfiles-%{name}-queryparser
-
%files sandbox -f .mfiles-%{name}-sandbox
-
%files backward-codecs -f .mfiles-%{name}-backward-codecs
-
-%files codecs -f .mfiles-%{name}-codecs
-
-%files classification -f .mfiles-%{name}-classification
-
-%files suggest -f .mfiles-%{name}-suggest
-
-%files monitor -f .mfiles-%{name}-monitor
%if %{without jp_minimal}
-
%files parent -f .mfiles-%{name}-parent
-
%files solr-grandparent -f .mfiles-%{name}-solr-grandparent
-
+%files benchmark -f .mfiles-%{name}-benchmark
+%files replicator -f .mfiles-%{name}-replicator
+%files test-framework -f .mfiles-%{name}-test-framework
%files expressions -f .mfiles-%{name}-expressions
-
+%files demo -f .mfiles-%{name}-demo
+%files classification -f .mfiles-%{name}-classification
+%files suggest -f .mfiles-%{name}-suggest
+%files facet -f .mfiles-%{name}-facet
+%files spatial -f .mfiles-%{name}-spatial
+%files spatial-extras -f .mfiles-%{name}-spatial-extras
+%files spatial3d -f .mfiles-%{name}-spatial3d
+%files codecs -f .mfiles-%{name}-codecs
%files analyzers-phonetic -f .mfiles-%{name}-analyzers-phonetic
-
%files analyzers-icu -f .mfiles-%{name}-analyzers-icu
-
+%files analyzers-morfologik -f .mfiles-%{name}-analyzers-morfologik
%files analyzers-nori -f .mfiles-%{name}-analyzers-nori
-
%files analyzers-kuromoji -f .mfiles-%{name}-analyzers-kuromoji
-
%files analyzers-stempel -f .mfiles-%{name}-analyzers-stempel
%endif
@@ -389,28 +428,6 @@ popd
%license lucene/LICENSE.txt lucene/NOTICE.txt
%changelog
-* Sat Jul 11 2020 Jiri Vanek - 0:8.4.1-5
-- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11
-
-* Wed May 06 2020 Mat Booth - 0:8.4.1-4
-- Fix jp_minimal mode
-
-* Tue May 5 2020 Alexander Kurtakov - 0:8.4.1-3
-- Disable test-framework as its dependency (randomizedtesting) is removed.
-
-* Sat Mar 21 2020 Mat Booth - 0:8.4.1-2
-- Fix deps for minimal mode
-
-* Sat Mar 21 2020 Mat Booth - 0:8.4.1-1
-- Update to latest upstream release
-
-* Wed Jan 29 2020 Fedora Release Engineering - 0:8.1.1-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Thu Nov 28 2019 Mat Booth - 0:8.1.1-3
-- Drop spatial, morfologik, replicator, demo and benchmark modules due to missing deps
-- Fix obsoletes when built in minimal mode
-
* Thu Jun 13 2019 Mat Booth - 0:8.1.1-2
- Enable additional module in jp_minimal mode
@@ -513,4 +530,4 @@ popd
- Drop old workarounds.
* Tue Jun 23 2015 Alexander Kurtakov 0:5.2.1-1
-- Update to upstream 5.2.1.
\ No newline at end of file
+- Update to upstream 5.2.1.
| |