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

<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.pdfbox</groupId>
    <artifactId>pdfbox-parent</artifactId>
    <version>3.0.0-RC1</version>
    <relativePath>parent/pom.xml</relativePath>
  </parent>

  <artifactId>pdfbox-reactor</artifactId>
  <packaging>pom</packaging>

  <name>Apache PDFBox</name>

  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0-RC1
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0-RC1
    </developerConnection>
    <url>http://svn.apache.org/viewvc/pdfbox/tags/3.0.0-RC1</url>
  </scm>

  <modules>
    <module>parent</module>
    <module>fontbox</module>
    <module>xmpbox</module>
    <module>pdfbox</module>
    <module>preflight</module>
    <module>preflight-app</module>
    <module>debugger</module>
    <module>tools</module>
    <module>app</module>
    <module>debugger-app</module>
    <module>examples</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
              <execution>
                <goals>
                  <goal>single</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <finalName>pdfbox-${project.version}</finalName>
                  <descriptors>
                    <descriptor>assembly.xml</descriptor>
                  </descriptors>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
              <execution>
                <goals>
                  <goal>run</goal>
                </goals>
                <phase>deploy</phase>
                <configuration>
                  <tasks>
                    <mkdir dir="${basedir}/target/${project.version}" />
                    <copy todir="${basedir}/target/${project.version}" flatten="true">
                      <fileset dir="${basedir}">
                        <include name="RELEASE-NOTES.txt" />
                        <include name="target/*-src.zip*" />
                        <include name="fontbox/target/*-${project.version}.jar*" />
                        <include name="pdfbox/target/*-${project.version}.jar*" />
                        <include name="xmpbox/target/*-${project.version}.jar*" />
                        <include name="preflight/target/*-${project.version}.jar*" />
                        <include name="debugger/target/*-${project.version}.jar*" />
                        <include name="tools/target/*-${project.version}.jar*" />
                        <include name="app/target/*-${project.version}.jar*" />
                        <include name="preflight-app/target/*-${project.version}.jar*" />
                        <include name="debugger-app/target/*-${project.version}.jar*" />
                      </fileset>
                    </copy>
                    <checksum algorithm="SHA-512" fileext=".sha512">
                      <fileset dir="${basedir}/target/${project.version}">
                        <include name="*.zip" />
                        <include name="*.jar" />
                      </fileset>
                    </checksum>
                    <checksum file="${basedir}/target/${project.version}/pdfbox-${project.version}-src.zip" algorithm="SHA-512" property="checksum" />
                    <echo file="${basedir}/target/vote.txt">
From: ${username}@apache.org
To: dev@pdfbox.apache.org
Subject: [VOTE] Release Apache PDFBox ${project.version}

A candidate for the PDFBox ${project.version} release is available at:

    https://dist.apache.org/repos/dist/dev/pdfbox/${project.version}/

The release candidate is a zip archive of the sources in:

    http://svn.apache.org/repos/asf/pdfbox/tags/${project.version}/

The SHA-512 checksum of the archive is ${checksum}.

Please vote on releasing this package as Apache PDFBox ${project.version}.
The vote is open for the next 72 hours and passes if a majority of at
least three +1 PDFBox PMC votes are cast.

    [ ] +1 Release this package as Apache PDFBox ${project.version}
    [ ] -1 Do not release this package because...${line.separator}
                    </echo>
                    <echo />
                    <echo>
The release candidate has been prepared in:

    ${basedir}/target/${project.version}

Please commit it to

    https://dist.apache.org/repos/dist/dev/pdfbox/${project.version}/

A release vote template has been generated for you:

    file://${basedir}/target/vote.txt
                    </echo>
                    <echo />
                  </tasks>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                 <groupId>org.apache.ant</groupId>
                 <artifactId>ant-nodeps</artifactId>
                 <version>1.8.1</version>
               </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
