gdb/gdb.spec

1128 lines
34 KiB
RPMSpec
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# spec file for package gdb
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2012 RedHat
#
# 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/
#
%if 0%{?qemu_user_space_build}
%global _without_testsuite 1
%endif
%bcond_without testsuite
Summary: A GNU source-level debugger for C, C++, Fortran and other languages
License: GPL-3.0-or-later AND GPL-3.0-with-GCC-exception AND LGPL-2.1-or-later AND LGPL-3.0-or-later
Group: Development/Tools/Debuggers
Name: gdb
Version: 8.3
Release: 0
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# Do not provide URL for snapshots as the file lasts there only for 2 days.
# ftp://sourceware.org/pub/gdb/releases/gdb-%%{version}.tar.gz
Source: gdb-%{version}.tar.bz2
Url: http://gnu.org/software/gdb/
%if "%{scl}" == "devtoolset-1.1"
Obsoletes: devtoolset-1.0-%{pkg_name}
%endif
# For our convenience
%global gdb_src %{name}-%{version}
%global gdb_build build-%{_target_platform}
%global gdb_docdir %{_docdir}/%{name}-doc
%global have_inproctrace 0
%ifarch %{ix86} x86_64
%global have_inproctrace 1
%endif # %{ix86} x86_64
# Choose python version
%if 0%{?suse_version} >= 1320
%define python python3
%else
%define python python
%endif
# GDB patches have the format `gdb-<version>-bz<red-hat-bz-#>-<desc>.patch'.
# They should be created using patch level 1: diff -up ./gdb (or gdb-6.3/gdb).
#=
#push=Should be pushed upstream.
#maybepush=Should be pushed upstream unless it got obsoleted there.
#fedora=Should stay as a Fedora patch.
#ia64=Drop after RHEL-5 rebases and rebuilds are no longer meaningful.
#fedoratest=Keep it in Fedora only as a regression test safety.
#+ppc=Specific for ppc32/ppc64/ppc*
#+work=Requires some nontrivial work.
# Cleanup any leftover testsuite processes as it may stuck mock(1) builds.
#=push
Source2: gdb-orphanripper.c
# Man page for gstack(1).
#=push
Source3: gdb-gstack.man
# /etc/gdbinit (from Debian but with Fedora compliant location).
#=fedora
Source4: gdbinit
# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
Source6: gdbtui
# libipt: Intel Processor Trace Decoder Library
%global libipt_version 2.0
Source7: v%{libipt_version}.tar.gz
# Infrastructure to sync patches from the Fedora rpm
Source10: patchlist.pl
Source11: patchname_get.sh
Source12: baselibs.conf
Source13: gdb-rpmlintrc
#Fedora Packages begin
Patch1: gdb-6.3-rh-testversion-20041202.patch
Patch2: gdb-vla-intel-fortran-strides.patch
Patch3: gdb-vla-intel-fortran-vla-strings.patch
Patch4: gdb-vla-intel-stringbt-fix.patch
Patch5: gdb-6.3-gstack-20050411.patch
Patch6: gdb-6.3-test-pie-20050107.patch
Patch7: gdb-6.3-test-self-20050110.patch
Patch8: gdb-6.3-test-dtorfix-20050121.patch
Patch9: gdb-6.3-test-movedir-20050125.patch
Patch10: gdb-6.3-threaded-watchpoints2-20050225.patch
Patch11: gdb-6.3-inferior-notification-20050721.patch
Patch12: gdb-6.3-inheritancetest-20050726.patch
Patch13: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
Patch14: gdb-6.5-sharedlibrary-path.patch
Patch15: gdb-6.5-BEA-testsuite.patch
Patch16: gdb-6.5-last-address-space-byte-test.patch
Patch17: gdb-6.5-readline-long-line-crash-test.patch
Patch18: gdb-6.5-bz216711-clone-is-outermost.patch
Patch19: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
Patch20: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
Patch21: gdb-6.5-bz109921-DW_AT_decl_file-test.patch
Patch22: gdb-6.3-bz140532-ppc-unwinding-test.patch
Patch23: gdb-6.3-bz202689-exec-from-pthread-test.patch
Patch24: gdb-6.6-bz230000-power6-disassembly-test.patch
Patch25: gdb-6.6-bz229517-gcore-without-terminal.patch
Patch26: gdb-6.6-testsuite-timeouts.patch
Patch27: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
Patch28: gdb-6.6-scheduler_locking-step-is-default.patch
Patch29: gdb-6.3-attach-see-vdso-test.patch
Patch30: gdb-6.5-bz243845-stale-testing-zombie-test.patch
Patch31: gdb-6.6-buildid-locate.patch
Patch32: gdb-6.6-buildid-locate-solib-missing-ids.patch
Patch33: gdb-6.6-buildid-locate-rpm.patch
Patch34: gdb-6.7-charsign-test.patch
Patch35: gdb-6.7-ppc-clobbered-registers-O2-test.patch
Patch36: gdb-6.7-testsuite-stable-results.patch
Patch37: gdb-6.5-ia64-libunwind-leak-test.patch
Patch38: gdb-6.5-missed-trap-on-step-test.patch
Patch39: gdb-6.5-gcore-buffer-limit-test.patch
Patch40: gdb-6.3-mapping-zero-inode-test.patch
Patch41: gdb-6.3-focus-cmd-prev-test.patch
Patch42: gdb-6.8-bz442765-threaded-exec-test.patch
Patch43: gdb-6.5-section-num-fixup-test.patch
Patch44: gdb-6.8-bz436037-reg-no-longer-active.patch
Patch45: gdb-6.8-bz466901-backtrace-full-prelinked.patch
Patch46: gdb-simultaneous-step-resume-breakpoint-test.patch
Patch47: gdb-core-open-vdso-warning.patch
Patch49: gdb-bz533176-fortran-omp-step.patch
Patch50: gdb-follow-child-stale-parent.patch
Patch51: gdb-ccache-workaround.patch
Patch52: gdb-archer-pie-addons.patch
Patch53: gdb-archer-pie-addons-keep-disabled.patch
Patch54: gdb-lineno-makeup-test.patch
Patch55: gdb-ppc-power7-test.patch
Patch56: gdb-bz541866-rwatch-before-run.patch
Patch57: gdb-moribund-utrace-workaround.patch
Patch58: gdb-archer-next-over-throw-cxx-exec.patch
Patch59: gdb-bz601887-dwarf4-rh-test.patch
Patch60: gdb-6.6-buildid-locate-core-as-arg.patch
Patch61: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
Patch62: gdb-test-bt-cfi-without-die.patch
Patch63: gdb-bz568248-oom-is-error.patch
Patch64: gdb-bz634108-solib_address.patch
Patch65: gdb-test-pid0-core.patch
Patch66: gdb-test-dw2-aranges.patch
Patch67: gdb-test-expr-cumulative-archer.patch
Patch68: gdb-physname-pr11734-test.patch
Patch69: gdb-physname-pr12273-test.patch
Patch70: gdb-test-ivy-bridge.patch
Patch71: gdb-runtest-pie-override.patch
Patch72: gdb-attach-fail-reasons-5of5.patch
Patch73: gdb-glibc-strstr-workaround.patch
Patch74: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
Patch75: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
Patch76: gdb-rhbz795424-bitpos-20of25.patch
Patch77: gdb-rhbz795424-bitpos-21of25.patch
Patch78: gdb-rhbz795424-bitpos-22of25.patch
Patch79: gdb-rhbz795424-bitpos-23of25.patch
Patch80: gdb-rhbz795424-bitpos-25of25.patch
Patch81: gdb-rhbz795424-bitpos-25of25-test.patch
Patch82: gdb-rhbz795424-bitpos-lazyvalue.patch
Patch83: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
Patch84: gdb-gnat-dwarf-crash-3of3.patch
Patch85: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
Patch86: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
Patch87: gdb-archer-vla-tests.patch
Patch88: gdb-vla-intel-tests.patch
Patch89: gdb-btrobust.patch
Patch90: gdb-fortran-frame-string.patch
Patch91: gdb-rhbz1156192-recursive-dlopen-test.patch
Patch92: gdb-jit-reader-multilib.patch
Patch93: gdb-rhbz1149205-catch-syscall-after-fork-test.patch
Patch94: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
Patch95: gdb-rhbz1350436-type-printers-error.patch
Patch96: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
Patch97: gdb-bz1219747-attach-kills.patch
Patch98: gdb-fedora-libncursesw.patch
Patch99: gdb-opcodes-clflushopt-test.patch
Patch100: gdb-dts-rhel6-python-compat.patch
Patch101: gdb-6.6-buildid-locate-rpm-scl.patch
Patch102: gdb-readline62-ask-more-rh.patch
Patch103: gdb-6.8-quit-never-aborts.patch
Patch104: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
Patch105: gdb-container-rh-pkg.patch
Patch106: gdb-rhbz1325795-framefilters-test.patch
Patch107: gdb-linux_perf-bundle.patch
Patch108: gdb-libexec-add-index.patch
Patch109: gdb-rhbz1398387-tab-crash-test.patch
Patch110: gdb-testsuite-readline63-sigint.patch
Patch111: gdb-archer.patch
Patch112: gdb-vla-intel-fix-print-char-array.patch
Patch113: gdb-rhbz1553104-s390x-arch12-test.patch
Patch114: gdb-rhbz795424-bitpos-arrayview.patch
Patch115: gdb-rhbz1371380-gcore-elf-headers.patch
#Fedora Packages end
# Upstream patch to fix gcc -Werror
Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch
Patch1004: gdb-fix-buf-overflow.diff
Patch1005: gdb-7.10-swo18929.patch
Patch1007: gdb-fix-s390-build.diff
Patch1008: gdb-gcc9-fix-build-with-latest-GCC-9.0-tree.patch
Patch1009: gdb-gcc9-warning-on-elf32-arm.c-elf32_arm_final_link.patch
# Backports from master
Patch2000: gdb-handle-vfork-in-thread-with-follow-fork-mode-child.patch
Patch2001: gdb-fix-riscv-tdep.patch
Patch2002: gdb-x86_64-i386-syscall-restart-master.patch
# Submitted for master
Patch2500: gdb-fix-heap-use-after-free-in-typename-concat.patch
Patch2501: gdb-symtab-fix-symbol-loading-performance-regression.patch
# libipt support
Patch3000: v1.5-libipt-static.patch
BuildRequires: bison
BuildRequires: flex
%if 0%{suse_version} > 1110
%define gcc gcc
%else
%define gcc gcc48
%endif
BuildRequires: %{gcc}
BuildRequires: %{gcc}-c++
BuildRequires: gettext
BuildRequires: glibc-devel
%if 0%{suse_version} > 1110 && 0%{suse_version} < 1330
BuildRequires: guile-devel
%endif
BuildRequires: ncurses-devel
BuildRequires: texinfo
%if %{suse_version} < 1020
BuildRequires: expat
%else
BuildRequires: libexpat-devel
%endif
BuildRequires: pkg-config
BuildRequires: readline-devel
BuildRequires: rpm-devel
BuildRequires: zlib-devel
BuildRequires: mpfr-devel
%if 0%{!?_without_python:1}
%if 0%{suse_version} > 1000
Requires: %{python}-base
%endif
BuildRequires: %{python}-devel
%endif # 0%{!?_without_python:1}
%global have_libipt 0
%if 0%{suse_version} > 1110
%ifarch %{ix86} x86_64
%global have_libipt 1
BuildRequires: cmake
%endif
%endif
# BuildArch would break RHEL-5 by overriding arch and not building noarch.
%if 0%{?el5:1}
ExclusiveArch: noarch i386 x86_64 ppc ppc64 ia64 s390 s390x
%endif # 0%{?el5:1}
%if %{with testsuite}
# Ensure the devel libraries are installed for both multilib arches.
%global bits_local %{?_isa}
%global bits_other %{?_isa}
%if 0%{!?el5:1}
%ifarch s390x
%global bits_other (%{__isa_name}-32)
%else #!s390x
%ifarch ppc
%global bits_other (%{__isa_name}-64)
%else #!ppc
%ifarch sparc64 ppc64 s390x x86_64
%global bits_other (%{__isa_name}-32)
%endif #sparc64 ppc64 s390x x86_64
%endif #!ppc
%endif #!s390x
%endif #!el5
BuildRequires: dejagnu
BuildRequires: sharutils
# gcc-objc++ is not covered by the GDB testsuite.
BuildRequires: %{gcc}-fortran
%if 0%{?gcc_version} < 7 && 0%{suse_version} > 1110
BuildRequires: %{gcc}-java
%endif
BuildRequires: %{gcc}-objc
# Copied from gcc-4.1.2-32.
%ifarch %{ix86} x86_64 ia64 ppc ppc64 s390 alpha
BuildRequires: %{gcc}-ada
%endif
%ifarch aarch64
%if 0%{suse_version} >= 1330
BuildRequires: %{gcc}-ada
%endif
%endif
%if 0%{!?disable_32bit:1}
# openSUSE for s390x doesn't build 32bit libs
%if 0%{suse_version} > 1110
%ifarch x86_64 ppc64 s390x
%if 0%{suse_version} >= 1330
# Older distros miss this pseudo package, the Ada
# testsuite won't work completely
BuildRequires: %{gcc}-ada-32bit
%endif
BuildRequires: %{gcc}-c++-32bit
%if 0%{suse_version} >= 1210 && 0%{suse_version} != 1315
BuildRequires: glibc-devel-static-32bit
%endif
%endif
%endif
%endif
%if 0%{suse_version} >= 1210
BuildRequires: glibc-devel-static
%endif
%endif # %{with testsuite}
%ifarch ia64
BuildRequires: libunwind-devel
Requires: libunwind
%endif
%description
GDB, the GNU debugger, allows you to debug programs written in C, C++,
Java, and other languages, by executing them in a controlled fashion
and printing their data.
%ifarch riscv64
# Work around RPM build error:
# ...
# Installed (but unpackaged) file(s) found:
# /usr/share/man/man1/gdbserver.1.gz
# ...
# Filed at PR24575 - "gdbserver.1 should only be installed if gdbserver was
# build" ( https://sourceware.org/bugzilla/show_bug.cgi?id=24575 ).
%define _unpackaged_files_terminate_build 0
%endif
%ifnarch riscv64
%if %{suse_version} > 1010
%package -n gdbserver
Summary: A standalone server for GDB (the GNU source-level debugger)
License: GPL-3.0-or-later AND GPL-3.0-with-GCC-exception AND LGPL-2.1-or-later AND LGPL-3.0-or-later
Group: Development/Tools/Debuggers
%description -n gdbserver
GDB, the GNU debugger, allows you to debug programs written in C, C++,
Java, and other languages, by executing them in a controlled fashion
and printing their data.
This package provides a program that allows you to run GDB on a different
machine than the one which is running the program being debugged.
%endif
%endif
%package doc
Summary: Documentation for GDB (the GNU source-level debugger)
License: GFDL-1.3-only
Group: Documentation/Other
PreReq: %{install_info_prereq}
%if "%{scl}" == "devtoolset-1.1"
Obsoletes: devtoolset-1.0-%{pkg_name}-doc
%endif
%description doc
GDB, the GNU debugger, allows you to debug programs written in C, C++,
Java, and other languages, by executing them in a controlled fashion
and printing their data.
This package provides INFO, HTML and PDF user manual for GDB.
%package testresults
Summary: GDB testsuite results
License: SUSE-Public-Domain
Group: Development/Languages/C and C++
%description testresults
Results from running the GDB testsuite.
%prep
%setup -q -n %{gdb_src}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
# libstdc++ pretty printers.
tar xjf %{SOURCE5}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
# Files have `# <number> <file>' statements breaking VPATH / find-debuginfo.sh .
rm -f gdb/ada-exp.c gdb/ada-lex.c gdb/c-exp.c gdb/cp-name-parser.c gdb/f-exp.c
rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c gdb/go-exp.c
# *.info* is needlessly split in the distro tar; also it would not get used as
# we build in %{gdb_build}, just to be sure.
find -name "*.info*"|xargs rm -f
#Fedora patching start
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch49 -p1
%patch50 -p1
%patch51 -p1
%patch52 -p1
%patch53 -p1
%patch54 -p1
%patch55 -p1
%patch56 -p1
%patch57 -p1
%patch58 -p1
%patch59 -p1
%patch60 -p1
%patch61 -p1
%patch62 -p1
%patch63 -p1
%patch64 -p1
%patch65 -p1
%patch66 -p1
%patch67 -p1
%patch68 -p1
%patch69 -p1
%patch70 -p1
%patch71 -p1
%patch72 -p1
%patch73 -p1
%patch74 -p1
%patch75 -p1
%patch76 -p1
%patch77 -p1
%patch78 -p1
%patch79 -p1
%patch80 -p1
%patch81 -p1
%patch82 -p1
%patch83 -p1
%patch84 -p1
%patch85 -p1
%patch86 -p1
%patch87 -p1
%patch88 -p1
%patch89 -p1
%patch90 -p1
%patch91 -p1
%patch92 -p1
%patch93 -p1
%patch94 -p1
%patch95 -p1
%patch96 -p1
%patch97 -p1
%patch98 -p1
%patch99 -p1
%patch100 -p1
%patch101 -p1
%patch102 -p1
%patch103 -p1
%patch104 -p1
%patch105 -p1
%patch106 -p1
%patch107 -p1
%patch108 -p1
%patch109 -p1
%patch110 -p1
%patch111 -p1
%patch112 -p1
%patch113 -p1
%patch114 -p1
%patch115 -p1
#Fedora patching end
%patch1002 -p1
%patch1004 -p1
%patch1005 -p1
%patch1007 -p1
%patch1008 -p1
%patch1009 -p1
%patch2000 -p1
%patch2001 -p1
%patch2002 -p1
%patch2500 -p1
%patch2501 -p1
#unpack libipt
%if 0%{have_libipt}
tar xzf %{SOURCE7}
(
cd processor-trace-%{libipt_version}
%patch3000 -p1
)
%endif
find -name "*.orig" | xargs rm -f
! find -name "*.rej" # Should not happen.
# Remove the info and other generated files added by the FSF release
# process.
rm -f libdecnumber/gstdint.h
rm -f bfd/doc/*.info
rm -f bfd/doc/*.info-*
rm -f gdb/doc/*.info
rm -f gdb/doc/*.info-*
%build
rm -rf %{buildroot}
# Identify the build directory with the version of gdb as well as the
# architecture, to allow for mutliple versions to be installed and
# built.
# Initially we're in the %{gdb_src} directory.
for fprofile in %{?_with_profile:-fprofile} ""
do
mkdir %{gdb_build}$fprofile
cd %{gdb_build}$fprofile
%if 0%{suse_version} > 1110
CC=gcc
CXX=g++
%else
CC=gcc-4.8
CXX=g++-4.8
%endif
export CC
export CXX
export CFLAGS="$RPM_OPT_FLAGS"
# FIXME: gcc-7 compatibility.
# checking for acceptance of -Wno-foo is a bit wieldy: GCC doesn't
# warn about unknown -Wno- flags, _except_ if there are other
# diagnostics as well, so let's force an uninitialized use warning
# and grep for the diagnostic about the -Wno flag:
# -Wno-error=cast-function-type:
# FIXME: gcc-8.0:
# ./elf32-target.h:215:4: error: cast between incompatible function types from 'void * (*)(bfd *)' {aka 'void * (*)(struct bfd *)'} to 'asymbol * (*)(bfd *, void *, long unsigned int)' {aka 'struct bfd_symbol * (*)(struc t bfd *, void *, long unsigned int)'} [-Werror=cast-function-type]
# ((asymbol * (*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
# -Wno-error=stringop-truncation:
# FIXME: gcc-8.0:
# linux-tdep.c:1767:11: error: char* strncpy(char*, const char*, size_t) specified bound 17 equals destination size [-Werror=stringop-truncation]
# strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
for opt in -Wno-implicit-fallthrough -Wno-error=cast-function-type -Wno-error=stringop-truncation; do
if ! echo "int foo(void) { int a; return a;} " | \
$CC -x c -c - -o /dev/null -W ${opt} 2>&1 | \
egrep "Wno|no option" >/dev/null; then
CFLAGS="$CFLAGS ${opt}"
fi
done
%if %{have_libipt}
CFLAGS="$CFLAGS -DPERF_ATTR_SIZE_VER5_BUNDLE"
(
mkdir processor-trace-%{libipt_version}-root
mkdir processor-trace-%{libipt_version}-build
cd processor-trace-%{libipt_version}-build
# -DPTUNIT:BOOL=ON has no effect on ctest.
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPTUNIT:BOOL=OFF \
-DDEVBUILD:BOOL=ON \
../../processor-trace-%{libipt_version}
make VERBOSE=1 %{?_smp_mflags}
ctest -V %{?_smp_mflags}
make install DESTDIR=../processor-trace-%{libipt_version}-root
)
# There is also: --with-libipt-prefix
CFLAGS="$CFLAGS -I$PWD/processor-trace-%{libipt_version}-root%{_includedir}"
LDFLAGS="$LDFLAGS -L$PWD/processor-trace-%{libipt_version}-root%{_libdir}"
%endif
export CXXFLAGS="$CFLAGS"
export LIBRPM=no
if test -f /usr/%{_lib}/librpm.so.1; then
export LIBRPM=librpm.so.1
fi
if test -f /usr/%{_lib}/librpm.so.2; then
export LIBRPM=librpm.so.2
fi
if test -f /usr/%{_lib}/librpm.so.3; then
export LIBRPM=librpm.so.3
fi
%ifarch %ix86 ia64 ppc ppc64 ppc64le s390 s390x x86_64 aarch64
%define build_multitarget 1
%else
%define build_multitarget 0
%endif
# For now disable ia64 until ia64-tdep.c is fixed
%define target_list i686 powerpc powerpc64 powerpc64le s390 s390x x86_64 arm aarch64 m68k
%define DIST %(echo '%distribution' | sed 's, /.*,,')
%if %build_multitarget
EXTRA_TARGETS="%(printf ,%%s-suse-linux %target_list)"
EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
%else
EXTRA_TARGETS=
%endif
../configure \
--prefix=%{_prefix} \
--libdir=%{_libdir} \
--sysconfdir=%{_sysconfdir} \
--mandir=%{_mandir} \
--infodir=%{_infodir} \
--htmldir=%{gdb_docdir} \
--pdfdir=%{gdb_docdir} \
--with-system-gdbinit=%{_sysconfdir}/gdbinit \
--with-gdb-datadir=%{_datadir}/gdb \
--enable-gdb-build-warnings=,-Wno-unused \
%ifnarch %{ix86} alpha ia64 ppc s390 s390x x86_64 ppc64 ppc64le sparc sparcv9 sparc64
--disable-werror \
%else
%if %{suse_version} <= 1110
--disable-werror \
%else
--enable-werror \
%endif
%endif
--with-separate-debug-dir=/usr/lib/debug \
--disable-sim \
--disable-rpath \
--with-system-zlib \
%if %{suse_version} > 1110
--with-system-readline \
%else
--without-system-readline \
%endif
--with-expat \
$(: ppc64 host build crashes on ppc variant of libexpat.so ) \
--without-libexpat-prefix \
--enable-tui \
%if 0%{!?_without_python:1}
--with-python=%{_bindir}/%{python} \
%else
--without-python \
%endif
%if %{suse_version} >= 1130
--with-rpm=$LIBRPM \
%else
--without-rpm \
%endif
%ifarch ia64
--with-libunwind \
%else
--without-libunwind \
%endif
%ifarch sparc sparcv9 sparc64
--without-mmap \
%endif
--enable-64-bit-bfd \
%if %{have_inproctrace}
--enable-inprocess-agent \
%else
--disable-inprocess-agent \
%endif
%if %{have_libipt}
--with-intel-pt \
%else
--without-intel-pt \
%endif
--with-bugurl=http://bugs.opensuse.org/ \
--with-pkgversion="GDB; %{DIST}" \
${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
%ifarch sparc sparcv9
--build=sparc-%{_vendor}-%{_target_os}%{?_gnu}
%else
$(: It breaks RHEL-5 by %{_target_platform} being noarch-redhat-linux-gnu ) \
%ifarch noarch
$(:)
%else
--build=%{_target_platform}
%endif
%endif
if [ -z "%{!?_with_profile:no}" ]
then
# Run all the configure tests being incompatible with $FPROFILE_CFLAGS.
make %{?_smp_mflags} configure-host configure-target
make %{?_smp_mflags} clean
# Workaround -fprofile-use:
# linux-x86-low.c:2225: Error: symbol `start_i386_goto' is already defined
make %{?_smp_mflags} -C gdb/gdbserver linux-x86-low.o
fi
# Global CFLAGS would fail on:
# conftest.c:1:1: error: coverage mismatch for function 'main' while reading counter 'arcs'
if [ "$fprofile" = "-fprofile" ]
then
FPROFILE_CFLAGS='-fprofile-generate'
elif [ -z "%{!?_with_profile:no}" ]
then
FPROFILE_CFLAGS='-fprofile-use'
# We cannot use -fprofile-dir as the bare filenames clash.
(cd ../%{gdb_build}-fprofile;
# It was 333 on x86_64.
test $(find -name "*.gcda"|wc -l) -gt 300
find -name "*.gcda" | while read -r i
do
ln $i ../%{gdb_build}/$i
done
)
else
FPROFILE_CFLAGS=""
fi
# Prepare gdb/config.h first.
make %{?_smp_mflags} V=1 CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$LDFLAGS $FPROFILE_CFLAGS" maybe-configure-gdb
perl -i.relocatable -pe 's/^(D\[".*_RELOCATABLE"\]=" )1(")$/${1}0$2/' gdb/config.status
make %{?_smp_mflags} V=1 CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$LDFLAGS $FPROFILE_CFLAGS"
! grep '_RELOCATABLE.*1' gdb/config.h
if [ "$fprofile" = "-fprofile" ]
then
cd gdb
cp -p gdb gdb-withindex
PATH="$PWD:$PATH" sh ../../gdb/gdb-add-index $PWD/gdb-withindex
./gdb -nx -ex q ./gdb-withindex
./gdb -nx -readnow -ex q ./gdb-withindex
cd ..
fi
cd ..
done # fprofile
cd %{gdb_build}
#make %{?_smp_mflags} -C gdb/doc {gdb,annotate}{.info,/index.html,.pdf} MAKEHTMLFLAGS=--no-split
# Copy the <sourcetree>/gdb/NEWS file to the directory above it.
cp $RPM_BUILD_DIR/%{gdb_src}/gdb/NEWS $RPM_BUILD_DIR/%{gdb_src}
%check
# Initially we're in the %{gdb_src} directory.
cd %{gdb_build}
%if %{without testsuite}
echo ====================TESTSUITE DISABLED=========================
%else
echo ====================TESTING=========================
cd gdb
%if 0%{suse_version} > 1110
CC=gcc
CXX=g++
%else
CC=gcc-4.8
CXX=g++-4.8
mkdir progs
for i in gcc g++ gcj gfortran gnat gnatbind gnatmake; do
test -f /usr/bin/${i}-4.8 && ln -sf /usr/bin/${i}-4.8 progs/$i
done
PATH="`pwd`"/progs:${PATH}
%endif
export CC
export CXX
$CC -o ./orphanripper %{SOURCE2} -Wall -lutil -ggdb2
# Need to use a single --ignore option, second use overrides first.
# No `%{?_smp_mflags}' here as it may race.
# WARNING: can't generate a core file - core tests suppressed - check ulimit
# "readline-overflow.exp" - Testcase is broken, functionality is OK.
(
# ULIMIT required for `gdb.base/auxv.exp'.
ulimit -H -c
ulimit -c unlimited || :
# Setup $CHECK as `check//unix/' or `check//unix/-m64' for explicit bitsize.
# Never use two different bitsizes as it fails on ppc64.
echo 'int main (void) { return 0; }' >biarch.c
CHECK=""
for BI in -m64 -m32 -m31 ""
do
# Do not use size-less options if any of the sizes works.
# On ia64 there is no -m64 flag while we must not leave a bare `check' here
# as it would switch over some testing scripts to the backward compatibility
# mode: when `make check' was executed from inside the testsuite/ directory.
if [ -z "$BI" -a -n "$CHECK" ];then
continue
fi
# Do not use $RPM_OPT_FLAGS as the other non-size options will not be used
# in the real run of the testsuite.
if ! $CC $BI -o biarch biarch.c
then
continue
fi
CHECK="$CHECK check//unix/$BI"
done
# Do not try -m64 inferiors for -m32 GDB as it cannot handle inferiors larger
# than itself.
# s390 -m31 still uses the standard ELF32 binary format.
$CC $RPM_OPT_FLAGS -o biarch biarch.c
RPM_SIZE="$(file ./biarch|sed -n 's/^.*: ELF \(32\|64\)-bit .*$/\1/p')"
if [ "$RPM_SIZE" != "64" ]
then
CHECK="$(echo " $CHECK "|sed 's# check//unix/-m64 # #')"
fi
# Disable some problematic testcases.
# RUNTESTFLAGS='--ignore ...' is not used below as it gets separated by the
# `check//...' target spawn and too much escaping there would be dense.
for test in \
gdb.base/readline-overflow.exp \
gdb.base/bigcore.exp \
gdb.threads/attach-many-short-lived-threads.exp \
; do
mv -f ../../gdb/testsuite/$test ../../gdb/testsuite/$test-DISABLED || :
done
# Run all the scheduled testsuite runs also in the PIE mode.
# See also: gdb-runtest-pie-override.exp
if rpm -q gcc-PIE; then
CHECK="$(echo $CHECK | sed 's#check//unix/[^ ]*#& &/-fno-PIE/-no-pie#g')"
else
CHECK="$(echo $CHECK | sed 's#check//unix/[^ ]*#& &/-fPIE/-pie#g')"
fi
./orphanripper make %{?_smp_mflags} -k $CHECK || :
)
for t in sum log
do
for file in testsuite*/gdb.$t
do
suffix="${file#testsuite.unix.}"
suffix="${suffix%/gdb.$t}"
ln $file gdb-%{_target_platform}$suffix.$t || :
done
done
# `tar | bzip2 | uuencode' may have some piping problems in Brew.
#tar cjf gdb-%{_target_platform}.tar.bz2 gdb-%{_target_platform}*.{sum,log}
#uuencode gdb-%{_target_platform}.tar.bz2 gdb-%{_target_platform}.tar.bz2
# Strip dates and completion times from the log to make build-compare happy
sed -i -e '/Test Run By abuild on/d' -e 's/completed in [0-9]* seconds//' *.{sum,log}
cd ../..
echo ====================TESTING END=====================
%endif
%install
# Initially we're in the %{gdb_src} directory.
cd %{gdb_build}
# It would break RHEL-5 by leaving excessive files for the doc subpackage.
%ifnarch noarch
make %{?_smp_mflags} install DESTDIR=$RPM_BUILD_ROOT
# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
%if 0%{?rhel:1} && 0%{?rhel} <= 6
test ! -e $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui
install -m 755 %{SOURCE6} $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui
ln -sf gdb.1 $RPM_BUILD_ROOT%{_mandir}/man1/gdbtui.1
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
sed 's#%%{_sysconfdir}#%{_sysconfdir}#g' <%{SOURCE4} >$RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb -name "*.py"`
do
# Files could be also patched getting the current time.
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
done
%if 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
mkdir -p $RPM_BUILD_ROOT/usr/lib/debug%{_bindir}
cp -p $RPM_BUILD_DIR/%{gdb_src}/gdb/gdb-gdb.py $RPM_BUILD_ROOT/usr/lib/debug%{_bindir}/
for pyo in "" "-O";do
# RHEL-5: AttributeError: 'module' object has no attribute 'compile_file'
%{python} $pyo -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT/usr/lib/debug%{_bindir}"'", 1, "'"/usr/lib/debug%{_bindir}"'"))'
done
%endif # 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
mkdir $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load
%if 0%{?rhel:1} && 0%{?rhel} <= 6
%if 0%{!?_without_python:1}
# Temporarily now:
for LIB in lib lib64;do
LIBPATH="$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_root_prefix}/$LIB"
mkdir -p $LIBPATH
# basename is being run only for the native (non-biarch) file.
sed -e 's,@pythondir@,%{_datadir}/gdb/python,' \
-e 's,@toolexeclibdir@,%{_root_prefix}/'"$LIB," \
< $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/hook.in \
> $LIBPATH/$(basename %{_root_prefix}/%{_lib}/libstdc++.so.6.*)-gdb.py
# Test the filename 'libstdc++.so.6.*' has matched.
test -f $LIBPATH/libstdc++.so.6.[0-9]*-gdb.py
done
test ! -e $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \
$RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python -name "*.py"` \
`find $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_prefix} -name "*.py"` \
; do
# Files come from gdb-archer.patch and can be also further patched.
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
done
%endif # 0%{!?_without_python:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
# Remove the files that are part of a gdb build but that are owned and
# provided by other packages.
# These are part of binutils
rm -rf $RPM_BUILD_ROOT%{_datadir}/locale/
rm -f $RPM_BUILD_ROOT%{_infodir}/bfd*
rm -f $RPM_BUILD_ROOT%{_infodir}/standard*
rm -f $RPM_BUILD_ROOT%{_infodir}/configure*
rm -rf $RPM_BUILD_ROOT%{_includedir}
rm -rf $RPM_BUILD_ROOT/%{_libdir}/lib{bfd*,opcodes*,iberty*}
# pstack obsoletion
cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/gstack.1
%endif # 0%{!?_with_upstream:1}
# Packaged GDB is not a cross-target one.
(cd $RPM_BUILD_ROOT%{_datadir}/gdb/syscalls
rm -f mips*.xml
%ifnarch sparc sparcv9 sparc64
rm -f sparc*.xml
%endif
%ifnarch x86_64
rm -f amd64-linux.xml
%endif
%ifnarch %{ix86} x86_64
rm -f i386-linux.xml
%endif
%ifnarch ppc ppc64
rm -f ppc{,64}-linux.xml
%endif
%ifnarch ppc64le
rm -f ppc64le-linux.xml
%endif
)
# It would break RHEL-5 by leaving excessive files for the doc subpackage.
%if 0%{?el5:1}
rm -f $RPM_BUILD_ROOT%{_infodir}/annotate.info*
rm -f $RPM_BUILD_ROOT%{_infodir}/gdb.info*
%endif # 0%{?el5:1}
# -j1: There is some race resulting in:
# /usr/bin/texi2dvi: texinfo.tex appears to be broken, quitting.
make -j1 -C gdb/doc install DESTDIR=$RPM_BUILD_ROOT
# Documentation only for development; keep 'rm's here after "noarch" above.
rm -f $RPM_BUILD_ROOT%{_infodir}/gdbint*
rm -f $RPM_BUILD_ROOT%{_infodir}/stabs*
# Delete this too because the dir file will be updated at rpm install time.
# We don't want a gdb specific one overwriting the system wide one.
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
%post
# This step is part of the installation of the RPM. Not to be confused
# with the 'make install ' of the build (rpmbuild) process.
# For --excludedocs:
if [ -e %{_infodir}/gdb.info.gz ]
then
%install_info --info-dir=%{_infodir} %{_infodir}/annotate.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/gdb.info.gz
fi
%preun
if [ $1 = 0 ]
then
# For --excludedocs:
if [ -e %{_infodir}/gdb.info.gz ]
then
%install_info_delete --delete --info-dir=%{_infodir} %{_infodir}/annotate.info.gz
%install_info_delete --delete --info-dir=%{_infodir} %{_infodir}/gdb.info.gz
fi
fi
%files
%defattr(-,root,root)
%doc README NEWS
%if 0%{suse_version} >= 1320
%license COPYING3 COPYING COPYING.LIB
%else
%doc COPYING3 COPYING COPYING.LIB
%endif
%{_bindir}/gcore
%{_mandir}/*/gcore.1*
%{_bindir}/gdb
%config(noreplace) %{_sysconfdir}/gdbinit
%{_sysconfdir}/gdbinit.d
%{_mandir}/*/gdb.1*
%{_bindir}/gstack
%{_mandir}/*/gstack.1*
# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
%if 0%{?rhel:1} && 0%{?rhel} <= 6
%{_bindir}/gdbtui
%{_mandir}/*/gdbtui.1*
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
%{_bindir}/gdb-add-index
%{_mandir}/*/gdb-add-index.1*
%{_mandir}/*/gdbinit.5*
%{_datadir}/gdb
%{_infodir}/annotate.info*
%{_infodir}/gdb.info*
%ifnarch riscv64
# In SLE10 gdbserver is not in a separate package
%if %{suse_version} <= 1010
%{_bindir}/gdbserver
%{_mandir}/*/gdbserver.1*
%ifnarch s390 s390x ia64 ppc %{sparc}
%{_libdir}/libinproctrace.so
%endif
%endif
%endif
%if %{with testsuite}
%files testresults
%defattr(-,root,root)
%doc %{gdb_build}/gdb/gdb-*.sum
%doc %{gdb_build}/gdb/gdb-*.log
%endif
# don't include the files in include, they are part of binutils
%ifnarch riscv64
%if %{suse_version} > 1010
%ifnarch sparcv9 hppa
%files -n gdbserver
%defattr(-,root,root)
%{_bindir}/gdbserver
%{_mandir}/*/gdbserver.1*
%if %{have_inproctrace}
%{_libdir}/libinproctrace.so
%endif # %{have_inproctrace}
%endif
%endif
%endif
%post doc
# This step is part of the installation of the RPM. Not to be confused
# with the 'make install ' of the build (rpmbuild) process.
# For --excludedocs:
if [ -e %{_infodir}/gdb.info.gz ]
then
/sbin/install-info --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || :
/sbin/install-info --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || :
fi
%preun doc
if [ $1 = 0 ]
then
# For --excludedocs:
if [ -e %{_infodir}/gdb.info.gz ]
then
/sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || :
/sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || :
fi
fi
%changelog