File gdb.spec of Package gdb.17657

# spec file for package gdb
# Copyright (c) 2020 SUSE LLC
# 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

%define flavor @BUILD_FLAVOR@%{nil}

%bcond_with ringdisabled

%if "%flavor" == "testsuite"
%if %{with ringdisabled}
ExclusiveArch:  do_not_build
%if 0%{?qemu_user_space_build}
# In a qemu_user_space_build ptrace is not supported, so we can't test gdb.
ExclusiveArch:  do_not_build
%define build_main 0
%define build_testsuite 1
%define build_main 1
%define build_testsuite 0

%if %{build_testsuite}
%define debug_package %{nil}

%if %{build_main}
%define name_suffix %{nil}
%if %{build_testsuite}
%define name_suffix -testresults
%define name_suffix -%{flavor}

%bcond_without fpc

%if %{build_main}
Summary:        A GNU source-level debugger for C, C++, Fortran and other languages
License:        SUSE-Public-Domain
Group:          Development/Languages/C and C++
%if %{build_testsuite}
Summary:        GDB testsuite results
License:        SUSE-Public-Domain
Group:          Development/Languages/C and C++
Name:           gdb%{name_suffix}

Version:        10.1
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.
Source:         gdb-%{version}.tar.bz2

%if "%{scl}" == "devtoolset-1.1"
Obsoletes:      devtoolset-1.0-%{pkg_name}

# For our convenience
%global gdb_src gdb-%{version}
%global gdb_build build-%{_target_platform}
%global gdb_docdir %{_docdir}/gdb-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
%define python python

# 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.
Source2:        gdb-orphanripper.c

# Man page for gstack(1).

# /etc/gdbinit (from Debian but with Fedora compliant location).
Source4:        gdbinit
Source5:        gdbinit.without-python

# libipt: Intel Processor Trace Decoder Library
%global libipt_version 2.0.2
Source7:        v%{libipt_version}.tar.gz

# Infrastructure to sync patches from the Fedora rpm
Source12:       baselibs.conf
Source13:       gdb-rpmlintrc
%if %{build_testsuite}
NoSource:       0
NoSource:       2
NoSource:       3
NoSource:       4
NoSource:       5
NoSource:       7
NoSource:       10
NoSource:       11
NoSource:       12
NoSource:       13

#Fedora Packages begin
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-inheritancetest-20050726.patch
Patch12:        gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
Patch13:        gdb-6.5-sharedlibrary-path.patch
Patch15:        gdb-6.5-last-address-space-byte-test.patch
Patch16:        gdb-6.5-readline-long-line-crash-test.patch
Patch17:        gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
Patch18:        gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
Patch19:        gdb-6.5-bz109921-DW_AT_decl_file-test.patch
Patch20:        gdb-6.3-bz140532-ppc-unwinding-test.patch
Patch21:        gdb-6.3-bz202689-exec-from-pthread-test.patch
Patch22:        gdb-6.6-bz230000-power6-disassembly-test.patch
Patch23:        gdb-6.6-bz229517-gcore-without-terminal.patch
Patch24:        gdb-6.6-testsuite-timeouts.patch
Patch25:        gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
Patch26:        gdb-6.5-bz243845-stale-testing-zombie-test.patch
Patch27:        gdb-6.6-buildid-locate.patch
Patch28:        gdb-6.6-buildid-locate-solib-missing-ids.patch
Patch29:        gdb-6.6-buildid-locate-rpm.patch
Patch31:        gdb-6.7-ppc-clobbered-registers-O2-test.patch
Patch32:        gdb-6.7-testsuite-stable-results.patch
Patch33:        gdb-6.5-ia64-libunwind-leak-test.patch
Patch34:        gdb-6.3-mapping-zero-inode-test.patch
Patch35:        gdb-6.3-focus-cmd-prev-test.patch
Patch36:        gdb-6.8-bz442765-threaded-exec-test.patch
Patch37:        gdb-6.5-section-num-fixup-test.patch
Patch39:        gdb-simultaneous-step-resume-breakpoint-test.patch
Patch40:        gdb-core-open-vdso-warning.patch
Patch42:        gdb-ccache-workaround.patch
Patch43:        gdb-archer-pie-addons.patch
Patch44:        gdb-archer-pie-addons-keep-disabled.patch
Patch45:        gdb-lineno-makeup-test.patch
Patch46:        gdb-ppc-power7-test.patch
Patch47:        gdb-moribund-utrace-workaround.patch
Patch48:        gdb-archer-next-over-throw-cxx-exec.patch
Patch49:        gdb-bz601887-dwarf4-rh-test.patch
Patch50:        gdb-6.6-buildid-locate-core-as-arg.patch
Patch51:        gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
Patch52:        gdb-test-bt-cfi-without-die.patch
Patch53:        gdb-bz634108-solib_address.patch
Patch54:        gdb-test-pid0-core.patch
Patch55:        gdb-test-dw2-aranges.patch
Patch56:        gdb-test-expr-cumulative-archer.patch
Patch57:        gdb-physname-pr11734-test.patch
Patch58:        gdb-physname-pr12273-test.patch
Patch59:        gdb-test-ivy-bridge.patch
Patch60:        gdb-runtest-pie-override.patch
Patch61:        gdb-attach-fail-reasons-5of5.patch
Patch62:        gdb-glibc-strstr-workaround.patch
Patch63:        gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
Patch64:        gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
Patch65:        gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
Patch66:        gdb-gnat-dwarf-crash-3of3.patch
Patch67:        gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
Patch69:        gdb-archer-vla-tests.patch
Patch70:        gdb-vla-intel-tests.patch
Patch71:        gdb-btrobust.patch
Patch72:        gdb-fortran-frame-string.patch
Patch73:        gdb-rhbz1156192-recursive-dlopen-test.patch
Patch74:        gdb-jit-reader-multilib.patch
Patch75:        gdb-rhbz1149205-catch-syscall-after-fork-test.patch
Patch76:        gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
Patch77:        gdb-rhbz1350436-type-printers-error.patch
Patch78:        gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
Patch79:        gdb-bz1219747-attach-kills.patch
Patch80:        gdb-fedora-libncursesw.patch
Patch81:        gdb-opcodes-clflushopt-test.patch
Patch82:        gdb-dts-rhel6-python-compat.patch
Patch83:        gdb-6.6-buildid-locate-rpm-scl.patch
Patch84:        gdb-6.8-quit-never-aborts.patch
Patch85:        gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
Patch86:        gdb-container-rh-pkg.patch
Patch87:        gdb-rhbz1325795-framefilters-test.patch
Patch88:        gdb-linux_perf-bundle.patch
Patch90:        gdb-rhbz1398387-tab-crash-test.patch
Patch91:        gdb-archer.patch
Patch92:        gdb-vla-intel-fix-print-char-array.patch
Patch93:        gdb-rhbz1553104-s390x-arch12-test.patch
Patch94:        gdb-config.patch
#Fedora Packages end

# Fedora Packages not copied:
# Not applicable for openSUSE:
# - gdb-libexec-add-index.patch
# - gdb-6.3-rh-testversion-20041202.patch
# - gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
# - gdb-6.8-bz466901-backtrace-full-prelinked.patch
# Broken:
# - gdb-bz533176-fortran-omp-step.patch
#   reported at
# - gdb-6.5-BEA-testsuite.patch
#   over-specific test-case in a shell script
# Obsolete:
# - gdb-6.7-charsign-test.patch

# Fedora patches fixup

Patch501:       fixup-2-gdb-archer-vla-tests.patch
Patch502:       fixup-gdb-6.5-sharedlibrary-path.patch
Patch503:       fixup-gdb-6.6-buildid-locate.patch
Patch504:       fixup-gdb-dts-rhel6-python-compat.patch
Patch505:       fixup-gdb-base-gnu-ifunc-strstr-workaround-exp.patch
Patch506:       fixup-gdb-vla-intel-fortran-vla-strings.patch
Patch507:       fixup-gdb-archer-vla-tests.patch
Patch508:       fixup-gdb-6.3-test-pie-20050107.patch
Patch509:       fixup-gdb-btrobust.patch
Patch510:       fixup-gdb-bz634108-solib_address.patch
Patch511:       fixup-gdb-gnat-dwarf-crash-3of3.patch
Patch512:       fixup-gdb-6.8-bz442765-threaded-exec-test.patch
Patch513:       fixup-gdb-vla-intel-tests.patch
Patch514:       fixup-gdb-6.3-threaded-watchpoints2-20050225.patch
Patch515:       fixup-3-gdb-archer-vla-tests.patch
Patch516:       fixup-gdb-rhbz1156192-recursive-dlopen-test.patch
Patch517:       fixup-2-gdb-rhbz1156192-recursive-dlopen-test.patch
Patch518:       fixup-gdb-test-ivy-bridge.patch

# openSUSE specific

