%bcond_with bootstrap
%bcond_without junit5
%global git_tag tycho-%{version}
%global fp_p2_git_tag 290f67a4c717599b2f5166ea89aa5365571314b1
%global fp_p2_version 0.0.1
%global fp_p2_snap -SNAPSHOT
%global xmvn_libdir %(realpath $(dirname $(readlink -f $(which xmvn)))/../lib)
%define __requires_exclude osgi*
Name:                tycho
Version:             1.3.0
Release:             5
Summary:             Plugins and extensions for building Eclipse plugins and OSGI bundles with Maven
License:             ASL 2.0 and EPL-1.0
URL:                 http://eclipse.org/tycho
Source0:             http://git.eclipse.org/c/tycho/org.eclipse.tycho.git/snapshot/org.eclipse.tycho-%{git_tag}.tar.xz
Source1:             https://github.com/rgrunber/fedoraproject-p2/archive/%{fp_p2_git_tag}/fedoraproject-p2-%{fp_p2_git_tag}.tar.gz
Source3:             tycho-scripts.sh
Source4:             tycho-bootstrap.sh
Source5:             tycho-debundle.sh
Source6:             p2-install.sh
%if %{with bootstrap}
Source10:            eclipse-bootstrap-photon.tar.xz
%endif
# Submitted upstream: https://bugs.eclipse.org/bugs/show_bug.cgi?id=537963
Patch0:              0001-Bug-537963-Make-the-default-EE-Java-1.8.patch
# Merged upstream: https://git.eclipse.org/c/tycho/org.eclipse.tycho.git/commit/?id=a437fb8870761d733199392f25a8c0e4f34caae9
Patch1:              0002-Bug-543850-Update-artifactcomparator-asm-dep-to-7.0.patch
# Port to latest version of Mockito 2.x
Patch2:              0003-Port-to-latest-versio-of-Mockito.patch
Patch3:              0004-Implement-a-custom-resolver-for-Tycho-in-local-mode.patch
Patch4:              0005-Fix-build-fail.patch
Patch5:              0006-Tycho-should-always-delegate-artifact-resolution-to-.patch
#Patch from: https://git.eclipse.org/c/tycho/org.eclipse.tychogit/commit/?id=43a0e167e39ffaafa5c0e70fbc0ea0b87828f1b3
Patch6:              tweaking-the-products-to-use-httpclient45-feature.patch
# Upstream Eclipse no longer supports non-64bit arches
ExcludeArch:         s390 %{arm} %{ix86}
BuildArch:           noarch
BuildRequires:       maven-local mvn(biz.aQute.bnd:bnd-maven-plugin) mvn(com.beust:jcommander)
BuildRequires:       mvn(de.pdark:decentxml) mvn(junit:junit)
BuildRequires:       mvn(org.apache.commons:commons-compress) mvn(org.apache.commons:commons-exec)
BuildRequires:       mvn(org.apache.commons:commons-lang3) mvn(org.apache.felix:maven-bundle-plugin)
BuildRequires:       mvn(org.apache.maven:maven-archiver) mvn(org.apache.maven:maven-compat)
BuildRequires:       mvn(org.apache.maven:maven-core) mvn(org.apache.maven:maven-plugin-api)
BuildRequires:       mvn(org.apache.maven.plugins:maven-clean-plugin)
BuildRequires:       mvn(org.apache.maven.plugins:maven-dependency-plugin)
BuildRequires:       mvn(org.apache.maven.plugins:maven-install-plugin)
BuildRequires:       mvn(org.apache.maven.plugins:maven-plugin-plugin)
BuildRequires:       mvn(org.apache.maven.plugins:maven-source-plugin)
BuildRequires:       mvn(org.apache.maven.plugin-testing:maven-plugin-testing-harness)
BuildRequires:       mvn(org.apache.maven.plugin-tools:maven-plugin-annotations)
BuildRequires:       mvn(org.apache.maven.shared:maven-verifier)
BuildRequires:       mvn(org.apache.maven.surefire:maven-surefire-common)
BuildRequires:       mvn(org.apache.maven.surefire:surefire-api)
BuildRequires:       mvn(org.codehaus.plexus:plexus-archiver)
BuildRequires:       mvn(org.codehaus.plexus:plexus-compiler-api)
BuildRequires:       mvn(org.codehaus.plexus:plexus-compiler-manager)
BuildRequires:       mvn(org.codehaus.plexus:plexus-component-annotations)
BuildRequires:       mvn(org.codehaus.plexus:plexus-component-metadata)
BuildRequires:       mvn(org.codehaus.plexus:plexus-container-default)
BuildRequires:       mvn(org.codehaus.plexus:plexus-utils) mvn(org.eclipse.jdt:ecj)
BuildRequires:       mvn(org.fedoraproject.xmvn:xmvn-api) mvn(org.fedoraproject.xmvn:xmvn-core)
BuildRequires:       mvn(org.fedoraproject.xmvn:xmvn-install)
BuildRequires:       mvn(org.fedoraproject.xmvn:xmvn-parent:pom:) mvn(org.hamcrest:hamcrest-core)
BuildRequires:       mvn(org.mockito:mockito-core) mvn(org.ow2.asm:asm-tree)
BuildRequires:       mvn(org.ow2.asm:asm-util) mvn(org.slf4j:slf4j-api) mvn(org.slf4j:slf4j-simple)
BuildRequires:       jetty-servlet jetty-server jetty-security
%if %{with junit5}
BuildRequires:       mvn(org.apache.maven.surefire:surefire-junit-platform)
BuildRequires:       mvn(org.apiguardian:apiguardian-api) mvn(org.opentest4j:opentest4j)
%endif
%if ! %{with bootstrap}
BuildRequires:       %{name} eclipse-platform >= 1:4.11
%else
BuildRequires:       osgi(com.ibm.icu) osgi(org.apache.commons.jxpath) osgi(org.apache.batik.css)
BuildRequires:       osgi(org.kxml2) osgi(org.sat4j.core) osgi(org.sat4j.pb) osgi(org.w3c.css.sac)
BuildRequires:       osgi(javax.servlet-api) osgi(javax.servlet.jsp)
%endif
Requires:            maven-local xmvn-minimal >= 3 ecj >= 1:4.7.3a-1
%if ! %{with bootstrap}
Requires:            eclipse-platform >= 1:4.11
%endif
Requires:            maven-clean-plugin
%description
Tycho is a set of Maven plugins and extensions for building Eclipse
plugins and OSGI bundles with Maven. Eclipse plugins and OSGI bundles
have their own metadata for expressing dependencies, source folder
locations, etc. that are normally found in a Maven POM. Tycho uses
native metadata for Eclipse plugins and OSGi bundles and uses the POM
to configure and drive the build. Tycho supports bundles, fragments,
features, update site projects and RCP applications. Tycho also knows
how to run JUnit test plugins using OSGi runtime and there is also
support for sharing build results using Maven artifact repositories.
Tycho plugins introduce new packaging types and the corresponding
lifecycle bindings that allow Maven to use OSGi and Eclipse metadata
during a Maven build. OSGi rules are used to resolve project
dependencies and package visibility restrictions are honored by the
OSGi-aware JDT-based compiler plugin. Tycho will use OSGi metadata and
OSGi rules to calculate project dependencies dynamically and injects
them into the Maven project model at build time. Tycho supports all
attributes supported by the Eclipse OSGi resolver (Require-Bundle,
Import-Package, Eclipse-GenericRequire, etc). Tycho will use proper
classpath access rules during compilation. Tycho supports all project
types supported by PDE and will use PDE/JDT project metadata where
possible. One important design goal in Tycho is to make sure there is
no duplication of metadata between POM and OSGi metadata.

