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

    <groupId>org.apache.openjpa</groupId>
    <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>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.serp</groupId>
            <artifactId>serp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-validation_1.0_spec</artifactId>
            <scope>provided</scope>
        </dependency>        
    </dependencies>

    <build>
        <plugins>
            <!--
                get the svn revision number and set it in the
                subversion.revision setting - 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>
                            <tasks>
                                <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}" />

                                <property name="svnversion.executable" value="svnversion" />
                                <exec outputproperty="subversion.revision" failonerror="false" failifexecutionfails="false" executable="${svnversion.executable}">
                                    <arg line="-c ${basedir}/.." />
                                </exec>
                                # 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="subversion.revision" value="unknown" />
                                <property name="pcenhancer.LastChangedRev" value="-1" />
                                <echo>Revision: ${subversion.revision}</echo>
                                <echo>OpenJPA version: ${project.version}</echo>
                                    
                                <mkdir dir="${outdir}/META-INF" />
                                <echo file="${outdir}/META-INF/org.apache.openjpa.revision.properties">revision.number=${subversion.revision}
openjpa.version=${project.version}
openjpa.enhancer.revision=${pcenhancer.LastChangedRev}
</echo>
                                <delete dir="${tmpdir}" />
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
