<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>net.sf.xsemantics</groupId>
	<artifactId>it.xsemantics.parent</artifactId>
	<version>1.11.1</version>
	<packaging>pom</packaging>

	<name>Xsemantics</name>
	<url>http://xsemantics.sourceforge.net</url>
	<description>Xsemantics is a DSL for writing type systems, reduction rules, interpreters and in general relation rules for languages implemented in Xtext.</description>

	<licenses>
		<license>
			<name>Eclipse Public License</name>
			<url>http://www.eclipse.org/legal/epl-v10.html</url>
		</license>
	</licenses>

	<developers>
		<developer>
			<name>Lorenzo Bettini</name>
			<email>lorenzo.bettini@gmail.com</email>
			<roles>
				<role>architect</role>
				<role>developer</role>
			</roles>
			<organization>Dip. Informatica, Univ. Torino</organization>
      		<organizationUrl>http://www.di.unito.it</organizationUrl>
		</developer>
	</developers>

	<scm>
		<url>git@github.com/LorenzoBettini/xsemantics.git</url>
		<developerConnection>scm:git:https://github.com/LorenzoBettini/xsemantics.git</developerConnection>
		<connection>scm:git:git@github.com/LorenzoBettini/xsemantics.git</connection>
	</scm>

	<issueManagement>
		<system>Github</system>
		<url>https://github.com/LorenzoBettini/xsemantics/issues</url>
	</issueManagement>
	
	<properties>
		<tycho-version>0.25.0</tycho-version>
		<tycho-extras-version>${tycho-version}</tycho-extras-version>
		<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
		<maven-antrun-plugin.version>1.7</maven-antrun-plugin.version>
		<junit-version>4.12</junit-version>
		<jacoco-version>0.7.4.201502262128</jacoco-version>
		<findbugs-version>2.5.5</findbugs-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<xtext.version>2.11.0</xtext.version>
		<xtextVersion>${xtext.version}</xtextVersion>
		<mwe2Version>[2.9.0,3.0)</mwe2Version>
		<platform-version>[3.9,4.0)</platform-version>
		<fornax-oaw-m2-plugin-version>3.5.1</fornax-oaw-m2-plugin-version>

		<!-- tests and runtime args -->
		<os-jvm-flags />
		<memoryArgs>-Xms256M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+HeapDumpOnOutOfMemoryError</memoryArgs>
		<uiTestsArgs>${memoryArgs} ${os-jvm-flags} -Dorg.eclipse.swt.browser.DefaultType=mozilla</uiTestsArgs>
		<pdeTestsArgs>-DbuildingWithTycho=true</pdeTestsArgs>
		<swtbotTestsArgs>${uiTestsArgs} -Dorg.eclipse.swtbot.search.timeout=10000 -Dorg.eclipse.swt.internal.gtk.cairoGraphics=false</swtbotTestsArgs>

		<!-- <jacoco.reportPath>../target/jacoco.exec</jacoco.reportPath> -->
		<!-- <findbugs.reportPath>../target/findbugs</findbugs.reportPath>  -->

		<!-- Sonar -->
		<sonar.language>java</sonar.language>
		<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
		<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
		<sonar.jacoco.reportPath>${project.basedir}/../../target/jacoco.exec</sonar.jacoco.reportPath>
		<jacoco.reportPath>${project.basedir}/../../target/coverage</jacoco.reportPath>
		<jacoco.xml.reportPath>${jacoco.reportPath}/coverage.xml</jacoco.xml.reportPath>
		<!--  <sonar.junit.reportsPath>../${project.artifactId}.tests/target/surefire-reports/</sonar.junit.reportsPath> -->
		<sonar.exclusions>file:**/src-gen/**,file:**/emf-gen/**,file:**/example/**,file:**/tests/**,**/*RuntimeModule.java,**/*UiModule.java,**/*XcoreReader.java,**/*UiExamples.java,**/*TypeSystemGen*.java,**/*StandaloneSetup*.java</sonar.exclusions>

		<!-- see http://sonarqube.15.x6.nabble.com/sonar-issue-ignore-multicriteria-td5021722.html and
		 http://stackoverflow.com/questions/21825469/configure-sonar-sonar-issue-ignore-multicriteria-through-maven
		 for the multicriteria property -->
		<sonar.issue.ignore.multicriteria>e1,e2</sonar.issue.ignore.multicriteria>

		<!-- standard convention for method names: in the outline tree provider we
		 must use methods that start with _ and they'd violate the rule squid:S00100 -->
        <sonar.issue.ignore.multicriteria.e1.ruleKey>squid:S00100</sonar.issue.ignore.multicriteria.e1.ruleKey>
        <sonar.issue.ignore.multicriteria.e1.resourceKey>**/*OutlineTreeProvider.java</sonar.issue.ignore.multicriteria.e1.resourceKey>

		<!-- "Tabulation characters should not be used"
		 sorry... I don't agree :) -->
        <sonar.issue.ignore.multicriteria.e2.ruleKey>squid:S00105</sonar.issue.ignore.multicriteria.e2.ruleKey>
        <sonar.issue.ignore.multicriteria.e2.resourceKey>**/*.java</sonar.issue.ignore.multicriteria.e2.resourceKey>

		<!--  sonar.skippedModules is deprecated: https://jira.codehaus.org/browse/SONAR-5109 -->
		<!-- <sonar.skippedModules>it.xsemantics.dsl.tests,it.xsemantics.example.fj.tests,it.xsemantics.example.expressions.tests,it.xsemantics.example.lambda.tests,it.xsemantics.tests.swtbot</sonar.skippedModules> -->
		<!-- instead we must use advanced reactor options: https://jira.codehaus.org/browse/MSONAR-61  -->
		<!-- Example:
			mvn sonar:sonar -pl :it.xsemantics.parent,:it.xsemantics.runtime,:it.xsemantics.dsl,:it.xsemantics.dsl.ui
		 -->

		<!-- Otherwise we'll have problems due to generated sources, which are
		 not in the git repository (since Sonarqube 5) -->
		<sonar.scm.disabled>true</sonar.scm.disabled>		
		
		<findbugs.skip>false</findbugs.skip>
		<mwe2.skip>false</mwe2.skip>
		<xtext.maven.skip>false</xtext.maven.skip>
		<dsl.tests.skip>false</dsl.tests.skip>
		<swtbot.tests.only>false</swtbot.tests.only>
		<swtbot.tests.skip>false</swtbot.tests.skip>
		
		<target-file-name>neon-xtext-2.11</target-file-name>
		
		<!-- properties for deploying the composite update site and zipped products on Sourceforge -->
		
		<ant-files-path>${basedir}/../../releng/it.xsemantics.parent/ant</ant-files-path>

		<!-- for deployment on bintray -->
		<!-- The name of your own Bintray repository -->
		<bintray.repo>xsemantics</bintray.repo>
		<!-- The name of your own Bintray repository's package for releases -->
		<bintray.package>releases</bintray.package>
		<!-- The label for the Composite sites -->
		<site.label>Xsemantics Site</site.label>

		<!-- If the Bintray repository is owned by someone different from your
			user, then specify the bintray.owner explicitly -->
		<bintray.owner>${bintray.user}</bintray.owner>
		<!-- Define bintray.user and bintray.apikey in some secret place,
			like .m2/settings.xml -->

		<!-- Default values for remote directories -->
		<bintray.base.path></bintray.base.path>
		<bintray.releases.path>${bintray.base.path}releases</bintray.releases.path>
		<bintray.composite.path>${bintray.base.path}updates</bintray.composite.path>
		<bintray.zip.path>${bintray.base.path}zipped</bintray.zip.path>
		<bintray.products.path>${bintray.base.path}products</bintray.products.path>
		<!-- note that the following must be consistent with the path schema
			used to publish child composite repositories and actual released p2 repositories -->
		<child.repository.path.prefix>../../releases/</child.repository.path.prefix>
	</properties>

	<profiles>
		<profile>
			<id>release-composite</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<properties>
				<xtext.maven.skip>true</xtext.maven.skip>
				<skipTests>true</skipTests>
			</properties>
			<build>
				<plugins>
					<plugin>
						<groupId>org.eclipse.tycho.extras</groupId>
						<artifactId>tycho-pack200b-plugin</artifactId>
						<version>${tycho-version}</version>
						<executions>
							<execution>
								<id>pack200-pack</id>
								<goals>
									<goal>pack</goal>
								</goals>
								<phase>package</phase>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<groupId>org.eclipse.tycho</groupId>
						<artifactId>tycho-p2-plugin</artifactId>
						<version>${tycho-version}</version>
						<executions>
							<execution>
								<id>p2-metadata</id>
								<goals>
									<goal>p2-metadata</goal>
								</goals>
								<phase>package</phase>
							</execution>
						</executions>
						<configuration>
							<defaultP2Metadata>false</defaultP2Metadata>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>release-snapshots</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<properties>
				<xtext.maven.skip>true</xtext.maven.skip>
				<bintray.package>snapshots</bintray.package>
				<bintray.base.path>snapshots/</bintray.base.path>
				<site.label>Xsemantics Snapshot Site</site.label>
			</properties>
		</profile>

		<profile>
			<id>macosx-jvm-flags</id>
			<activation>
				<os>
					<family>mac</family>
				</os>
			</activation>
			<properties>
				<os-jvm-flags>-XstartOnFirstThread</os-jvm-flags>
			</properties>
		</profile>
		
		<profile>
			<id>sonatype-oss-release</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<build>
				<plugins>
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
						<version>1.6.3</version>
						<extensions>true</extensions>
						<configuration>
							<serverId>ossrh</serverId>
							<nexusUrl>https://oss.sonatype.org/</nexusUrl>
							<autoReleaseAfterClose>true</autoReleaseAfterClose>
						</configuration>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<version>2.9.1</version>
						<executions>
							<execution>
								<id>attach-javadocs</id>
								<goals>
									<goal>jar</goal>
								</goals>
								<configuration>
									<additionalparam>-Xdoclint:none</additionalparam>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
						<version>1.5</version>
						<executions>
							<execution>
								<id>sign-artifacts</id>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
							</execution>
						</executions>
				    </plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.eclipse.xtend</groupId>
					<artifactId>xtend-maven-plugin</artifactId>
					<version>${xtext.version}</version>
					<executions>
						<execution>
							<goals>
								<goal>compile</goal>
								<goal>xtend-install-debug-info</goal>
								<goal>testCompile</goal>
								<goal>xtend-test-install-debug-info</goal>
							</goals>
						</execution>
					</executions>
					<configuration>
						<outputDirectory>xtend-gen</outputDirectory>
						<xtendAsPrimaryDebugSource>true</xtendAsPrimaryDebugSource>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-clean-plugin</artifactId>
					<version>2.5</version>
					<configuration>
						<filesets>
							<fileset>
								<directory>${basedir}/xtend-gen</directory>
								<excludes>
									<exclude>.gitignore</exclude>
								</excludes>
							</fileset>
						</filesets>
					</configuration>
				</plugin>
				
				<plugin>
					<groupId>org.eclipse.xtext</groupId>
					<artifactId>xtext-maven-plugin</artifactId>
					<version>${xtext.version}</version>
					<configuration>
						<skip>${xtext.maven.skip}</skip>
						<languages>
							<language>
								<setup>it.xsemantics.dsl.XsemanticsStandaloneSetup</setup>
								<outputConfigurations>
									<outputConfiguration>
										<outputDirectory>${basedir}/xsemantics-gen</outputDirectory>
									</outputConfiguration>
								</outputConfigurations>
							</language>
						</languages>
					</configuration>
					<executions>
						<execution>
							<goals>
								<goal>generate</goal>
							</goals>
						</execution>
					</executions>
					<dependencies>
						<dependency>
							<groupId>net.sf.xsemantics</groupId>
							<artifactId>it.xsemantics.dsl</artifactId>
							<version>${project.version}</version>
						</dependency>
					</dependencies>
				</plugin>

				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>findbugs-maven-plugin</artifactId>
					<version>${findbugs-version}</version>
					<configuration>
						<skip>${findbugs.skip}</skip>
						<findbugsXmlOutput>true</findbugsXmlOutput>
						<failOnError>false</failOnError>
						<!-- <findbugsXmlOutputDirectory>${findbugs.reportPath}</findbugsXmlOutputDirectory> -->
						<!-- Enables analysis which takes more memory but finds more bugs. If 
							you run out of memory, changes the value of the effort element to 'Low'. -->
						<!-- <effort>Max</effort> -->
						<!-- Low: Reports all bugs (other values are medium and max) -->
						<!-- <threshold>Medium</threshold> -->
						<maxRank>15</maxRank>
						<jvmArgs>-Xmx1024m</jvmArgs>
						<excludeFilterFile>${basedir}/../../releng/it.xsemantics.parent/findbugs/excludeFilter.xml</excludeFilterFile>
					</configuration>
					<executions>
						<execution>
							<goals>
								<goal>check</goal>
							</goals>
						</execution>
					</executions>
				</plugin>

				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>sonar-maven-plugin</artifactId>
					<version>2.5</version>
				</plugin>

				<plugin>
					<groupId>org.eluder.coveralls</groupId>
					<artifactId>coveralls-maven-plugin</artifactId>
					<version>4.1.0</version>
					<configuration>
						<jacocoReports>
							<jacocoReport>${jacoco.xml.reportPath}</jacocoReport>
						</jacocoReports>
					</configuration>
				</plugin>

				<plugin>
					<artifactId>maven-antrun-plugin</artifactId>
					<version>${maven-antrun-plugin.version}</version>
				</plugin>

			</plugins>
		</pluginManagement>
		
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-maven-plugin</artifactId>
				<version>${tycho-version}</version>
				<extensions>true</extensions>
			</plugin>

			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>target-platform-configuration</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<target>
						<artifact>
							<groupId>net.sf.xsemantics</groupId>
							<artifactId>it.xsemantics.targetplatform</artifactId>
							<version>${project.version}</version>
							<classifier>${target-file-name}</classifier> 
						</artifact>
					</target>
					<includePackedArtifacts>true</includePackedArtifacts>
				</configuration>
			</plugin>
			
			<plugin>
		        <groupId>org.eclipse.tycho</groupId>
		        <artifactId>tycho-source-plugin</artifactId>
		        <version>${tycho-version}</version>
		        <executions>
		          <execution>
		            <id>plugin-source</id>
		            <goals>
		              <goal>plugin-source</goal>
		            </goals>
		          </execution>
		        </executions>
		    </plugin>
		    
		    <plugin>
				<groupId>org.eclipse.tycho.extras</groupId>
				<artifactId>tycho-source-feature-plugin</artifactId>
				<version>${tycho-extras-version}</version>
				<executions>
					<execution>
						<id>source-feature</id>
						<phase>package</phase>
						<goals>
							<goal>source-feature</goal>
						</goals>
						<configuration>
							<excludes>
								<!-- These are bundles and feature that do not have a corresponding
									source version; NOT the ones that we do not want source versions -->
								<plugin id="it.xsemantics.ui.examples"/>
								
								<feature id="it.xsemantics.tests.feature"/>

								<feature id="org.eclipse.swtbot.ide"/>
								<feature id="org.eclipse.swtbot.eclipse"/>
								<feature id="org.eclipse.xtext.sdk"/>
								<feature id="org.eclipse.xtend.sdk"/>
								<feature id="org.eclipse.pde"/>
								<feature id="org.eclipse.rcp"/>
								<feature id="org.eclipse.emf.mwe2.language.sdk"/>
								<feature id="org.eclipse.emf.mwe2.runtime.sdk"/>
							</excludes>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-p2-plugin</artifactId>
				<version>${tycho-version}</version>
				<executions>
					<execution>
						<id>attach-p2-metadata</id>
						<phase>package</phase>
						<goals>
							<goal>p2-metadata</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-packaging-plugin</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<format>'v'yyyyMMdd'-'HHmm</format>
				</configuration>
			</plugin>
			
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-p2-repository-plugin</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<finalName>${project.artifactId}-${qualifiedVersion}</finalName>
				</configuration>
			</plugin>
			
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco-version}</version>
				<executions>
					<execution>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
							<configuration>
							<!-- Where to put jacoco coverage report -->
							<destFile>${sonar.jacoco.reportPath}</destFile>
							<includes>
								<include>it.xsemantics.*</include>
							</includes>
							<excludes>
								<exclude>**/src-gen/**/*.java</exclude>
								<exclude>**/org/eclipse/**/*.java</exclude>
								<exclude>**.antlr**</exclude>
								<exclude>**.parseTree**</exclude>
								<exclude>**Abstract*RuntimeModule.java</exclude>
								<exclude>**/*SetupGenerated*.java</exclude>
								<exclude>**/Abstract*Validator.java</exclude>
								<exclude>**/*GrammarAccess.java</exclude>
								<exclude>**/Abstract*UiModule.java</exclude>
								<exclude>**/Abstract*ProposalProvider.java</exclude>
								<exclude>**/*Test.java</exclude>
								<exclude>**/*TypeSystemGen*.java</exclude>
								<exclude>**/*StandaloneSetup*.java</exclude>
							</excludes>
							<append>true</append>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

	<pluginRepositories>
		<pluginRepository>
			<id>codehaus-snapshots</id>
			<name>disable dead 'Codehaus Snapshots' repository, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=481478</name>
			<url>http://nexus.codehaus.org/snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>

		<pluginRepository>
			<id>sonatype_releases</id>
			<url>https://oss.sonatype.org/content/repositories/releases/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>

		<pluginRepository>
			<id>sonatype_snapshots</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<distributionManagement>
		<snapshotRepository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
		</snapshotRepository>
		<repository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
		</repository>
	</distributionManagement>

</project>