%package javadoc
Summary:             Javadocs for %{name}
%description javadoc
This package contains the API documentation for %{name}.

%prep
%setup -q -n org.eclipse.tycho-%{git_tag} -a 1
mv fedoraproject-p2-%{fp_p2_git_tag} fedoraproject-p2
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%pom_remove_plugin :maven-site-plugin
%if %{without junit5}
%pom_disable_module org.eclipse.tycho.surefire.junit5 tycho-surefire
%pom_remove_dep ":org.eclipse.tycho.surefire.junit5" tycho-surefire/tycho-surefire-plugin
%endif
find . -name "*.java" | xargs sed -i 's/org.sonatype.aether/org.eclipse.aether/g'
find . -name "*.java" | xargs sed -i 's/org.eclipse.aether.util.DefaultRepositorySystemSession/org.eclipse.aether.DefaultRepositorySystemSession/g'
sed -i 's/public int getPriority/public float getPriority/g' tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnectorFactory.java
mkdir -p tycho-maven-plugin/src/main/java/org/fedoraproject
sed -i '/^<unit id=.*$/d' tycho-bundles/tycho-bundles-target/tycho-bundles-target.target
%pom_xpath_remove "pom:dependency[pom:classifier='sources' and pom:artifactId='commons-compress']" tycho-p2/tycho-p2-director-plugin
for mod in tycho-bundles/org.eclipse.tycho.{p2.{maven.repository.tests,resolver.impl.test,tools.tests},test.utils,core.shared.tests}; do
  sed -i 's/^Require-Bundle://
          /org\.junit/ i Require-Bundle: org.hamcrest.core,' \
          $mod/META-INF/MANIFEST.MF