Patch1000:      gdb-gcore-bash.patch
Patch1002:      gdb-6.6-buildid-locate-rpm-suse.patch
Patch1003:      gdb-testsuite-ada-pie.patch

# Patches to upstream

Patch1500:      gdb-fix-selftest-fails-with-gdb-build-with-O2-flto.patch
Patch1501:      gdb-fortran-fix-print-dynamic-array.patch
Patch1502:      gdb-don-t-return-non-existing-path-in-debuginfod-source-query.patch
Patch1503:      gdb-fix-assert-in-process-event-stop-test.patch
Patch1504:      gdb-fix-filename-in-not-in-executable-format-error.patch
Patch1505:      gdb-handle-no-upper-bound-in-value-subscript.patch
Patch1506:      gdb-fortran-handle-dw-at-string-length-with-loclistptr.patch
Patch1507:      gdb-symtab-set-default-dwarf-max-cache-age-1000.patch
Patch1508:      gdb-testsuite-gdb-base-morestack-exp-no-clang.patch
Patch1509:      gdb-testsuite-handle-sigill-in-gdb-reverse-insn-reverse-exp.patch
Patch1510:      gdb-testsuite-fix-gdb-reverse-insn-reverse-x86-c-for-m32.patch
Patch1511:      gdb-testsuite-gdb-tui-new-layout-exp-partly-require-tcl86.patch
Patch1512:      gdb-tui-enable-work-around-libncurses-segfault.patch
Patch1513:      gdb-testsuite-fix-control-flow-in-gdb-reverse-insn-reverse-exp.patch

# Backports from master

Patch2000:      gdb-testsuite-prevent-pagination-in-gdb-internalflags.patch
Patch2002:      gdb-testsuite-catch-condition-evaluation-errors-in-gdb-assert.patch
Patch2003:      gdb-testsuite-detect-gdb-prompt-after-monitor-exit.patch
Patch2004:      gdb-testsuite-fix-gdb-dlang-watch-loc-exp-on-ppc64.patch
Patch2005:      gdb-symtab-read-cu-base-address-for-enqueued-cu.patch
Patch2006:      gdb-symtab-use-early-continue-in-find_pc_sect_compunit.patch
Patch2007:      gdb-fix-section-matching-in-find_pc_sect_compunit.patch
Patch2008:      gdb-symtab-fix-language-of-frame-without-debug-info.patch
Patch2009:      gdb-testsuite-fix-failure-in-gdb-base-step-over-no-symbols-exp.patch
Patch2010:      gdb-powerpc-remove-512-bytes-region-limit-if-2nd-dawr-is-avaliable.patch

# Testsuite patches

Patch2500:      gdb-testsuite-fix-gdb-server-ext-run-exp-for-obs.patch
%if 0%{?suse_version} > 1500 
Patch2501:      gdb-testsuite-disable-selftests-for-factory.patch

# libipt support
Patch3000:      v1.5-libipt-static.patch

BuildRequires:  bison
BuildRequires:  flex
%if 0%{suse_version} > 1110
%define gcc gcc
%define gcc gcc48
BuildRequires:  %{gcc}
BuildRequires:  %{gcc}-c++
BuildRequires:  gettext
BuildRequires:  glibc-devel
%if 0%{suse_version} > 1110 && 0%{suse_version} < 1330
# GDB supports guile 2.0, but not guile 2.2 (swo#21104).  Disable guile
# support for newer distro versions in anticipation of a move to guile 2.2.
BuildRequires:  guile-devel
BuildRequires:  libexpat-devel
%if 0%{suse_version} >= 1200
BuildRequires:  makeinfo
BuildRequires:  texinfo
BuildRequires:  expect

# Dependency is there for SLE-11, but configure test fails.
BuildRequires:  mpfr-devel

BuildRequires:  ncurses-devel
BuildRequires:  pkg-config
BuildRequires:  readline-devel
BuildRequires:  rpm-devel
# SLE-10 doesn't have xz-devel.
%if 0%{suse_version} >= 1110
BuildRequires:  xz-devel
BuildRequires:  zlib-devel
%if 0%{!?_without_python:1}
Requires:       %{python}-base
BuildRequires:  %{python}-devel
%endif	# 0%{!?_without_python:1}
%global have_libdebuginfod 0
%if 0%{?suse_version} > 1500 
%ifarch %{ix86} x86_64 aarch64 armv7l ppc64 ppc64le s390x
%global have_libdebuginfod 1
%if 0%{have_libdebuginfod}
BuildRequires:  libdebuginfod-devel
BuildRequires:  libdebuginfod1
%global have_libipt 0
%if 0%{suse_version} > 1110
%ifarch %{ix86} x86_64
%global have_libipt 1
BuildRequires:  cmake

