File eclipse-cdt.spec of Package eclipse-cdt

#
# spec file for package eclipse-cdt
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "bootstrap"
%bcond_without bootstrap
%else
%bcond_with bootstrap
%endif
%global _eclipsedir %{_libdir}/eclipse
%global _build_id_links alldebug
%global eclipse_base            %{_datadir}/eclipse
%global cdt_snapshot            org.eclipse.cdt-CDT_9_11_1
%ifarch s390x x86_64 aarch64 ppc64le ppc64
    %global eclipse_arch %{_arch}
%endif
# Desktop file information
%global app_name %{?app_name_prefix}%{!?app_name_prefix:Eclipse} C/C++ Debugger
%global app_exec %{?app_exec_prefix} cdtdebug
%if %{without bootstrap}
%global _enable_remote_support 1
%else
%global _enable_remote_support 0
%endif
Version:        9.11.1
Release:        0
Summary:        Eclipse C/C++ Development Tools (CDT) plugin
License:        EPL-2.0
URL:            https://www.eclipse.org/cdt
Source0:        https://git.eclipse.org/c/cdt/org.eclipse.cdt.git/snapshot/%{cdt_snapshot}.tar.xz
Source3:        eclipse-cdt.desktop
# man-page for /usr/bin/cdtdebug
Source4:        cdtdebug.man
# Following fixes cdtdebug.sh script to get proper platform filesystem plugin
Patch1:         eclipse-cdt-cdtdebug.patch
# Following fixes Standalone Debugger config.ini file to use bundle symbolic names
Patch2:         eclipse-cdt-config-ini.patch
# Following fixes Standalone Debugger README file to refer to /usr/bin/cdtdebug
Patch3:         eclipse-cdt-cdtdebug-readme.patch
Patch4:         felix-scr-dependencies.patch
BuildRequires:  desktop-file-utils
BuildRequires:  eclipse-egit
BuildRequires:  eclipse-license2
BuildRequires:  eclipse-pde
BuildRequires:  eclipse-platform
BuildRequires:  exec-maven-plugin
BuildRequires:  freemarker
BuildRequires:  gcc-c++
BuildRequires:  glassfish-jaxb-api
BuildRequires:  glassfish-jaxb-runtime >= 2.2.11-14
BuildRequires:  google-gson
BuildRequires:  make
BuildRequires:  maven-antrun-plugin
BuildRequires:  osgi(com.sun.activation.javax.activation)
BuildRequires:  osgi(com.sun.xml.bind.jaxb-impl)
BuildRequires:  rsync
BuildRequires:  tycho
BuildConflicts: java-devel >= 12
Requires:       gcc-c++
Requires:       gdb
Requires:       hamcrest
Requires:       make
Recommends:     eclipse-cdt-llvm
Recommends:     eclipse-cdt-qt
Recommends:     eclipse-linuxtools-libhover
# Upstream Eclipse no longer supports non-64bit arches
ExcludeArch:    s390 %{arm} %{ix86}
%if %{with bootstrap}
Name:           eclipse-cdt-bootstrap
Requires:       eclipse-cdt-bootstrap-native
%else
Name:           eclipse-cdt
BuildRequires:  mvn(javax.annotation:javax.annotation-api)
BuildRequires:  osgi-compendium
Requires:       eclipse-cdt-native
%endif
%if %{_enable_remote_support}
BuildRequires:  eclipse-remote >= 2.1.0
#!BuildRequires: eclipse-cdt-bootstrap-native
#!BuildRequires: eclipse-cdt-bootstrap-terminal
Requires:       autoconf
Requires:       automake
Requires:       eclipse-remote >= 2.1.0
Requires:       libtool
%endif

%description
Eclipse features and plugins that are useful for C and C++ development.

%package native
Summary:        Eclipse C/C++ Development Tools (CDT) Natives
Requires:       eclipse-platform

%description native
Architecture specific parts of CDT.

%package llvm
Summary:        Eclipse C/C++ Development Tools (CDT) LLVM
Requires:       %{name} = %{version}-%{release}
Requires:       clang
Requires:       lldb

%description llvm
Optional llvm parsers for the CDT.

%package terminal
Summary:        Eclipse Terminal Plug-in
Obsoletes:      eclipse-tm-terminal
Provides:       eclipse-tm-terminal
Obsoletes:      eclipse-tm-terminal-connectors
Provides:       eclipse-tm-terminal-connectors
Obsoletes:      eclipse-tm-terminal-rse
Provides:       eclipse-tm-terminal-rse

