uftrace: add new package (#25710)

This commit is contained in:
bernhardkaindl 2021-09-06 15:57:11 +02:00 committed by GitHub
parent 834155fdb8
commit 13c0b0dcb3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -0,0 +1,71 @@
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
from spack import *
class Uftrace(AutotoolsPackage):
"""Dynamic function graph tracer for Linux which demangles C, C++ and Rust calls"""
homepage = 'https://uftrace.github.io/slide/'
url = 'https://github.com/namhyung/uftrace/archive/v0.10.tar.gz'
git = 'https://github.com/namhyung/uftrace.git'
executables = ['^uftrace$']
maintainers = ['bernhardkaindl']
tags = ['trace-tools']
# The build process uses 'git describe --tags' to get the package version
version('master', branch='master', get_full_repo=True)
version('0.10', sha256='b8b56d540ea95c3eafe56440d6a998e0a140d53ca2584916b6ca82702795bbd9')
variant("doc", default=False, description="Build uftrace's documentation")
variant("python2", default=False, description="Build uftrace with python2 support")
variant("python3", default=True, description="Build uftrace with python3 support")
depends_on('pandoc', when="+doc", type='build')
depends_on('capstone')
depends_on('elfutils')
depends_on('lsof', type='test')
depends_on('pkg-config', type='build')
depends_on('libunwind')
depends_on('ncurses')
depends_on('python@2.7:', when='+python2')
depends_on('python@3.5:', when='+python3')
depends_on('lua-luajit')
def check(self):
make('test', *['V=1', '-j{0}'.format(max(int(make_jobs), 20))])
# In certain cases, tests using TCP/IP can hang. Ensure that spack can continue:
os.system("kill -9 `lsof -t ./uftrace` 2>/dev/null")
def install(self, spec, prefix):
make('install', *['V=1'])
def installcheck(self):
pass
def test(self):
"""Perform stand-alone/smoke tests using the installed package."""
uftrace = self.prefix.bin.uftrace
self.run_test(uftrace,
['-A', '.', '-R', '.', '-P', 'main', uftrace, '-V'],
[r'dwarf',
r'luajit',
r'tui',
r'sched',
r'dynamic',
r'main\(2, ',
r' getopt_long\(2, ',
r' .*printf.*\(',
r'} = 0; /\* main \*/'], installed=True,
purpose='test: testing the installation')
@classmethod
def determine_version(cls, exe):
output = Executable(exe)('--version', output=str, error=str)
match = re.search(r'uftrace v(\S+)', output)
return match.group(1) if match else 'None'