<?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>4.0.1-SNAPSHOT</version>
    </parent>

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

    <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>org.apache.xbean</groupId>
            <artifactId>xbean-asm9-shaded</artifactId>
            <version>${xbean.version}</version>
        </dependency>
        <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</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>