# 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}

%ifarch s390x
%if %{suse_version} > 1500
BuildRequires:  babeltrace-devel
%ifarch ppc64
%if %{suse_version} >= 1500
BuildRequires:  babeltrace-devel
%ifarch %{ix86} x86_64
%if %{suse_version} >= 1200
BuildRequires:  babeltrace-devel
%ifarch aarch64 riscv64
BuildRequires:  babeltrace-devel

%if %{build_testsuite}

# Copied from gcc9/
# Ada currently fails to build on a few platforms, enable it only
# on those that work
%if %{suse_version} >= 1310
%if %{suse_version} >= 1330
%define ada_arch %ix86 x86_64 ppc ppc64 ppc64le s390 s390x ia64 aarch64 riscv64
%define ada_arch %ix86 x86_64 ppc ppc64 s390 ia64
%define ada_arch %ix86 x86_64 ppc s390 ia64

# 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
BuildRequires:  %{gcc}-objc
%ifarch %ada_arch
BuildRequires:  %{gcc}-ada
%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
BuildRequires:  %{gcc}-c++-32bit
%if 0%{suse_version} >= 1210 && 0%{suse_version} != 1315
BuildRequires:  glibc-devel-static-32bit
%if 0%{suse_version} >= 1210
BuildRequires:  glibc-devel-static
%if 0%{?suse_version} > 1500
# The gccgo command is used by make check for some gdb.go test-cases, so we
# need the gcc-go package.  However, the gccgo command was missing from the
# gcc-go package (bsc#1096677), so we only require it for known fixed
# versions.
BuildRequires:  gcc-go
%if 0%{?suse_version} >= 1500 && 0%{?is_opensuse}
%ifarch %{ix86} x86_64 aarch64 armv7l
%if %{with fpc}
BuildRequires:  fpc
%if 0%{?suse_version} >= 1200
%ifnarch s390
# s390 (for SLE12) doesn't have valgrind
BuildRequires:  valgrind

%ifarch s390x
%if 0%{?suse_version} >= 1500
# s390x (for SLE12 and earlier) doesn't have binutils-gold
BuildRequires:  binutils-gold
# SLE-10 doesn't have binutils-gold.
%if 0%{suse_version} >= 1110
BuildRequires:  binutils-gold

%if 0%{?suse_version} >= 1200
BuildRequires:  systemtap-sdt-devel

%if 0%{have_libdebuginfod}
BuildRequires:  curl
BuildRequires:  elfutils-debuginfod

# SLE-10 doesn't have xz.
%if 0%{suse_version} >= 1110
# Missing on SLE-11
BuildRequires:  xz

%endif # %%{build_testsuite}

%ifarch ia64
BuildRequires:  libunwind-devel
Requires:       libunwind

%if %{build_main}

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.

%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.

%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

%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.

%if %{build_testsuite}
Results from running the GDB testsuite. 

%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 / .
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
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -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
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch39 -p1
%patch40 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch48 -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
%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
%patch90 -p1
%patch91 -p1
%patch92 -p1
%patch93 -p1
%patch94 -p1
#Fedora patching end

%patch501 -p1
%patch502 -p1
%patch503 -p1
%patch504 -p1
%patch505 -p1
%patch506 -p1
%patch507 -p1
%patch508 -p1
%patch509 -p1
%patch510 -p1
%patch511 -p1
%patch512 -p1
%patch513 -p1
%patch514 -p1
%patch515 -p1
%patch516 -p1
%patch517 -p1
%patch518 -p1

%patch1000 -p1
%patch1002 -p1
%patch1003 -p1

%patch1500 -p1
%patch1501 -p1
%patch1502 -p1
%patch1503 -p1
%patch1504 -p1
%patch1505 -p1
%patch1506 -p1
%patch1507 -p1
%patch1508 -p1
%patch1509 -p1
%patch1510 -p1
%patch1511 -p1
%patch1512 -p1
%patch1513 -p1

%patch2000 -p1
%patch2002 -p1
%patch2003 -p1
%patch2004 -p1
%patch2005 -p1
%patch2006 -p1
%patch2007 -p1
%patch2008 -p1
%patch2009 -p1
%patch2010 -p1

%patch2500 -p1
%if 0%{?suse_version} > 1500 
%patch2501 -p1