done
sed -i -e '/tycho-testing-harness/a<version>${project.version}</version>' tycho-surefire/tycho-surefire-plugin/pom.xml
%if %{with bootstrap}
%pom_xpath_remove "pom:compilerId" tycho-lib-detector
%pom_remove_dep "org.eclipse.tycho:tycho-compiler-jdt" tycho-lib-detector
for b in core.shared.tests p2.resolver.impl.test p2.resolver.shared.tests p2.maven.repository.tests p2.tools.tests test.utils ; do
  %pom_disable_module org.eclipse.tycho.$b tycho-bundles
done
%pom_disable_module org.fedoraproject.p2.tests fedoraproject-p2
%pom_remove_dep -r :::test
tar -xf %{SOURCE10}
pushd bootstrap
for f in usr/lib/eclipse/plugins/org.eclipse.osgi.compatibility.state_*.jar \
         usr/lib/eclipse/plugins/org.eclipse.osgi_*.jar ; do
  xmvn -o install:install-file -Dfile=$f -Dpackaging=jar -DgroupId=org.eclipse.tycho -Dmaven.repo.local=$(pwd)/../.m2 \
    -DartifactId=$(echo $(basename $f) | cut -d_ -f1) -Dversion=$(echo "${f%.jar}" | cut -d_ -f2)
done
popd
cp %{SOURCE3} %{SOURCE4} .
./tycho-bootstrap.sh %{version}
%else
sysVer=`grep -C 1 "<artifactId>tycho</artifactId>" %{_mavenpomdir}/tycho/tycho.pom | grep "version" | sed 's/.*>\(.*\)<.*/\1/'`
mkdir boot
sed -e 's/ns[0-9]://g' %{_datadir}/maven-metadata/tycho.xml > boot/tycho-metadata.xml
for pom in $(grep 'pom</path>' boot/tycho-metadata.xml | sed 's|.*>\(.*\)<.*|\1|'); do
    sed -e "s/>$sysVer/>%{version}-SNAPSHOT/g" -e "s/%{fp_p2_version}%{fp_p2_snap}/%{fp_p2_version}/" <$pom >boot/$(basename $pom)
done
cp -p $(build-classpath tycho/tycho-maven-plugin) boot/tycho-maven-plugin.jar
jar xf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
sed -i s/$sysVer/%{version}-SNAPSHOT/ META-INF/plexus/components.xml
jar uf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
sed -i '
  s|>/[^<]*/\([^/]*\.pom\)</path>|>'$PWD'/boot/\1</path>|
  s|>'$sysVer'</version>|>%{version}-SNAPSHOT</version><compatVersions><version>%{version}-SNAPSHOT</version></compatVersions>|
  s|>'%{fp_p2_version}%{fp_p2_snap}'</version>|>%{fp_p2_version}</version><compatVersions><version>%{fp_p2_version}</version></compatVersions>|
  s|%{_javadir}/tycho/tycho-maven-plugin.jar|'$PWD'/boot/tycho-maven-plugin.jar|
' boot/tycho-metadata.xml
%mvn_config resolverSettings/metadataRepositories/repository $PWD/boot/tycho-metadata.xml
%endif
%pom_add_plugin :maven-clean-plugin tycho-bundles/tycho-standalone-p2-director "
<executions>
  <execution>
    <id>default-clean-1</id>
    <phase>initialize</phase>
    <configuration>
      <skip>true</skip>
    </configuration>
  </execution>
</executions>"
%pom_xpath_inject "pom:modules" "<module>fedoraproject-p2</module>"

