Merge pull request #1379 from LLNL/features/graphlib3

added stat 3.0 beta and added pygtk and dependent packages
This commit is contained in:
Gregory Lee 2016-08-25 09:14:36 -07:00 committed by GitHub
commit 77c24d4127
15 changed files with 374 additions and 10 deletions

View File

@ -42,7 +42,7 @@ class Atk(Package):
def url_for_version(self, version):
"""Handle atk's version-based custom URLs."""
url = 'http://ftp.gnome.org/pub/gnome/sources/atk'
return 'url+/%s/atk-%s.tar.xz' % (version.up_to(2), version)
return url + '/%s/atk-%s.tar.xz' % (version.up_to(2), version)
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)

View File

@ -37,6 +37,7 @@ class Cairo(Package):
depends_on("glib")
depends_on("pixman")
depends_on("freetype")
depends_on("pkg-config", type="build")
depends_on("fontconfig@2.10.91:") # Require newer version of fontconfig.
def install(self, spec, prefix):

View File

@ -28,10 +28,13 @@
class Dyninst(Package):
"""API for dynamic binary instrumentation. Modify programs while they
are executing without recompiling, re-linking, or re-executing."""
homepage = "https://paradyn.org"
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
url = "https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
version('9.2.0', 'ad023f85e8e57837ed9de073b59d6bab',
url="https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz")
version('9.1.0', '5c64b77521457199db44bec82e4988ac',
url="http://www.paradyn.org/release9.1.0/DyninstAPI-9.1.0.tgz")
version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7',
@ -41,13 +44,25 @@ class Dyninst(Package):
version('8.1.1', 'd1a04e995b7aa70960cd1d1fac8bd6ac',
url="http://www.paradyn.org/release8.1/DyninstAPI-8.1.1.tgz")
variant('stat_dysect', default=False,
description="patch for STAT's DySectAPI")
depends_on("libelf")
depends_on("libdwarf")
depends_on("boost@1.42:")
depends_on('cmake', type='build')
patch('stat_dysect.patch', when='+stat_dysect')
patch('stackanalysis_h.patch', when='@9.2.0')
# new version uses cmake
def install(self, spec, prefix):
if spec.satisfies('@:8.1'):
configure("--prefix=" + prefix)
make()
make("install")
return
libelf = spec['libelf'].prefix
libdwarf = spec['libdwarf'].prefix

View File

@ -0,0 +1,11 @@
--- a/dataflowAPI/h/stackanalysis.h 2016-06-29 14:54:14.000000000 -0700
+++ b/dataflowAPI/h/stackanalysis.h 2016-08-02 09:50:13.619079000 -0700
@@ -331,7 +331,7 @@
// To build intervals, we must replay the effect of each instruction.
// To avoid sucking enormous time, we keep those transfer functions around...
- typedef std::map<ParseAPI::Block *, std::map<Offset, TransferFuncs>>
+ typedef std::map<ParseAPI::Block *, std::map<Offset, TransferFuncs> >
InstructionEffects;
DATAFLOW_EXPORT StackAnalysis();

View File

@ -0,0 +1,96 @@
From 3aebb41ce0ea5b578a1ebf6810446c660066c525 Mon Sep 17 00:00:00 2001
From: Jesper Puge Nielsen <nielsen34@llnl.gov>
Date: Wed, 12 Aug 2015 21:07:52 -0700
Subject: [PATCH] =?UTF-8?q?Exposed=20stackwalker=20and=20proc=20callback=20status=20to=20DySect
=20=C3c?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dyninstAPI/h/BPatch_process.h | 13 +++++++++++++
dyninstAPI/src/BPatch_process.C | 18 ++++++++++++++++++
dyninstAPI/src/dynProcess.h | 3 ++-
3 files changed, 33 insertions(+), 1 deletions(-)
diff --git a/dyninstAPI/h/BPatch_process.h b/dyninstAPI/h/BPatch_process.h
index 5e01bbb..1316bb2 100644
--- a/dyninstAPI/h/BPatch_process.h
+++ b/dyninstAPI/h/BPatch_process.h
@@ -225,6 +225,10 @@ class BPATCH_DLL_EXPORT BPatch_process : public BPatch_addressSpace {
//
// this function should go away as soon as Paradyn links against Dyninst
PCProcess *lowlevel_process() const { return llproc; }
+
+ // Expose walker from Dyninst proces
+ void *get_walker() const;
+
// These internal funcs trigger callbacks registered to matching events
bool triggerStopThread(instPoint *intPoint, func_instance *intFunc,
int cb_ID, void *retVal);
@@ -281,6 +285,15 @@ class BPATCH_DLL_EXPORT BPatch_process : public BPatch_addressSpace {
bool continueExecution();
+ // BPatch_process::keepStopped
+ //
+ // Changes the desired process stat to prevent
+ // Dyninst from resuming the process after
+ // handling the current event.
+ // Must be called from an event handler.
+
+ void keepStopped();
+
// BPatch_process::terminateExecution
//
// Terminate mutatee process
diff --git a/dyninstAPI/src/BPatch_process.C b/dyninstAPI/src/BPatch_process.C
index 115f215..809e797 100644
--- a/dyninstAPI/src/BPatch_process.C
+++ b/dyninstAPI/src/BPatch_process.C
@@ -507,6 +507,19 @@ bool BPatch_process::continueExecution()
}
/*
+ * BPatch_process::keepStopped
+ *
+ * Changes the desired process stat to prevent
+ * Dyninst from resuming the process after
+ * handling the current event.
+ * Must be called from an event handler.
+ */
+void BPatch_process::keepStopped()
+{
+ llproc->setDesiredProcessState(PCProcess::ps_stopped);
+}
+
+/*
* BPatch_process::terminateExecution
*
* Kill the thread.
@@ -1754,3 +1767,8 @@ bool BPatch_process::protectAnalyzedCode()
}
return ret;
}
+
+void *BPatch_process::get_walker() const
+{
+ return llproc->get_walker();
+}
diff --git a/dyninstAPI/src/dynProcess.h b/dyninstAPI/src/dynProcess.h
index 54b0c6e..00721d1 100644
--- a/dyninstAPI/src/dynProcess.h
+++ b/dyninstAPI/src/dynProcess.h
@@ -302,7 +302,8 @@ public:
// Stackwalking internals
bool walkStack(pdvector<Frame> &stackWalk, PCThread *thread);
bool getActiveFrame(Frame &frame, PCThread *thread);
-
+ Dyninst::Stackwalker::Walker *get_walker() { return stackwalker_; }
+
void addSignalHandler(Address, unsigned);
bool isInSignalHandler(Address addr);
--
1.7.1

View File

@ -30,17 +30,19 @@ class Glib(Package):
providing data structure handling for C, portability wrappers
and interfaces for such runtime functionality as an event loop,
threads, dynamic loading and an object system."""
homepage = "https://developer.gnome.org/glib/"
url = "http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.1.tar.xz"
version('2.49.4', 'e2c87c03017b0cd02c4c73274b92b148')
version('2.48.1', '67bd3b75c9f6d5587b457dc01cdcd5bb')
version('2.42.1', '89c4119e50e767d3532158605ee9121a')
depends_on('libffi')
depends_on('zlib')
depends_on('pkg-config', type='build')
depends_on('gettext')
depends_on('pcre+utf', when='@2.49:')
depends_on('pcre+utf', when='@2.48:')
# The following patch is needed for gcc-6.1
patch('g_date_strftime.patch', when='@2.42.1')

View File

@ -0,0 +1,49 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class GobjectIntrospection(Package):
"""The GObject Introspection is used to describe the program APIs and
collect them in a uniform, machine readable format.Cairo is a 2D graphics
library with support for multiple output"""
homepage = "https://wiki.gnome.org/Projects/GObjectIntrospection"
url = "http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.48/gobject-introspection-1.48.0.tar.xz"
version('1.48.0', '01301fa9019667d48e927353e08bc218')
# version 1.48.0 build fails with glib 2.49.4
depends_on("glib@2.48.1")
depends_on("python")
depends_on("cairo")
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
# we need to filter this file to avoid an overly long hashbang line
filter_file('@PYTHON@', 'python',
'tools/g-ir-tool-template.in')
make()
make("install")

View File

@ -27,10 +27,11 @@
class Graphlib(Package):
"""Library to create, manipulate, and export graphs Graphlib."""
homepage = "http://https://github.com/lee218llnl/graphlib"
url = "https://github.com/lee218llnl/graphlib/archive/v2.0.0.tar.gz"
homepage = "https://github.com/LLNL/graphlib"
url = "https://github.com/LLNL/graphlib/archive/v2.0.0.tar.gz"
version('2.0.0', '43c6df84f1d38ba5a5dce0ae19371a70')
version('3.0.0', '625d199f97ab1b84cbc8daabcaee5e2a')
depends_on('cmake', type='build')

View File

@ -36,6 +36,8 @@ class Launchmon(Package):
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
depends_on('libgcrypt')
depends_on('libgpg-error')
def install(self, spec, prefix):
configure(

View File

@ -34,6 +34,7 @@ class Pixman(Package):
version('0.32.6', '3a30859719a41bd0f5cccffbfefdd4c2')
depends_on("pkg-config", type="build")
depends_on("libpng")
def install(self, spec, prefix):

View File

@ -0,0 +1,44 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPy2cairo(Package):
"""bindings for the Cairo for Python 2,
to be used in Python."""
homepage = "https://pypi.python.org/pypi/pycairo"
url = "https://cairographics.org/releases/py2cairo-1.10.0.tar.bz2"
version('1.10.0', '20337132c4ab06c1146ad384d55372c5')
extends('python')
depends_on("cairo")
depends_on("pixman")
def install(self, spec, prefix):
python('waf', 'configure', '--prefix=%s' % prefix)
python('waf', 'build')
python('waf', 'install')

View File

@ -0,0 +1,48 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPygobject(Package):
"""bindings for the GLib, and GObject,
to be used in Python."""
homepage = "https://pypi.python.org/pypi/pygobject"
url = "https://pypi.python.org/packages/6d/15/97c8b5ccca2be14cf59a2f79e15e3a82a1c3408a6b76b4107689a8b94846/pygobject-2.28.3.tar.bz2"
version('2.28.3', 'aa64900b274c4661a5c32e52922977f9')
extends('python')
depends_on("libffi")
depends_on('glib')
depends_on('py-py2cairo')
depends_on('gobject-introspection')
patch('pygobject-2.28.6-introspection-1.patch')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install", parallel=False)

View File

@ -0,0 +1,35 @@
Submitted By: Andrew Benton <andy@benton.eu.com>
Date: 2012-03-29
Initial Package Version: 2.28.6
Upstream Status: not submitted
Origin: me
Description: Fixes compiling with a recent version of gobject-introspection
--- pygobject-2.28.6/gi/pygi-info.c-orig 2012-03-29 02:27:37.494228732 +0100
+++ pygobject-2.28.6/gi/pygi-info.c 2012-03-29 02:26:37.735132310 +0100
@@ -162,9 +162,6 @@
case GI_INFO_TYPE_CONSTANT:
type = &PyGIConstantInfo_Type;
break;
- case GI_INFO_TYPE_ERROR_DOMAIN:
- type = &PyGIErrorDomainInfo_Type;
- break;
case GI_INFO_TYPE_UNION:
type = &PyGIUnionInfo_Type;
break;
@@ -481,7 +478,6 @@
case GI_INFO_TYPE_INVALID:
case GI_INFO_TYPE_FUNCTION:
case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
case GI_INFO_TYPE_VALUE:
case GI_INFO_TYPE_SIGNAL:
case GI_INFO_TYPE_PROPERTY:
@@ -860,7 +856,6 @@
case GI_INFO_TYPE_INVALID:
case GI_INFO_TYPE_FUNCTION:
case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
case GI_INFO_TYPE_VALUE:
case GI_INFO_TYPE_SIGNAL:
case GI_INFO_TYPE_PROPERTY:

View File

@ -0,0 +1,46 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPygtk(Package):
"""bindings for the Gtk in Python"""
homepage = "http://www.pygtk.org/"
url = "http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/pygtk-2.24.0.tar.gz"
version('2.24.0', 'd27c7f245a9e027f6b6cd9acb7468e36')
extends('python')
depends_on("libffi")
depends_on('cairo')
depends_on('glib')
depends_on('gtkplus')
depends_on('py-pygobject')
depends_on('py-py2cairo')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install", parallel=False)

View File

@ -27,22 +27,36 @@
class Stat(Package):
"""Library to create, manipulate, and export graphs Graphlib."""
homepage = "http://paradyn.org/STAT/STAT.html"
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
version('2.2.0', '26bd69dd57a15afdd5d0ebdb0b7fb6fc')
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
version('3.0.0b', '8851912ba40e31cf7be6dde3be8e702c',
url='https://github.com/LLNL/STAT/files/427762/STAT-3.0.0b.tar.gz')
# TODO: dysect requires Dyninst patch for version 3.0.0b
variant('dysect', default=False, description="enable DySectAPI")
variant('examples', default=False, description="enable examples")
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
depends_on('libelf')
depends_on('libdwarf')
depends_on('dyninst')
depends_on('graphlib')
depends_on('dyninst', when='~dysect')
depends_on('dyninst@8.2.1+stat_dysect', when='+dysect')
depends_on('graphlib@2.0.0', when='@2.0.0:2.2.0')
depends_on('graphlib@3.0.0', when='@3:')
depends_on('graphviz', type=alldeps)
depends_on('launchmon')
depends_on('mrnet')
depends_on('python')
depends_on('py-pygtk')
depends_on('swig')
depends_on('mpi', when='+examples')
patch('configure_mpicxx.patch', when='@2.1.0')
@ -50,8 +64,6 @@ def install(self, spec, prefix):
configure_args = [
"--enable-gui",
"--prefix=%s" % prefix,
# Examples require MPI: avoid this dependency.
"--disable-examples",
"--with-launchmon=%s" % spec['launchmon'].prefix,
"--with-mrnet=%s" % spec['mrnet'].prefix,
"--with-graphlib=%s" % spec['graphlib'].prefix,
@ -60,7 +72,8 @@ def install(self, spec, prefix):
]
if '+dysect' in spec:
configure_args.append('--enable-dysectapi')
if '~examples' in spec:
configure_args.append('--disable-examples')
configure(*configure_args)
make(parallel=False)
make("install")