<?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>fontbox</artifactId>
  <packaging>bundle</packaging>

  <name>Apache FontBox</name>
  <description>
    The Apache FontBox library is an open source Java tool to obtain low level information
    from font files. FontBox is a subproject of Apache PDFBox.
  </description>

  <inceptionYear>2008</inceptionYear>
  <url>http://pdfbox.apache.org/</url>

  <dependencies>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
            <excludes>
                <exclude>src/main/resources/org/apache/fontbox/cmap/*</exclude>
                <exclude>src/main/resources/org/apache/fontbox/unicode/*</exclude>
                <exclude>src/test/resources/afm/*</exclude>
            </excludes>
        </configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <configuration>
              <archive>
                  <manifestEntries>
                      <Automatic-Module-Name>org.apache.fontbox</Automatic-Module-Name>
                  </manifestEntries>
              </archive>
          </configuration>
      </plugin>

      <!-- download test files from JIRA and keep them in repository cache -->
      <plugin>
          <groupId>com.googlecode.maven-download-plugin</groupId>
          <artifactId>download-maven-plugin</artifactId>
          <executions>
              <execution>
                  <id>PDFBOX-4038</id>
                  <phase>generate-test-resources</phase>
                  <goals>
                      <goal>wget</goal>
                  </goals>
                  <configuration>
                      <url>https://issues.apache.org/jira/secure/attachment/12684264/SourceSansProBold.otf</url>
                      <outputDirectory>${project.build.directory}/pdfs</outputDirectory>
                      <sha512>28a044a2685fbc8da7810d9ac7b6b93a95542d504d7d8e671f009b8ebb2f5b70c974be7ea78974b188d8e6ab17d65b08f276c054927857315d5aad26f6fe36fc</sha512>
                  </configuration>
              </execution>
              <execution>
                  <id>PDFBOX-3997</id>
                  <phase>generate-test-resources</phase>
                  <goals>
                      <goal>wget</goal>
                  </goals>
                  <configuration>
                      <url>https://issues.apache.org/jira/secure/attachment/12896461/NotoEmoji-Regular.ttf</url>
                      <outputDirectory>${project.build.directory}/pdfs</outputDirectory>
                      <sha512>51b01ab0794be9f92c59679f6d56d4ce09ed959daeb9ec945bb837eb15a82ab302e83b29aab1972ac9cb648f7196a5f5ff4488a4622b36bedbc9cd0cab6dc3de</sha512>
                  </configuration>
              </execution>
              <execution>
                  <id>PDFBOX-3379</id>
                  <phase>generate-test-resources</phase>
                  <goals>
                      <goal>wget</goal>
                  </goals>
                  <configuration>
                      <url>https://issues.apache.org/jira/secure/attachment/12809395/DejaVuSansMono.ttf</url>
                      <outputDirectory>${project.build.directory}/pdfs</outputDirectory>
                      <sha512>1af1ce3e6d34a0b89c93072d8646e92cceb45b276389d2dd0d84457ec1193394d2bcc49bf3ce99c9c6b2658cd1337fc40ee5c61957f74cd45dbc3d51b6aef417</sha512>
                  </configuration>
              </execution>
          </executions>
      </plugin>
    </plugins>
  </build>

</project>

