<?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.2.0-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.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</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>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>
