<?xml version="1.0" encoding="UTF-8"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.yakindu.sct</groupId>
	<artifactId>org.yakindu.sct.releng.promote</artifactId>
	<version>2.1.2-SNAPSHOT</version>
	<packaging>pom</packaging>

	<!-- Search for 'target architecture' to find places where the architecture 
		for distros is set -->

	<properties>
		<tycho.extras.version>0.18.0</tycho.extras.version>
		<tycho-version>0.18.0</tycho-version>

		<!-- scp settings for publishing udpdate site -->
		<promotionTarget>kepler/integration</promotionTarget>
		<promotionSource>http://builds.itemis.de/urlToCIJob/lastSuccessfulBuild</promotionSource>
		<p2.target.repository>http://download.eclipse.org/releases/kepler</p2.target.repository>
		<promotionSourceRepo>${promotionSource}/artifact/update-site</promotionSourceRepo>
		<updateSiteUrl>http://updates.yakindu.org/sct/${promotionTarget}</updateSiteUrl>
		<local.update.site>${project.build.directory}/local-update-site</local.update.site>

		<eclipse.mirror.url>http://mirror.netcologne.de/eclipse</eclipse.mirror.url>
		<distro.dir>${project.build.directory}/distro</distro.dir>
		<distro.work.dir>${distro.dir}/work</distro.work.dir>

		<profile>epp.package.java</profile>
		<features>org.eclipse.xtext.sdk.feature.group,org.eclipse.xtend.sdk.feature.group,org.yakindu.sct.sdk.feature.group</features>
		<update.sites>${p2.target.repository},file:${local.update.site},${updateSiteUrl}</update.sites>
	</properties>

	<build>
		<plugins>
			<plugin>
				<!-- enable tycho build extension -->
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-maven-plugin</artifactId>
				<version>${tycho-version}</version>
				<extensions>true</extensions>
			</plugin>
			<plugin>
				<groupId>org.eclipse.tycho.extras</groupId>
				<artifactId>tycho-p2-extras-plugin</artifactId>
				<version>${tycho.extras.version}</version>
				<inherited>false</inherited>
				<executions>
					<execution>
						<id>appendYakinduBase</id>
						<phase>package</phase>
						<goals>
							<goal>mirror</goal>
						</goals>
						<configuration>
							<source>
								<!-- source repositori(es) to mirror from -->
								<repository>
									<url>${promotionSourceRepo}</url>
									<layout>p2</layout>
									<!-- sypported layouts are "p2-metadata", "p2-artifacts", and "p2" 
										(for joint repositories) -->
								</repository>
							</source>

							<destination>${local.update.site}</destination>
							<compress>true</compress>
							<append>true</append>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<!-- for package of eclipse product creation -->
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>1.1</version>
				<executions>
					<execution>
						<!-- http://wiki.eclipse.org/Tycho/Additional_Tools#tycho-eclipserun-plugin_behind_a_proxy -->
						<id>configure-proxies-for-eclipserun</id>
						<phase>generate-resources</phase>
						<configuration>
							<target>
								<touch
									file="${project.build.directory}/work/configuration/.settings/org.eclipse.core.net.prefs"
									mkdirs="true" />

								<propertyfile
									file="${project.build.directory}/work/configuration/.settings/org.eclipse.core.net.prefs">
									<entry key="eclipse.preferences.version" value="1" />
									<entry key="nonProxiedHosts" value="${http.nonProxyHosts}" />
									<entry key="org.eclipse.core.net.hasMigrated" value="true" />
									<entry key="proxyData/HTTP/hasAuth" value="false" />
									<entry key="proxyData/HTTP/host" value="${http.proxyHost}" />
									<entry key="proxyData/HTTP/port" value="${http.proxyPort}" />
									<entry key="systemProxiesEnabled" value="false" />
								</propertyfile>
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<id>download.distro</id>
						<phase>prepare-package</phase>
						<configuration>
							<tasks>
								<taskdef resource="net/sf/antcontrib/antlib.xml"
									classpathref="maven.plugin.classpath" />
								<property name="download.distro.src"
									value="${eclipse.mirror.url}/technology/epp/downloads/release/kepler/R" />
								<property name="download.distro.dir"
									value="${project.build.directory}/distro/download" />

								<!-- 'target architecture' for distros -->
								<for
									list="macosx-cocoa-x86_64;win32-win32-x86;win32-win32-x86_64;linux-gtk-x86;linux-gtk-x86_64"
									param="environment" delimiter=";" parallel="false">
									<sequential>
										<propertyregex property="distro.os" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\1"
											casesensitive="false" />
										<propertyregex property="distro.ws" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\2"
											casesensitive="false" />
										<propertyregex property="distro.arch" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\3"
											casesensitive="false" />
										<echo>distro.os ${distro.os} </echo>
										<echo>distro.ws ${distro.ws} </echo>
										<echo>distro.arch ${distro.arch} </echo>
										<!-- naming is platform specific, so we have to make a distinction 
											here (as we only have two platforms, we do not have to make any other distinctions 
											so far) -->
										<if>
											<and>
												<equals arg1="${distro.os}" arg2="win32" />
												<equals arg1="${distro.ws}" arg2="win32" />
												<equals arg1="${distro.arch}" arg2="x86" />
											</and>
											<then>
												<propertyregex property="distro.src.filename"
													input="eclipse-java-kepler-R-win32.zip" override="true"
													regexp="(.*)" select="\1" casesensitive="false" />
											</then>
										</if>
										<if>
											<and>
												<equals arg1="${distro.os}" arg2="win32" />
												<equals arg1="${distro.ws}" arg2="win32" />
												<equals arg1="${distro.arch}" arg2="x86_64" />
											</and>
											<then>
												<propertyregex property="distro.src.filename"
													input="eclipse-java-kepler-R-win32-x86_64.zip" override="true"
													regexp="(.*)" select="\1" casesensitive="false" />
											</then>
										</if>
										<if>
											<and>
												<equals arg1="${distro.os}" arg2="linux" />
												<equals arg1="${distro.ws}" arg2="gtk" />
												<equals arg1="${distro.arch}" arg2="x86_64" />
											</and>
											<then>
												<propertyregex property="distro.src.filename"
													input="eclipse-java-kepler-R-linux-gtk-x86_64.tar.gz"
													override="true" regexp="(.*)" select="\1" casesensitive="false" />
											</then>
										</if>
										<if>
											<and>
												<equals arg1="${distro.os}" arg2="linux" />
												<equals arg1="${distro.ws}" arg2="gtk" />
												<equals arg1="${distro.arch}" arg2="x86" />
											</and>
											<then>
												<propertyregex property="distro.src.filename"
													input="eclipse-java-kepler-R-linux-gtk.tar.gz" override="true"
													regexp="(.*)" select="\1" casesensitive="false" />
											</then>
										</if>
										<if>
											<and>
												<equals arg1="${distro.os}" arg2="macosx" />
												<equals arg1="${distro.ws}" arg2="cocoa" />
												<equals arg1="${distro.arch}" arg2="x86_64" />
											</and>
											<then>
												<propertyregex property="distro.src.filename"
													input="eclipse-java-kepler-R-macosx-cocoa-x86_64.tar.gz"
													override="true" regexp="(.*)" select="\1" casesensitive="false" />
											</then>
										</if>

										<if>
											<not>
												<available file="${download.distro.dir}" type="dir" />
											</not>
											<then>
												<echo>mkdir ${download.distro.dir}</echo>
												<mkdir dir="${download.distro.dir}" />
											</then>
										</if>
										<if>
											<not>
												<available file="${download.distro.dir}/${distro.src.filename}" />
											</not>
											<then>
												<trycatch>
													<try>
														<get src="${download.distro.src}/${distro.src.filename}"
															dest="${download.distro.dir}/${distro.src.filename}" />
													</try>
													<catch>
														<echo>delete ${download.distro.dir}</echo>
														<delete file="${download.distro.dir}/${distro.src.filename}" />
													</catch>
												</trycatch>
											</then>
										</if>
										<if>
											<available file="${distro.work.dir}/@{environment}"
												type="dir" />
											<then>
												<delete dir="${distro.work.dir}/@{environment}" />
											</then>
										</if>
										<mkdir dir="${distro.work.dir}/@{environment}" />
										<if>
											<or>
												<equals arg1="${distro.os}" arg2="win32" />
											</or>
											<then>
												<unzip src="${download.distro.dir}/${distro.src.filename}"
													dest="${distro.work.dir}/@{environment}/" />
											</then>
											<else>
												<exec dir="${distro.work.dir}/@{environment}"
													executable="tar">
													<arg line="-xzf ${download.distro.dir}/${distro.src.filename}" />
												</exec>
											</else>
										</if>
									</sequential>
								</for>
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<id>repackage.distro</id>
						<phase>verify</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<tasks>
								<taskdef resource="net/sf/antcontrib/antlib.xml"
									classpathref="maven.plugin.classpath" />
								<!-- 'target architecture' for distros -->
								<for
									list="macosx-cocoa-x86_64;win32-win32-x86;win32-win32-x86_64;linux-gtk-x86;linux-gtk-x86_64"
									param="environment" delimiter=";" parallel="false">
									<sequential>
										<propertyregex property="distro.os" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\1"
											casesensitive="false" />
										<propertyregex property="distro.ws" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\2"
											casesensitive="false" />
										<propertyregex property="distro.arch" input="@{environment}"
											override="true" regexp="([^,]*)-([^\,]*)-([^\,]*)" select="\3"
											casesensitive="false" />
										<echo>mkdir ${distro.dir} for
											yakindu-sct-kepler-R-${distro.os}-${distro.ws}-${distro.arch}.zip</echo>
										<mkdir dir="${distro.dir}" />

										<if>
											<or>
												<equals arg1="${distro.os}" arg2="win32" />
											</or>
											<then>
												<exec dir="${distro.work.dir}/@{environment}"
													executable="zip">
													<arg
														line="-q -r ${distro.dir}/yakindu-sct-kepler-R-${distro.os}-${distro.ws}-${distro.arch}.zip eclipse" />
												</exec>
											</then>
											<else>
												<exec dir="${distro.work.dir}/@{environment}"
													executable="tar">
													<arg
														line="-czf ${distro.dir}/yakindu-sct-kepler-R-${distro.os}-${distro.ws}-${distro.arch}.tar.gz eclipse" />
												</exec>
											</else>
										</if>
									</sequential>
								</for>
							</tasks>
						</configuration>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>ant-contrib</groupId>
						<artifactId>ant-contrib</artifactId>
						<version>1.0b3</version>
						<exclusions>
							<exclusion>
								<groupId>ant</groupId>
								<artifactId>ant</artifactId>
							</exclusion>
						</exclusions>
					</dependency>
					<dependency>
						<groupId>ant</groupId>
						<artifactId>ant-nodeps</artifactId>
						<version>1.6.5</version>
					</dependency>
				</dependencies>
			</plugin>
			<plugin>
				<groupId>org.eclipse.tycho.extras</groupId>
				<artifactId>tycho-eclipserun-plugin</artifactId>
				<version>${tycho.extras.version}</version>
				<executions>
					<!-- Add execution per 'target architecture' -->
					<execution>
						<id>install-features-into-distro-macosx-cocoa-x86_64</id>
						<phase>package</phase>
						<goals>
							<goal>eclipse-run</goal>
						</goals>
						<configuration>
							<appArgLine>-consoleLog -clean -nosplash -debug \
								-application\
								org.eclipse.equinox.p2.director -destination \
								${distro.work.dir}/macosx-cocoa-x86_64/eclipse/ -profile \
								${profile} -p2.os macosx -p2.ws cocoa -p2.arch x86_64 \
								-repository ${update.sites} -installIUs ${features}
							</appArgLine>
						</configuration>
					</execution>
					<execution>
						<id>install-features-into-distro-win32-win-32-x86</id>
						<phase>package</phase>
						<goals>
							<goal>eclipse-run</goal>
						</goals>
						<configuration>
							<appArgLine>-consoleLog -clean -nosplash -debug \
								-application\
								org.eclipse.equinox.p2.director -destination \
								${distro.work.dir}/win32-win32-x86/eclipse/\
								-profile\
								${profile}\
								-p2.os win32 -p2.ws win32 -p2.arch x86 -repository \
								${update.sites} -installIUs ${features}
							</appArgLine>
						</configuration>
					</execution>
					<execution>
						<id>install-features-into-distro-win32-win-32-x86_64</id>
						<phase>package</phase>
						<goals>
							<goal>eclipse-run</goal>
						</goals>
						<configuration>
							<appArgLine>-consoleLog -clean -nosplash -debug \
								-application\
								org.eclipse.equinox.p2.director -destination \
								${distro.work.dir}/win32-win32-x86_64/eclipse/ -profile \
								${profile} -p2.os win32 -p2.ws win32 -p2.arch x86_64 \
								-repository\
								${update.sites} -installIUs ${features}
							</appArgLine>
						</configuration>
					</execution>
					<execution>
						<id>install-features-into-distro-linux-gtk-x86</id>
						<phase>package</phase>
						<goals>
							<goal>eclipse-run</goal>
						</goals>
						<configuration>
							<appArgLine>-consoleLog -clean -nosplash -debug \
								-application\
								org.eclipse.equinox.p2.director -destination \
								${distro.work.dir}/linux-gtk-x86/eclipse/ -profile \
								${profile}\
								-p2.os linux -p2.ws gtk -p2.arch x86 \
								-repository\
								${update.sites} -installIUs ${features}
							</appArgLine>
						</configuration>
					</execution>
					<execution>
						<id>install-features-into-distro-linux-gtk-x86_64</id>
						<phase>package</phase>
						<goals>
							<goal>eclipse-run</goal>
						</goals>
						<configuration>
							<appArgLine>-consoleLog -clean -nosplash -debug \
								-application\
								org.eclipse.equinox.p2.director -destination \
								${distro.work.dir}/linux-gtk-x86_64/eclipse/ -profile \
								${profile} -p2.os linux -p2.ws gtk -p2.arch x86_64 \
								-repository\
								${update.sites} -installIUs ${features}
							</appArgLine>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.eclipse.tycho.extras</groupId>
					<artifactId>tycho-eclipserun-plugin</artifactId>
					<version>${tycho.extras.version}</version>
					<configuration>
						<argLine>-Declipse.p2.mirrors=false</argLine>
						<repositories>
							<repository>
								<id>kepler</id>
								<layout>p2</layout>
								<url>http://download.eclipse.org/releases/kepler</url>
							</repository>
						</repositories>
						<dependencies>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.transport.ecf</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.repository</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.core.net</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.touchpoint.natives</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.touchpoint.eclipse</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.artifact.repository
								</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.p2.director.app</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
							<dependency>
								<artifactId>org.eclipse.equinox.ds</artifactId>
								<type>eclipse-plugin</type>
							</dependency>
						</dependencies>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<profiles>
		<profile>
			<!-- This profile is activated by default, if the remote repository should 
				be extended. -->
			<!-- Deactivate if no remote repository should be copied to append artifacts -->
			<id>CopySource</id>
			<activation>
				<property>
					<name>appendToExistingRepository</name>
					<value>!false</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.eclipse.tycho.extras</groupId>
						<artifactId>tycho-p2-extras-plugin</artifactId>
						<version>${tycho.extras.version}</version>
						<inherited>false</inherited>
						<executions>
							<execution>
								<id>copyRemoteSite</id>
								<phase>prepare-package</phase>
								<goals>
									<goal>mirror</goal>
								</goals>
								<configuration>
									<source>
										<!-- source repositori(es) to mirror from -->
										<repository>
											<url>${updateSiteUrl}</url>
											<layout>p2</layout>
											<!-- sypported layouts are "p2-metadata", "p2-artifacts", and 
												"p2" (for joint repositories) -->
										</repository>
									</source>

									<destination>${local.update.site}</destination>
									<compress>true</compress>
									<append>false</append>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>
