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

    <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>
            <!--
                create o.a.openjpa.revision.properties with all version
                including git hash - disabled for now
                since we need to be able to build from sources
                zip (when there is no .svn/ metadata)
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>set subversion revision</id>
                        <phase>compile</phase>
                        <configuration>
                            <target>
                                <property name="tmpdir" value="${java.io.tmpdir}/openjpamvntmp" />
                                <condition property="outdir" value="${project.build.outputDirectory}">
                                    <available type="dir" file="${project.build.outputDirectory}" />
                                </condition>

                                <property name="outdir" value="${tmpdir}" />

                                # Write the svn info to a temp file
                                <echo file="pcenhancer.revision.file" />
                                <exec output="pcenhancer.revision.file" failonerror="false" failifexecutionfails="false" executable="svn" append="false">
                                    <arg line="info ../openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java" />
                                </exec>

                                # Remove all spaces so we can have a proper key
                                <replace file="pcenhancer.revision.file" token=" " value="" />
                                # Load the property file
                                <property prefix="pcenhancer" file="pcenhancer.revision.file" />
                                <delete file="pcenhancer.revision.file" />

                                <property name="pcenhancer.LastChangedRev" value="-1" />
                                <echo>Revision: ${buildNumber}</echo>
                                <echo>OpenJPA version: ${project.version}</echo>

                                <mkdir dir="${outdir}/META-INF" />
                                <echo file="${outdir}/META-INF/org.apache.openjpa.revision.properties">revision.number=${buildNumber}
openjpa.version=${project.version}
openjpa.enhancer.revision=${pcenhancer.LastChangedRev}
</echo>
                                <delete dir="${tmpdir}" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
