summaryrefslogtreecommitdiffstats
path: root/abs/extra/valgrind/PKGBUILD
blob: 61e18d5f5bed19c0bea575ab8e63168180b769f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Maintainer: Levente Polyak <anthraxx[at]archlinux[dot]org>
# Contributor: Dan McGee <dan@archlinux.org>
# Contributor: Allan McRae <allan@archlinux.org>

pkgname=valgrind
pkgver=3.13.0
pkgrel=6
pkgdesc='Tool to help find memory-management problems in programs'
arch=('x86_64')
license=('GPL')
url='http://valgrind.org/'
depends=('glibc=2.26' 'perl')
makedepends=('gdb' 'openmpi' 'lib32-glibc' 'lib32-gcc-libs')
checkdepends=('procps-ng')
optdepends=('openmpi: MPI support'
            'lib32-glibc: 32-bit ABI support')
provides=('valgrind-multilib')
replaces=('valgrind-multilib')
options=('!emptydirs' '!strip')
source=(https://sourceware.org/pub/valgrind/valgrind-${pkgver}.tar.bz2
        valgrind-fix-xml-socket.patch
        valgrind-3.13.0-test-fixes.patch
        valgrind-3.13.0-amd64-eflags-tests.patch
        valgrind-3.13.0-gdb-8-testfix.patch
        valgrind-3.7.0-respect-flags.patch)
md5sums=('817dd08f1e8a66336b9ff206400a5369'
         '0b13c1a080260497e6159bef4401ac1a'
         '183a51089321fcf117f0f723e8e1940a'
         '47728e356bb24a34eae52e932dd56c9f'
         '02ce4a4f96b2dd649b36a7b8b19bd9d1'
         '470d9881870aacc210b7a6efb64cc9a9')
sha512sums=('34e1013cd3815d30a459b86220e871bb0a6209cc9e87af968f347083693779f022e986f211bdf1a5184ad7370cde12ff2cfca8099967ff94732970bd04a97009'
            '610c1e74a38d5e56a41eb59b25709ad40840e8c50d0d30bea20e9959cd65b99ae44626baf8a77505e5cd2ce70d120ae429a6861165546771395b00e534c3296b'
            '1cff77e987e2d20ce1563c96d76431c60c142c42afa978e32d3a8c8dda17d0f3c1ba29fe3d0fcf0e7445fa5ca9558690ecdaad259fb9d23f435dcdc0baa9175d'
            '5cb1643a8eab47ba2daa1438c50f1d29457d5aef69b6902fe3f1c72176ffa82d8048aac03ebc060ab6510cb8f59a9d41cfa1b80cf9661204b54120ee1961a607'
            'd993b7af3debdbae1e0d997f8fe47a01f83975575a125bee425dfe6f474c6ec72a0c5252e88a762cc4e866dfcb2cb1bf5bab9fead8fb5393faf049fb4aefba4f'
            'e0cec39381cefeca09ae4794cca309dfac7c8693e6315e137e64f5c33684598726d41cfbb4edf764fe985503b13ff596184ca5fc32b159d500ec092e4cf8838c')

prepare() {
  cd ${pkgname}-${pkgver}
  patch -Np1 < ../valgrind-3.7.0-respect-flags.patch
  patch -Np1 < ../valgrind-3.13.0-test-fixes.patch
  patch -Np1 < ../valgrind-3.13.0-amd64-eflags-tests.patch
  patch -Np1 < ../valgrind-3.13.0-gdb-8-testfix.patch
  patch -Np1 < ../valgrind-fix-xml-socket.patch
}

build() {
  # valgrind does not like stack protector flags
  CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/}
  CFLAGS=${CFLAGS/-fstack-protector-strong -fno-plt/}
  CXXFLAGS=${CXXFLAGS/-fstack-protector-strong -fno-plt/}

  cd ${pkgname}-${pkgver}
  ./configure \
    --prefix=/usr \
    --mandir=/usr/share/man \
    --with-mpicc=mpicc
  make
}

check() {
  cd ${pkgname}-${pkgver}

  # Make sure a basic binary runs. There should be no errors.
  ./vg-in-place --error-exitcode=1 /bin/true

  # Make sure no extra CFLAGS, CXXFLAGS or LDFLAGS leak through,
  # the testsuite sets all flags necessary. See also configure above.
  make check CFLAGS="" CXXFLAGS="" LDFLAGS=""

  # XXX: run full regtest but only report issues some tests fail duo
  # current toolchain and expectations, take a manual look if its fine
  echo ===============TESTING===================
  make regtest || :

  # Make sure test failures show up in build.log
  # Gather up the diffs (at most the first 20 lines for each one)
  MAX_LINES=20
  diff_files=$(find . -name '*.diff' | sort)
  if [ z"${diff_files}" = z ] ; then
    echo "Congratulations, all tests passed!"
  else
    warning "Some tests failed!"
    for f in ${diff_files} ; do
        echo "=================================================" >> diffs
        echo "${f}"                                              >> diffs
        echo "=================================================" >> diffs
        if [ "$(wc -l < "${f}")" -le ${MAX_LINES} ] ; then
          cat "${f}"                                             >> diffs
        else
          head -n ${MAX_LINES} "${f}"                            >> diffs
          echo "<truncated beyond ${MAX_LINES} lines>"           >> diffs
        fi
    done
  fi
  cat diffs
  echo ===============END TESTING===============
}

package() {
  cd ${pkgname}-${pkgver}
  make DESTDIR="${pkgdir}" install

  if check_option 'debug' n; then
    find "${pkgdir}/usr/bin" -type f -executable -exec strip $STRIP_BINARIES {} + || true
  fi
}

# vim: ts=2 sw=2 et: