<?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.1-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>