#unpack libipt
%if 0%{have_libipt}
tar xzf %{SOURCE7}
 cd processor-trace-%{libipt_version}
%patch3000 -p1

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-*


# 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} ""

mkdir %{gdb_build}$fprofile
cd %{gdb_build}$fprofile

%if 0%{suse_version} > 1110
export CC
export CXX

# Add your -Wno-x/-Wno-error=y options here:
for opt in -Wno-error=odr; do
  # 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:
  if ! echo "int foo(void) { int a; return a;} " | \
     $CC  -x c -c - -o /dev/null -W ${opt} 2>&1 | \
     grep -E "Wno|no option" >/dev/null; then
    CFLAGS="$CFLAGS ${opt}"
%if %{have_libipt}
 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.
 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}"


export LIBRPM=$(ldd /bin/rpm \
		    | grep \
		    | awk '{print $3}')
if [ "$LIBRPM" != "" ]; then
    [ -f "$LIBRPM" ]
    export LIBRPM=no

%ifarch %ix86 ia64 ppc ppc64 ppc64le s390 s390x x86_64 aarch64 riscv64
%define build_multitarget 1
%define build_multitarget 0
%define target_list i686 powerpc powerpc64 powerpc64le s390 s390x x86_64 arm aarch64 m68k ia64 riscv64
%define DIST %(echo '%distribution' | sed 's, /.*,,')
%if %build_multitarget
EXTRA_TARGETS="%(printf ,%%s-suse-linux %target_list)"

../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 riscv64 aarch64
	--disable-werror					\
%if %{suse_version} <= 1110
	--disable-werror					\
	--enable-werror						\
	--with-separate-debug-dir=/usr/lib/debug		\
	--disable-sim						\
	--disable-rpath						\
	--with-system-zlib					\
%if %{suse_version} >= 1500
	--with-system-readline					\
	--without-system-readline				\
	--with-expat						\
$(: ppc64 host build crashes on ppc variant of )	\
	--without-libexpat-prefix				\
	--enable-tui						\
%if 0%{!?_without_python:1}
	--with-python=%{_bindir}/%{python}			\
	--without-python					\
%if %{suse_version} >= 1130
	--with-rpm=$LIBRPM					\
	--without-rpm						\
%ifarch ia64
	--with-libunwind					\
	--without-libunwind					\
%ifarch sparc sparcv9 sparc64
	--without-mmap						\
	--enable-64-bit-bfd					\
%if %{have_inproctrace}
	--enable-inprocess-agent				\
	--disable-inprocess-agent				\
%if %{have_libipt}
        --with-intel-pt                                         \
        --without-intel-pt                                      \
	--with-bugurl= \
	--with-pkgversion="GDB; %{DIST}" \
