<?xml version="1.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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-geometry-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>commons-geometry-examples</artifactId>
  <packaging>pom</packaging>
  <name>Apache Commons Geometry Examples</name>

  <description>Examples of use of the "Commons Geometry" library.
  Codes in this module and its sub-modules are not part of the library.
  They provide code examples, checking, and benchmarking tools to enhance
  the documentation and to help ensure correctness of the implementations.
  </description>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <!-- Version of commons-geometry to test. -->
    <geometry.version>${project.version}</geometry.version>

    <!-- OSGi -->
    <commons.osgi.symbolicName>org.apache.commons.geometry.examples</commons.osgi.symbolicName>
    <commons.osgi.export>org.apache.commons.geometry.examples</commons.osgi.export>
    <!-- Java 9+ -->
    <commons.automatic.module.name>org.apache.commons.geometry.examples</commons.automatic.module.name>
    <!-- Workaround to avoid duplicating config files. -->
    <geometry.parent.dir>${basedir}/..</geometry.parent.dir>

    <!-- Disable JApiCmp failures (but keep the report). The examples API is allowed to change. -->
    <commons.japicmp.breakBuildOnBinaryIncompatibleModifications>false</commons.japicmp.breakBuildOnBinaryIncompatibleModifications>
    <commons.japicmp.breakBuildOnSourceIncompatibleModifications>false</commons.japicmp.breakBuildOnSourceIncompatibleModifications>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-geometry-core</artifactId>
        <version>${geometry.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-geometry-euclidean</artifactId>
        <version>${geometry.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>examples-jmh</module>
    <module>examples-io</module>
    <module>examples-tutorials</module>
  </modules>
</project>
