<?xml version="1.0" encoding="UTF-8"?>
<!--
 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.
-->
<!--
    Maven release plugin requires the project tag to be on a single line.
-->
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-parent</artifactId>
        <version>3.1.3-SNAPSHOT</version>
    </parent>

    <artifactId>openjpa-lib</artifactId>
    <packaging>jar</packaging>
    <name>OpenJPA Utilities Library</name>
    <description>OpenJPA Utilities Library</description>

    <properties>
        <automatic-module-name>org.apache.openjpa.lib</automatic-module-name>
    </properties>
    <dependencies>
        <dependency>
            <groupId>jakarta-regexp</groupId>
            <artifactId>jakarta-regexp</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- for our switchable logging provider integration -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.serp</groupId>
            <artifactId>serp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-validation_1.1_spec</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!--
                get the git revision number and set it in the git.revision setting - disabled for now
                since we need to be able to build from sources zip (when there is no .git/config)
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>set git version</id>
                        <phase>compile</phase>
                        <configuration>
                            <target>
                                <!-- SVN would have appended 'M' to the end of the revision number if there were
                                     uncommitted changes.  Git doesn't do that, so we have to work a bit to
                                     emulate that behavior.  -->
                                <echo>Determining if there are uncommitted changes...</echo>
                                <exec outputproperty="git.diff.exitval" resultproperty="diff.state" failonerror="false" failifexecutionfails="false" executable="git">
                                    <arg line="diff --quiet HEAD" />
                                </exec>
                                <exec outputproperty="git.diff.cached.exitval" resultproperty="diff.state.cached" failonerror="false" failifexecutionfails="false" executable="git">
                                    <arg line="diff --cached --quiet HEAD" />
                                </exec>
                                <condition property="uncommitted.changes" value="M" else="">
                                    <or>
                                        <equals arg1="${diff.state}" arg2="1" />
                                        <equals arg1="${diff.state.cached}" arg2="1" />
                                    </or>
                                </condition>
                                
                                <echo>Getting the 'GIT' revision value</echo>
                                <exec outputproperty="git.revision" failonerror="false" failifexecutionfails="false" executable="git">
                                    <arg line="rev-parse --short=7 HEAD" />
                                </exec>
                                <echo>Revision: ${git.revision}${uncommitted.changes}</echo>

                                <echo>Getting the 'PCEnhancer' revision value</echo>
                                <exec outputproperty="pcenhancer.git.revision" failonerror="false" failifexecutionfails="false" executable="git" append="false">
                                    <arg line="rev-parse --short=7 HEAD:./../openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java" />
                                </exec>
                                <echo>openjpa.enhancer.revision=${pcenhancer.git.revision}${uncommitted.changes}</echo>

                                <echo>OpenJPA version: ${project.version}</echo>
                                <condition property="outdir" value="${project.build.outputDirectory}" else="${java.io.tmpdir}/openjpamvntmp">
                                    <available type="dir" file="${project.build.outputDirectory}" />
                                </condition>
                                <mkdir dir="${outdir}/META-INF" />

                                <echo file="${outdir}/META-INF/org.apache.openjpa.revision.properties">
revision.number=${git.revision}${uncommitted.changes}
openjpa.version=${project.version}
openjpa.enhancer.revision=${pcenhancer.git.revision}${uncommitted.changes}
                                </echo>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
