<?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
	
	https://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.cayenne.modeler</groupId>
		<artifactId>cayenne-modeler-parent</artifactId>
		<version>4.2.M1-SNAPSHOT</version>
	</parent>

	<artifactId>cayenne-modeler-mac</artifactId>
	<name>cayenne-modeler-mac: Modeler MacOS Assembly</name>
	<packaging>jar</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-modeler</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-modeler-mac-ext</artifactId>
			<version>${project.version}</version>
		</dependency>

		<!-- 
			adding cayenne runtime dependencies explicitly, 
			as they are marked as "provided" in the modeler pom
			and won't be included in the jar 
		-->
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-project</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-wocompat</artifactId>
			<version>${project.version}</version>
		</dependency>
	</dependencies>

    <profiles>
        <profile>
            <id>code-quality</id>

            <activation>
                <property>
                    <name>!fast-and-dirty</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <!--<configuration>
                            <suppressionsLocation>${project.basedir}/cayenne-checkstyle-suppression.xml</suppressionsLocation>
                        </configuration>-->
                    </plugin>
                    <plugin>
                        <artifactId>maven-pmd-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
		<profile>
			<id>mac</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.objectstyle.japp</groupId>
						<artifactId>japp-maven-plugin</artifactId>
						<configuration>
							<name>CayenneModeler</name>
							<longName>${project.version}</longName>
							<destDir>${project.build.outputDirectory}</destDir>
							<mainClass>org.apache.cayenne.modeler.osx.OSXMain</mainClass>
							<icon>src/japplication/resources/CayenneModeler.icns</icon>
							<os>mac</os>
							<jvm>1.8+</jvm>
							<jvmOptions>-Xmx500m -Dapple.laf.useScreenMenuBar=true</jvmOptions>
						</configuration>
						<executions>
							<execution>
								<phase>generate-resources</phase>
								<goals>
									<goal>japp</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
	<pluginRepositories>
		<pluginRepository>
			<id>objectstyle</id>
			<name>ObjectStyle repository</name>
			<url>https://maven.objectstyle.org/nexus/content/groups/cayenne-deps</url>
			<layout>default</layout>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>
</project>