%description terminal
An integrated Eclipse View for the local command prompt (console) or
remote hosts (SSH, Telnet, Serial).

%if %{_enable_remote_support}
%package arduino
Summary:        Arduino C++ Tools
Requires:       %{name} = %{version}-%{release}

%description arduino
Extensions to support Arduino C++ projects in Eclipse.

%package qt
Summary:        QT C++ Tools
Requires:       %{name} = %{version}-%{release}
Requires:       pkgconfig(Qt5)
Requires:       pkgconfig(Qt5Qml)
Requires:       pkgconfig(Qt5Quick)

%description qt
Extensions to support Qt projects and objects in the indexer.

%endif

%package sdk
Summary:        Eclipse C/C++ Development Tools (CDT) SDK plugin
Requires:       %{name} = %{version}-%{release}

%description sdk
Source for Eclipse CDT for use within Eclipse.

%prep
%setup -q -n %{cdt_snapshot}

# get desktop info
mkdir desktop
cp %{SOURCE3} desktop

# handle man page
mkdir man
cp %{SOURCE4} man

%patch -P 1
%patch -P 2
%patch -P 3 -p1
%patch -P 4 -p1

# Fix tycho target environment
TYCHO_ENV="<environment><os>linux</os><ws>gtk</ws><arch>%{eclipse_arch}</arch></environment>"
%pom_xpath_set "pom:configuration/pom:environments" "$TYCHO_ENV" . core/org.eclipse.cdt.core.linux debug/org.eclipse.cdt.debug.application.product

# Add secondary arch support if we are building there
%ifarch s390x aarch64 ppc64
sed -i -e 's/linux.x86_64"/linux.%{eclipse_arch}"/g' pom.xml
pushd core
sed -i -e 's/linux.x86_64 /linux.%{eclipse_arch} /g' org.eclipse.cdt.core.native/plugin.properties
sed -i -e 's/\\(x86_64\\)/(%{eclipse_arch})/g' org.eclipse.cdt.core.native/plugin.properties
cp -r org.eclipse.cdt.core.linux.x86_64 org.eclipse.cdt.core.linux.%{eclipse_arch}
rm -fr org.eclipse.cdt.core.linux.x86_64
pushd org.eclipse.cdt.core.linux.%{eclipse_arch}
mv os/linux/x86_64 os/linux/%{eclipse_arch}
popd
sed -i -e 's/x86_64/%{eclipse_arch}/g' org.eclipse.cdt.core.linux/pom.xml org.eclipse.cdt.core.linux.%{eclipse_arch}/{pom.xml,META-INF/MANIFEST.MF}
popd
sed -i -e 's/"org.eclipse.cdt.core.linux.x86_64"/"org.eclipse.cdt.core.linux.%{eclipse_arch}"/g' \
       -e 's/arch="x86_64"/arch="%{eclipse_arch}"/' releng/org.eclipse.cdt.native-feature/feature.xml
sed -i -e "s|org.eclipse.cdt.core.linux.x86_64</module>|org.eclipse.cdt.core.linux.%{eclipse_arch}</module>|g" pom.xml

# Ensure serial can be built on current arch
sed -i -e 's|linux/x86_64/|linux/%{eclipse_arch}/|' -e 's|-m64||' \
  native/org.eclipse.cdt.native.serial/jni/Makefile
sed -i -e 's/x86_64/%{eclipse_arch}/' \
  native/org.eclipse.cdt.native.serial/pom.xml
%endif

# Ensure correct platform fragments appear in config.ini ...
sed -i -e 's/x86_64/%{eclipse_arch}/' \
  debug/org.eclipse.cdt.debug.application.product/debug.product
# ... then remove fragments on platforms they aren't shipped
%ifarch s390x aarch64 ppc64le ppc64
sed -i '/filesystem.linux.%{eclipse_arch}/d' \
  debug/org.eclipse.cdt.debug.application.product/debug.product
sed -i '/net.linux.%{eclipse_arch}/d' \
  debug/org.eclipse.cdt.debug.application.product/debug.product
%endif