$(: ia64 is obsolete. )                                         \
	--enable-obsolete                                       \
	${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
%ifarch sparc sparcv9
$(: It breaks RHEL-5 by %{_target_platform} being noarch-redhat-linux-gnu ) \
%ifarch noarch

if [ -z "%{!?_with_profile:no}" ]
  # 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

# Global CFLAGS would fail on:
# conftest.c:1:1: error: coverage mismatch for function 'main' while reading counter 'arcs'
if [ "$fprofile" = "-fprofile" ]
elif [ -z "%{!?_with_profile:no}" ]
  # 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
     ln $i ../%{gdb_build}/$i

# 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


! grep '_RELOCATABLE.*1' gdb/config.h

if [ "$fprofile" = "-fprofile" ]
  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 ..

# This is a build-time test, but still a test.  So, skip if we don't do tests.
# This is relevant for %%qemu_user_space_build == 1 builds, which atm is
# the case for riscv64.
%if %{build_testsuite}
if [ "$LIBRPM" != "no" ]; then
    cd gdb
    cat \
	> hello.c \
#include <stdio.h>
main (void)
  printf ("hello\n");
  return 0;
    $CC hello.c
    libc=$(ldd a.out \
	       | grep \
	       | awk '{print $3}')
    if readelf -SW $libc \
	    | grep -q "\.gnu_debuglink"; then
	cat \
	    > test.exp \
expect {
  "(gdb) " {
    puts "\nPASS: first prompt"
    send "start\n"
  default {
    puts "\nFAIL: first prompt (eof or timeout)"
    exit 1
expect {
  -re {Missing separate debuginfos, use: zypper install glibc-debuginfo-.*\(gdb\) } {
    puts "\nPASS: zypper install message"
    send "quit\n"
    exit 0
  "(gdb) " {
    puts "\nFAIL: zypper install message"
    send "quit\n"
    exit 1
  default {
    puts "\nFAIL: zypper install message (eof or timeout)"
    exit 1
	gdb="./gdb -q -nw -nx -data-directory $(pwd -P)/data-directory"
        # Due to bsc#1146899 "gdb's zypper install message disappears with
	# -batch", we need to use an expect test.
	expect -c "spawn $gdb ./a.out" -f test.exp
	rm ./test.exp
	# If packages are not build with debuginfo, we cannot expect a zypper
	# install message.
	echo "UNSUPPORTED: zypper install message"
    rm ./hello.c ./a.out
    cd ..

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}

# Initially we're in the %%{gdb_src} directory.
cd %{gdb_build}

%if !%{build_testsuite}
echo ====================TESTSUITE DISABLED=========================
echo ====================TESTING=========================
cd gdb
%if 0%{suse_version} > 1110
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
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
  for BI in -m64 -m32 -m31 ""
    # 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
    # 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
    CHECK="$CHECK check//unix/$BI"
  # 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" ]
    CHECK="$(echo " $CHECK "|sed 's# check//unix/-m64 # #')"

  # 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 || :

  # 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')"
      CHECK="$(echo $CHECK | sed 's#check//unix/[^ ]*#& &/-fPIE/-pie#g')"

  ./orphanripper make %{?_smp_mflags} -k $CHECK || :
for t in sum log
  for file in testsuite*/gdb.$t
    ln $file gdb-%{_target_platform}$suffix.$t || :
# `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=====================

# 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

mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d

%if 0%{!?_without_python:1}
sed 's#%%{_sysconfdir}#%{_sysconfdir}#g' <%{SOURCE4} >$RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
sed 's#%%{_sysconfdir}#%{_sysconfdir}#g' <%{SOURCE5} >$RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
touch -r %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit

for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb -name "*.py"`
  # Files could be also patched getting the current time.
  touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i

%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/ $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}"'"))'
%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
  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}/	\
      > $LIBPATH/$(basename %{_root_prefix}/%{_lib}/*)
  # Test the filename '*' has matched.
  test -f $LIBPATH/[0-9]*
test ! -e $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/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
%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*}

%if %{build_testsuite}
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
rm -rf $RPM_BUILD_ROOT%{_bindir}
rm -rf $RPM_BUILD_ROOT%{_libdir}
rm -rf $RPM_BUILD_ROOT%{_datadir}/gdb
rm -rf $RPM_BUILD_ROOT%{_infodir}
rm -rf $RPM_BUILD_ROOT%{_mandir}
rm -rf $RPM_BUILD_ROOT/usr/src

# pstack obsoletion

%if %{build_main}
cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/gstack.1
%endif	# 0%{!?_with_upstream:1}

%if %{build_main}
# 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
%ifnarch x86_64
 rm -f amd64-linux.xml
%ifnarch %{ix86} x86_64
 rm -f i386-linux.xml
%ifnarch ppc ppc64
 rm -f ppc{,64}-linux.xml
%ifnarch ppc64le
 rm -f ppc64le-linux.xml

# It would break RHEL-5 by leaving excessive files for the doc subpackage.
%if 0%{?el5:1}
rm -f $RPM_BUILD_ROOT%{_infodir}/*
rm -f $RPM_BUILD_ROOT%{_infodir}/*
%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


# 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}/ ]
  %install_info --info-dir=%{_infodir} %{_infodir}/
  %install_info --info-dir=%{_infodir} %{_infodir}/

if [ $1 = 0 ]
  # For --excludedocs:
  if [ -e %{_infodir}/ ]
    %install_info_delete --delete --info-dir=%{_infodir} %{_infodir}/
    %install_info_delete --delete --info-dir=%{_infodir} %{_infodir}/

%if %{build_main}
%if 0%{suse_version} >= 1320
%config(noreplace) %{_sysconfdir}/gdbinit

%if %{build_testsuite}
%doc %{gdb_build}/gdb/gdb-*.sum
%doc %{gdb_build}/gdb/gdb-*.log

# don't include the files in include, they are part of binutils

%if %{build_main}
%ifnarch sparcv9 hppa
%files -n gdbserver
%if %{have_inproctrace}
%endif # %%{have_inproctrace}

%if %{build_main}
%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}/ ]
  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/ || :
  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/ || :

%preun doc
if [ $1 = 0 ]
  # For --excludedocs:
  if [ -e %{_infodir}/ ]
    /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/ || :
    /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/ || :

openSUSE Build Service is sponsored by