<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2006 The Apache Software Foundation.
 
 Licensed 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.
-->
<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>
    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-lib</artifactId>
    <packaging>jar</packaging>
    <name>OpenJPA Utilities</name>
    <description>OpenJPA Utilities</description>
    <url>http://incubator.apache.org/projects/openjpa</url>
    <parent>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa</artifactId>
        <version>0.9.6-incubating</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>jakarta-regexp</groupId>
            <artifactId>jakarta-regexp</artifactId>
            <version>1.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.13</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.6.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.serp</groupId>
            <artifactId>serp</artifactId>
            <version>1.11.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.4</source>
                    <target>1.4</target>
                </configuration>
            </plugin>
            <!--
                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>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <!--
                        delete the sun/misc/Perf.class file, which is 
                        only there as a compilation stub
                    -->
                    <execution>
                        <id>delete sun.misc.Perf</id>
                        <phase>process-classes</phase>
                        <configuration>
                            <tasks>
                                <delete failonerror="true"
                                dir="${project.build.outputDirectory}/sun/"/>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <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>
                                <property name="subversion.revision"
                                    value="unknown"/>
                                <echo>Revision: ${subversion.revision}</echo>
                                    
                                <mkdir dir="${outdir}/META-INF"/>
                                <echo file="${outdir}/META-INF/org.apache.openjpa.revision.properties">revision.number=${subversion.revision}</echo>
                                <delete dir="${tmpdir}"/>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