# Force the arch-specific plug-ins to be dir-shaped so that binary stripping works and the native files
# aren't loaded into the user.home .eclipse configuration
echo "Eclipse-BundleShape: dir" >> core/org.eclipse.cdt.core.linux.%{eclipse_arch}/META-INF/MANIFEST.MF
echo "Eclipse-BundleShape: dir" >> native/org.eclipse.cdt.native.serial/META-INF/MANIFEST.MF
sed -i -e '/library/s/library\//library\/*.c,library\/*.h,library\/Makefile/' \
  core/org.eclipse.cdt.core.linux/build.properties

# Remove pre-built natives
rm -rf native/org.eclipse.cdt.native.serial/os/* \
       core/org.eclipse.cdt.core.linux.*/os/*
mkdir -p native/org.eclipse.cdt.native.serial/os/linux/%{eclipse_arch} \
         core/org.eclipse.cdt.core.linux.%{eclipse_arch}/os/linux/%{eclipse_arch}

# Don't use the target configuration
%pom_disable_module releng/org.eclipse.cdt.target
%pom_xpath_remove "pom:configuration/pom:target"

# Don't need to build the p2 repos
%pom_disable_module releng/org.eclipse.cdt.repo
%pom_disable_module releng/org.eclipse.cdt.testing.repo

# Disable the jgit provider and force default packaging
%pom_remove_plugin org.eclipse.tycho:tycho-packaging-plugin

# Unnecessary plugins for RPM builds
%pom_remove_plugin org.jacoco:jacoco-maven-plugin
%pom_remove_plugin :maven-enforcer-plugin

# Disable unneeded additional parsers
sed -i -e '/<module>upc\//d' pom.xml
sed -i -e '/<module>lrparser\//d' pom.xml
sed -i -e '/<module>xlc\//d' pom.xml

# Don't build and ship test bundles
%pom_disable_module launchbar/org.eclipse.launchbar.core.tests
%pom_disable_module launchbar/org.eclipse.launchbar.ui.tests
%pom_disable_module org.eclipse.tm.terminal.test terminal/plugins
%pom_disable_module build/org.eclipse.cdt.autotools.tests
%pom_disable_module build/org.eclipse.cdt.autotools.ui.tests
%pom_disable_module build/org.eclipse.cdt.cmake.ui.tests
%pom_disable_module build/org.eclipse.cdt.make.core.tests
%pom_disable_module build/org.eclipse.cdt.make.ui.tests
%pom_disable_module build/org.eclipse.cdt.managedbuilder.core.tests
%pom_disable_module build/org.eclipse.cdt.managedbuilder.ui.tests
%pom_disable_module build/org.eclipse.cdt.meson.ui.tests
%pom_disable_module codan/org.eclipse.cdt.codan.checkers.ui.tests
%pom_disable_module codan/org.eclipse.cdt.codan.core.tests
%pom_disable_module core/org.eclipse.cdt.core.tests
%pom_disable_module core/org.eclipse.cdt.ui.tests
%pom_disable_module dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui.tests
%pom_disable_module dsf-gdb/org.eclipse.cdt.dsf.gdb.tests
%pom_disable_module dsf-gdb/org.eclipse.cdt.tests.dsf.gdb
%pom_disable_module jtag/org.eclipse.cdt.debug.gdbjtag.core.tests
%pom_disable_module lsp/org.eclipse.cdt.lsp.core.tests
%pom_disable_module qt/org.eclipse.cdt.qt.ui.tests
%pom_disable_module windows/org.eclipse.cdt.msw.build.tests
%pom_disable_module testsrunner/org.eclipse.cdt.testsrunner.tests
%pom_disable_module releng/org.eclipse.cdt.testing
%pom_disable_module releng/org.eclipse.cdt.testing-feature

# Don't build and ship docker support
%pom_disable_module launch/org.eclipse.cdt.docker.launcher
%pom_disable_module launch/org.eclipse.cdt.docker.launcher-feature

# Disable autotools, and remote features if we are building a boot-strap build
%if ! %{_enable_remote_support}
%pom_disable_module org.eclipse.tm.terminal.connector.remote.feature terminal/features
%pom_disable_module org.eclipse.tm.terminal.connector.remote terminal/plugins
%pom_disable_module launchbar/org.eclipse.launchbar.remote
%pom_disable_module launchbar/org.eclipse.launchbar.remote.core
%pom_disable_module launchbar/org.eclipse.launchbar.remote.ui
%pom_disable_module build/org.eclipse.cdt.autotools.core
%pom_disable_module build/org.eclipse.cdt.autotools.docs
%pom_disable_module build/org.eclipse.cdt.autotools.ui
%pom_disable_module build/org.eclipse.cdt.autotools-feature
%pom_disable_module build/org.eclipse.cdt.cmake.core
%pom_disable_module build/org.eclipse.cdt.cmake.ui
%pom_disable_module build/org.eclipse.cdt.cmake-feature
%pom_disable_module debug/org.eclipse.cdt.debug.application
%pom_disable_module debug/org.eclipse.cdt.debug.application.product
%pom_disable_module debug/org.eclipse.cdt.debug.standalone-feature
%pom_disable_module cross/org.eclipse.cdt.launch.remote
%pom_disable_module cross/org.eclipse.cdt.launch.remote-feature
%pom_disable_module remote/org.eclipse.cdt.remote.core
%pom_disable_module qt/org.eclipse.cdt.qt.core
%pom_disable_module qt/org.eclipse.cdt.qt.ui
%pom_disable_module qt/org.eclipse.cdt.qt-feature
%pom_disable_module releng/org.eclipse.cdt.sdk
%pom_disable_module releng/org.eclipse.cdt.sdk-feature
%pom_disable_module toolchains/arduino/org.eclipse.cdt.arduino.core
%pom_disable_module toolchains/arduino/org.eclipse.cdt.arduino.ui
%pom_disable_module toolchains/arduino/org.eclipse.cdt.arduino-feature
%endif

# Disable all bundles not relavent to the platform we currently building
for b in `ls core/ | grep -P -e 'org.eclipse.cdt.core\.(?!linux\.%{eclipse_arch}$|tests$|linux$|native$)'` ; do
  module=$(grep ">core/$b<" pom.xml || :)
  if [ -n "$module" ] ; then
    %pom_disable_module "core/$b"
    %pom_xpath_remove "plugin[@id='$b']" releng/org.eclipse.cdt.native-feature/feature.xml
  fi
done

# Disable meson (missing dep tm4e)
%pom_disable_module build/org.eclipse.cdt.meson.core
%pom_disable_module build/org.eclipse.cdt.meson.docs
%pom_disable_module build/org.eclipse.cdt.meson.ui
%pom_disable_module build/org.eclipse.cdt.meson.ui.editor
%pom_disable_module build/org.eclipse.cdt.meson-feature

# Disable lsp4e (missing dep)
%pom_disable_module lsp/org.eclipse.cdt.lsp.core
%pom_disable_module lsp/org.eclipse.cdt.lsp.ui
%pom_disable_module lsp/org.eclipse.cdt.lsp-feature
%pom_disable_module debug/org.eclipse.cdt.debug.dap
%pom_disable_module debug/org.eclipse.cdt.debug.dap-feature
%pom_disable_module jtag/org.eclipse.cdt.debug.dap.gdbjtag
%pom_disable_module jtag/org.eclipse.cdt.debug.dap.gdbjtag-feature

# Disable examples
%pom_disable_module visualizer/org.eclipse.cdt.visualizer.examples
%pom_disable_module dsf/org.eclipse.cdt.examples.dsf
%pom_disable_module dsf/org.eclipse.cdt.examples.dsf.pda
%pom_disable_module dsf/org.eclipse.cdt.examples.dsf.pda.ui
%pom_disable_module dsf/org.eclipse.cdt.examples.dsf-feature
%pom_disable_module dsf-gdb/org.eclipse.cdt.examples.dsf.gdb

# Fix freemarker dep
sed -i -e 's/org.freemarker/org.freemarker.freemarker/' \
  qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF \
  tools.templates/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF \
  build/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF \
  debug/org.eclipse.cdt.debug.application.product/debug.product

# Use unversioned dep of packages that can be supplied by the JRE
sed -i -e '/javax.xml.bind/s/;version=".*"//' \
core/org.eclipse.cdt.core/META-INF/MANIFEST.MF \
qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF

# Fix jaxb deps
sed -i -e 's/com.sun.xml.bind/com.sun.xml.bind.jaxb-impl/' \
  tools.templates/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF \
  debug/org.eclipse.cdt.debug.application.product/debug.product
sed -i -e 's/javax.xml.bind/jaxb-api/' \
  tools.templates/org.eclipse.tools.templates.freemarker/build.properties \
  debug/org.eclipse.cdt.debug.application.product/debug.product
# Fix javax.annotation deps
sed -i -e 's/javax.annotation/javax.annotation-api/'  \
  doc/org.eclipse.cdt.doc.isv/pom.xml \
  debug/org.eclipse.cdt.debug.application.product/debug.product

%{mvn_package} "::pom::" __noinstall
%{mvn_package} "::jar:sources{,-feature}:" sdk
%{mvn_package} :*.sdk sdk
%{mvn_package} :*.doc.isv sdk
%{mvn_package} ":org.eclipse.cdt.core{,.native,.linux,.linux.%{eclipse_arch}}" native
%{mvn_package} ":org.eclipse.cdt.native{,.serial}" native
%{mvn_package} ":*.testsrunner*"
%{mvn_package} :org.eclipse.tools.templates.*
%{mvn_package} :org.eclipse.cdt.arduino* arduino
%{mvn_package} :org.eclipse.tm.terminal* terminal
%{mvn_package} ":org.eclipse.cdt.{managedbuilder.llvm,llvm.dsf}*" llvm
%{mvn_package} :org.eclipse.cdt.qt* qt
%{mvn_package} :org.eclipse.cdt.cmake* qt
%{mvn_package} :org.eclipse.cdt*
%{mvn_package} :org.eclipse.launchbar*

%build

export JAVA_HOME=%{_jvmdir}/java

# Build native serial library
pushd native/org.eclipse.cdt.native.serial/jni
%make_build ../os/linux/%{eclipse_arch}/libserial.so
popd

# Avoid running out of heap on s390x
export MAVEN_OPTS="-Xmx1024m"

# Qualifier generated from last modification time of source tarball
QUALIFIER=$(date -u -d"$(stat --format=%%y %{SOURCE0})" +%%Y%%m%%d%%H%%M)
%{mvn_build} -j -f -- -Dtycho.local.keepTarget -Dnative=linux.%{eclipse_arch} -DforceContextQualifier=$QUALIFIER

%install
%mvn_install

# Avoid unnecesary dep on Java 11 due to Java 11 specific fragment
sed -i 's/>11</>1.8</' %{buildroot}/%{_datadir}/maven-metadata/*.xml

# Install icons
install -D debug/org.eclipse.cdt.debug.application/icons/cc32.png \
    %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
install -D debug/org.eclipse.cdt.debug.application/icons/cc48.png \
    %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/%{name}.png
install -D debug/org.eclipse.cdt.debug.application/icons/cc128.png \
    %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/%{name}.png
install -D debug/org.eclipse.cdt.debug.application/icons/cc.png \
    %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/%{name}.png
install -d %{buildroot}%{_datadir}/pixmaps
ln -s %{_datadir}/icons/hicolor/256x256/apps/%{name}.png \
    %{buildroot}%{_datadir}/pixmaps/%{name}.png

# Fix permissions on native libraries
find %{buildroot} -name *.so -exec chmod +x {} \;

# Install desktop file
sed -i -e 's|Exec=cdtdebug|Exec=%{app_exec}|g' desktop/eclipse-cdt.desktop
sed -i -e 's|Name=Eclipse.*|Name=%{app_name}|g' desktop/eclipse-cdt.desktop
sed -i -e "s|Icon=eclipse|Icon=%{name}|g" desktop/eclipse-cdt.desktop
install -D desktop/eclipse-cdt.desktop %{buildroot}%{_datadir}/applications/%{name}.desktop
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop

# Install man page
install -D -m 644 man/cdtdebug.man %{buildroot}/%{_mandir}/man1/cdtdebug.1

%files -f .mfiles
%{_datadir}/applications/*
%{_datadir}/pixmaps/*
%{_datadir}/icons/*/*/apps/*
%{_mandir}/man1/cdtdebug.1%{?ext_man}
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%files native -f .mfiles-native
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%files sdk -f .mfiles-sdk
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%files llvm -f .mfiles-llvm
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%files terminal -f .mfiles-terminal
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%if %{_enable_remote_support}
%files qt -f .mfiles-qt
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%files arduino -f .mfiles-arduino
%license releng/org.eclipse.cdt.sdk/epl-v20.html

%endif

%changelog
openSUSE Build Service is sponsored by