%build
%mvn_build -f -- \
  -Dtycho-version=%{version}-SNAPSHOT -DtychoBootstrapVersion=%{version}-SNAPSHOT \
  -Dmaven.repo.local=$(pwd)/.m2 -Dfedora.p2.repos=$(pwd)/bootstrap
%mvn_artifact fedoraproject-p2/org.fedoraproject.p2/pom.xml
sed -i -e 's|type>eclipse.*<|type>jar<|' .xmvn-reactor
%mvn_package "::target::" __noinstall
%mvn_package ":org.fedoraproject.p2.tests" __noinstall

%install
cp %{SOURCE3} %{SOURCE5} .
%if ! %{with bootstrap}
chmod 777 tycho-debundle.sh
./tycho-debundle.sh $(pwd)/tycho-bundles/tycho-bundles-external \
  $(pwd)/tycho-bundles/tycho-bundles-external/target/tycho-bundles-external-manifest.txt
./tycho-debundle.sh $(pwd)/tycho-bundles/tycho-standalone-p2-director
%endif
%if %{with bootstrap}
for b in org.eclipse.osgi \
         org.eclipse.osgi.compatibility.state ; do
  osgiJarPath=$(find .m2/org/eclipse/tycho/$b/*/ -name "*.jar")
  osgiPomPath=$(find .m2/org/eclipse/tycho/$b/*/ -name "*.pom")
  %mvn_artifact $osgiPomPath $osgiJarPath
  %mvn_alias "org.eclipse.tycho:$b" "org.eclipse.osgi:$b"
done
%endif
%mvn_install
%if ! %{with bootstrap}
install -pm 644 tycho-bundles/tycho-bundles-external/target/tycho-bundles-external-manifest.txt %{buildroot}%{_javadir}/tycho
%add_maven_depmap org.eclipse.tycho:tycho-bundles-external:txt:manifest:%{version} tycho/tycho-bundles-external-manifest.txt
%endif
%if %{with bootstrap}
for bnd in \
  core.contenttype \
  core.expressions \
  core.filesystem \
  core.jobs \
  core.net \
  core.resources \
  core.runtime \
  equinox.app \
  equinox.common \
  equinox.concurrent \
  equinox.preferences \
  equinox.registry \
  equinox.security ; do
bndJarPath=$(find bootstrap -name "org.eclipse.${bnd}_*.jar")
install -m 644 -T $bndJarPath $RPM_BUILD_ROOT%{_javadir}/tycho/$bnd.jar
done
%endif
sed -i '/<resolvedVersion>/d' %{buildroot}%{_datadir}/maven-metadata/tycho.xml
install -dm 755 %{buildroot}%{_javadir}-utils/
install -pm 755 %{SOURCE6} %{buildroot}%{_javadir}-utils/
install -dm 755 %{buildroot}%{xmvn_libdir}/installer/
%if %{with bootstrap}
ln -s %{_javadir}/tycho/org.eclipse.osgi.jar %{buildroot}%{xmvn_libdir}/installer/
%else
ln -s %{_javadir}/eclipse/osgi.jar %{buildroot}%{xmvn_libdir}/installer/
%endif
ln -s %{_javadir}/tycho/xmvn-p2-installer-plugin.jar %{buildroot}%{xmvn_libdir}/installer/
ln -s %{_javadir}/tycho/org.fedoraproject.p2.jar %{buildroot}%{xmvn_libdir}/installer/

%files -f .mfiles
%{xmvn_libdir}/installer/*
%{_javadir}-utils/p2-install.sh
%if %{with bootstrap}
%{_javadir}/tycho/core.*.jar
%{_javadir}/tycho/equinox.*.jar
%endif
%doc README.md

%files javadoc -f .mfiles-javadoc

%changelog
* Wed Aug 3 2022 caodongxia <caodongxia@h-partners.com> - 1.3.0-5
- fix selfbuild error

* Fri May 06 2022 chenchen <chen_aka_jan@163.com> - 1.3.0-4
- tweaking the products to use httpclient45 feature

* Sun Sep 13 2020 yanan li <liyanan032@huawei.com> - 1.3.0-3
- fix build fail

* Sat Sep 05 2020 maminjie <maminjie1@huawei.com> - 1.3.0-2
- support local mode

* Fri Aug 21 2020 maminjie <maminjie1@huawei.com> - 1.3.0-1
- package init
