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