summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2013-04-24 01:35:21 +0000
committerMike Frysinger <vapier@gentoo.org>2013-04-24 01:35:21 +0000
commita238d6188f5b3fdc3cc921578e2714dc5369da01 (patch)
tree38e8f056fc59e2db21407500537728e82723a2d2 /dev-python/pyelftools
parentUse CPPFLAGS when compiling and CFLAGS when linking. Avoid building static o... (diff)
downloadgentoo-2-a238d6188f5b3fdc3cc921578e2714dc5369da01.tar.gz
gentoo-2-a238d6188f5b3fdc3cc921578e2714dc5369da01.tar.bz2
gentoo-2-a238d6188f5b3fdc3cc921578e2714dc5369da01.zip
will the real maintainer please stand up
(Portage version: 2.2.0_alpha170/cvs/Linux x86_64, signed Manifest commit with key FB7C4156)
Diffstat (limited to 'dev-python/pyelftools')
-rw-r--r--dev-python/pyelftools/ChangeLog11
-rw-r--r--dev-python/pyelftools/files/pyelftools-0.20-dyntags-1.patch266
-rw-r--r--dev-python/pyelftools/files/pyelftools-0.20-dyntags-2.patch94
-rw-r--r--dev-python/pyelftools/files/pyelftools-0.21-dyntable.patch143
-rw-r--r--dev-python/pyelftools/pyelftools-0.20-r2.ebuild30
-rw-r--r--dev-python/pyelftools/pyelftools-0.20.ebuild26
-rw-r--r--dev-python/pyelftools/pyelftools-0.21-r1.ebuild25
-rw-r--r--dev-python/pyelftools/pyelftools-0.21-r2.ebuild (renamed from dev-python/pyelftools/pyelftools-0.20-r1.ebuild)15
8 files changed, 162 insertions, 448 deletions
diff --git a/dev-python/pyelftools/ChangeLog b/dev-python/pyelftools/ChangeLog
index aa3f949a9af8..787a6fe81798 100644
--- a/dev-python/pyelftools/ChangeLog
+++ b/dev-python/pyelftools/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for dev-python/pyelftools
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/ChangeLog,v 1.7 2013/04/23 16:38:35 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/ChangeLog,v 1.8 2013/04/24 01:35:21 vapier Exp $
+
+*pyelftools-0.21-r2 (24 Apr 2013)
+
+ 24 Apr 2013; Mike Frysinger <vapier@gentoo.org> -pyelftools-0.20.ebuild,
+ -pyelftools-0.20-r1.ebuild, -pyelftools-0.20-r2.ebuild,
+ -files/pyelftools-0.20-dyntags-1.patch,
+ -files/pyelftools-0.20-dyntags-2.patch, -pyelftools-0.21-r1.ebuild,
+ +pyelftools-0.21-r2.ebuild, +files/pyelftools-0.21-dyntable.patch:
+ Stick to EAPI=4. Add support for parsing dynamic tags w/out a section table.
*pyelftools-0.21-r1 (20 Apr 2013)
diff --git a/dev-python/pyelftools/files/pyelftools-0.20-dyntags-1.patch b/dev-python/pyelftools/files/pyelftools-0.20-dyntags-1.patch
deleted file mode 100644
index 482fbe90f991..000000000000
--- a/dev-python/pyelftools/files/pyelftools-0.20-dyntags-1.patch
+++ /dev/null
@@ -1,266 +0,0 @@
-# HG changeset patch
-# User Mike Frysinger <vapier@gentoo.org>
-# Date 1352755639 18000
-# Node ID a9c9b2f9ec964e6750dd6f9a96767fe2e9201d85
-# Parent f3408c7b954910aa3a58e88196efba4954c0cc55
-add support for parsing of the dynamic section/segment and its tags
-
-diff -r f3408c7b9549 -r a9c9b2f9ec96 elftools/elf/dynamic.py
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/elftools/elf/dynamic.py Mon Nov 12 16:27:19 2012 -0500
-@@ -0,0 +1,115 @@
-+#-------------------------------------------------------------------------------
-+# elftools: elf/dynamic.py
-+#
-+# ELF Dynamic Tags
-+#
-+# Mike Frysinger (vapier@gentoo.org)
-+# This code is in the public domain
-+#-------------------------------------------------------------------------------
-+from .sections import Section
-+from .segments import Segment
-+from ..common.utils import struct_parse
-+
-+from .enums import ENUM_D_TAG
-+
-+
-+class DynamicTag(object):
-+ """ Dynamic Tag object - representing a single dynamic tag entry from a
-+ dynamic section.
-+
-+ Similarly to Section objects, allows dictionary-like access to the
-+ dynamic tag.
-+ """
-+ def __init__(self, entry, elffile):
-+ self.entry = entry
-+ if entry.d_tag == 'DT_NEEDED' or \
-+ entry.d_tag == 'DT_RPATH' or \
-+ entry.d_tag == 'DT_RUNPATH':
-+ dynstr = elffile.get_section_by_name('.dynstr')
-+ setattr(self, entry.d_tag[3:].lower(), dynstr.get_string(self.entry.d_val))
-+
-+ def __getitem__(self, name):
-+ """ Implement dict-like access to entries
-+ """
-+ return self.entry[name]
-+
-+ def __repr__(self):
-+ return '<DynamicTag (%s): %r>' % (self.entry.d_tag, self.entry)
-+
-+ def __str__(self):
-+ if self.entry.d_tag == 'DT_NEEDED' or \
-+ self.entry.d_tag == 'DT_RPATH' or \
-+ self.entry.d_tag == 'DT_RUNPATH':
-+ s = '"%s"' % getattr(self, self.entry.d_tag[3:].lower())
-+ else:
-+ s = '%#x' % self.entry.d_ptr
-+ return '<DynamicTag (%s) %s>' % (self.entry.d_tag, s)
-+
-+
-+class Dynamic(object):
-+ def __init__(self, stream, elffile, position):
-+ self._stream = stream
-+ self._elffile = elffile
-+ self._elfstructs = elffile.structs
-+ self._num_tags = -1;
-+ self._offset = position
-+ self._tagsize = self._elfstructs.Elf_Dyn.sizeof()
-+
-+ def iter_tags(self, type=None):
-+ """ Yield all tags (limit to |type| if specified)
-+ """
-+ offset = self._offset - self._tagsize
-+ for i in range(self.num_tags):
-+ offset += self._tagsize
-+ entry = struct_parse(
-+ self._elfstructs.Elf_Dyn,
-+ self._stream,
-+ stream_pos=offset)
-+ if type is not None and entry.d_tag != type:
-+ continue
-+ yield DynamicTag(entry, self._elffile)
-+
-+ def get_tag(self, n):
-+ """ Get the tag at index #n from the file (DynamicTag object)
-+ """
-+ offset = self._offset + n * self._tagsize
-+ entry = struct_parse(
-+ self._elfstructs.Elf_Dyn,
-+ self._stream,
-+ stream_pos=offset)
-+ return DynamicTag(entry, self._elffile)
-+
-+ @property
-+ def num_tags(self):
-+ """ Number of dynamic tags in the file
-+ """
-+ if self._num_tags != -1:
-+ return self._num_tags
-+
-+ offset = self._offset
-+ while True:
-+ entry = struct_parse(
-+ self._elfstructs.Elf_Dyn,
-+ self._stream,
-+ stream_pos=offset)
-+ if entry.d_tag == 'DT_NULL':
-+ self._num_tags = ((offset - self._offset) // self._tagsize) + 1
-+ break
-+ offset += self._tagsize
-+ return self._num_tags
-+
-+
-+class DynamicSection(Section, Dynamic):
-+ """ ELF dynamic table section. Knows how to process the list of tags.
-+ """
-+ def __init__(self, header, name, stream, elffile):
-+ Section.__init__(self, header, name, stream)
-+ Dynamic.__init__(self, stream, elffile, self['sh_offset'])
-+
-+
-+class DynamicSegment(Segment, Dynamic):
-+ """ ELF dynamic table segment. Knows how to process the list of tags.
-+ """
-+ def __init__(self, header, stream, elffile):
-+ Segment.__init__(self, header, stream)
-+ Dynamic.__init__(self, stream, elffile, self['p_offset'])
-diff -r f3408c7b9549 -r a9c9b2f9ec96 elftools/elf/elffile.py
---- a/elftools/elf/elffile.py Thu Jul 05 06:32:09 2012 +0300
-+++ b/elftools/elf/elffile.py Mon Nov 12 16:27:19 2012 -0500
-@@ -13,6 +13,7 @@
- from .structs import ELFStructs
- from .sections import (
- Section, StringTableSection, SymbolTableSection, NullSection)
-+from .dynamic import DynamicSection, DynamicSegment
- from .relocation import RelocationSection, RelocationHandler
- from .segments import Segment, InterpSegment
- from .enums import ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64
-@@ -208,6 +209,8 @@
- segtype = segment_header['p_type']
- if segtype == 'PT_INTERP':
- return InterpSegment(segment_header, self.stream)
-+ elif segtype == 'PT_DYNAMIC':
-+ return DynamicSegment(segment_header, self.stream, self)
- else:
- return Segment(segment_header, self.stream)
-
-@@ -241,6 +244,8 @@
- elif sectype in ('SHT_REL', 'SHT_RELA'):
- return RelocationSection(
- section_header, name, self.stream, self)
-+ elif sectype == 'SHT_DYNAMIC':
-+ return DynamicSection(section_header, name, self.stream, self)
- else:
- return Section(section_header, name, self.stream)
-
-diff -r f3408c7b9549 -r a9c9b2f9ec96 elftools/elf/enums.py
---- a/elftools/elf/enums.py Thu Jul 05 06:32:09 2012 +0300
-+++ b/elftools/elf/enums.py Mon Nov 12 16:27:19 2012 -0500
-@@ -186,6 +186,82 @@
- _default_=Pass,
- )
-
-+# d_tag
-+ENUM_D_TAG = dict(
-+ DT_NULL=0,
-+ DT_NEEDED=1,
-+ DT_PLTRELSZ=2,
-+ DT_PLTGOT=3,
-+ DT_HASH=4,
-+ DT_STRTAB=5,
-+ DT_SYMTAB=6,
-+ DT_RELA=7,
-+ DT_RELASZ=8,
-+ DT_RELAENT=9,
-+ DT_STRSZ=10,
-+ DT_SYMENT=11,
-+ DT_INIT=12,
-+ DT_FINI=13,
-+ DT_SONAME=14,
-+ DT_RPATH=15,
-+ DT_SYMBOLIC=16,
-+ DT_REL=17,
-+ DT_RELSZ=18,
-+ DT_RELENT=19,
-+ DT_PLTREL=20,
-+ DT_DEBUG=21,
-+ DT_TEXTREL=22,
-+ DT_JMPREL=23,
-+ DT_BIND_NOW=24,
-+ DT_INIT_ARRAY=25,
-+ DT_FINI_ARRAY=26,
-+ DT_INIT_ARRAYSZ=27,
-+ DT_FINI_ARRAYSZ=28,
-+ DT_RUNPATH=29,
-+ DT_FLAGS=30,
-+ DT_ENCODING=32,
-+ DT_PREINIT_ARRAY=32,
-+ DT_PREINIT_ARRAYSZ=33,
-+ DT_NUM=34,
-+ DT_LOOS=0x6000000d,
-+ DT_HIOS=0x6ffff000,
-+ DT_LOPROC=0x70000000,
-+ DT_HIPROC=0x7fffffff,
-+ DT_PROCNUM=0x35,
-+ DT_VALRNGLO=0x6ffffd00,
-+ DT_GNU_PRELINKED=0x6ffffdf5,
-+ DT_GNU_CONFLICTSZ=0x6ffffdf6,
-+ DT_GNU_LIBLISTSZ=0x6ffffdf7,
-+ DT_CHECKSUM=0x6ffffdf8,
-+ DT_PLTPADSZ=0x6ffffdf9,
-+ DT_MOVEENT=0x6ffffdfa,
-+ DT_MOVESZ=0x6ffffdfb,
-+ DT_SYMINSZ=0x6ffffdfe,
-+ DT_SYMINENT=0x6ffffdff,
-+ DT_GNU_HASH=0x6ffffef5,
-+ DT_TLSDESC_PLT=0x6ffffef6,
-+ DT_TLSDESC_GOT=0x6ffffef7,
-+ DT_GNU_CONFLICT=0x6ffffef8,
-+ DT_GNU_LIBLIST=0x6ffffef9,
-+ DT_CONFIG=0x6ffffefa,
-+ DT_DEPAUDIT=0x6ffffefb,
-+ DT_AUDIT=0x6ffffefc,
-+ DT_PLTPAD=0x6ffffefd,
-+ DT_MOVETAB=0x6ffffefe,
-+ DT_SYMINFO=0x6ffffeff,
-+ DT_VERSYM=0x6ffffff0,
-+ DT_RELACOUNT=0x6ffffff9,
-+ DT_RELCOUNT=0x6ffffffa,
-+ DT_FLAGS_1=0x6ffffffb,
-+ DT_VERDEF=0x6ffffffc,
-+ DT_VERDEFNUM=0x6ffffffd,
-+ DT_VERNEED=0x6ffffffe,
-+ DT_VERNEEDNUM=0x6fffffff,
-+ DT_AUXILIARY=0x7ffffffd,
-+ DT_FILTER=0x7fffffff,
-+ _default_=Pass,
-+)
-+
- ENUM_RELOC_TYPE_i386 = dict(
- R_386_NONE=0,
- R_386_32=1,
-diff -r f3408c7b9549 -r a9c9b2f9ec96 elftools/elf/structs.py
---- a/elftools/elf/structs.py Thu Jul 05 06:32:09 2012 +0300
-+++ b/elftools/elf/structs.py Mon Nov 12 16:27:19 2012 -0500
-@@ -72,6 +72,7 @@
- self._create_shdr()
- self._create_sym()
- self._create_rel()
-+ self._create_dyn()
-
- def _create_ehdr(self):
- self.Elf_Ehdr = Struct('Elf_Ehdr',
-@@ -165,6 +166,13 @@
- self.Elf_sxword('r_addend'),
- )
-
-+ def _create_dyn(self):
-+ self.Elf_Dyn = Struct('Elf_Dyn',
-+ Enum(self.Elf_sxword('d_tag'), **ENUM_D_TAG),
-+ self.Elf_xword('d_val'),
-+ Value('d_ptr', lambda ctx: ctx['d_val']),
-+ )
-+
- def _create_sym(self):
- # st_info is hierarchical. To access the type, use
- # container['st_info']['type']
diff --git a/dev-python/pyelftools/files/pyelftools-0.20-dyntags-2.patch b/dev-python/pyelftools/files/pyelftools-0.20-dyntags-2.patch
deleted file mode 100644
index 02528a907df0..000000000000
--- a/dev-python/pyelftools/files/pyelftools-0.20-dyntags-2.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-# HG changeset patch
-# User Mike Frysinger <vapier@gentoo.org>
-# Date 1354166686 18000
-# Node ID 94901c23fe58ca227aacadcdc5d7ad3045171b24
-# Parent a9c9b2f9ec964e6750dd6f9a96767fe2e9201d85
-rework dynamic tag walking to avoid doing it twice on the first call to iter_tags
-
-Based on suggestions from David James
-
-diff -r a9c9b2f9ec96 -r 94901c23fe58 elftools/elf/dynamic.py
---- a/elftools/elf/dynamic.py Mon Nov 12 16:27:19 2012 -0500
-+++ b/elftools/elf/dynamic.py Thu Nov 29 00:24:46 2012 -0500
-@@ -6,6 +6,8 @@
- # Mike Frysinger (vapier@gentoo.org)
- # This code is in the public domain
- #-------------------------------------------------------------------------------
-+import itertools
-+
- from .sections import Section
- from .segments import Segment
- from ..common.utils import struct_parse
-@@ -20,11 +22,12 @@
- Similarly to Section objects, allows dictionary-like access to the
- dynamic tag.
- """
-+
-+ _HANDLED_TAGS = frozenset(['DT_NEEDED', 'DT_RPATH', 'DT_RUNPATH'])
-+
- def __init__(self, entry, elffile):
- self.entry = entry
-- if entry.d_tag == 'DT_NEEDED' or \
-- entry.d_tag == 'DT_RPATH' or \
-- entry.d_tag == 'DT_RUNPATH':
-+ if entry.d_tag in self._HANDLED_TAGS:
- dynstr = elffile.get_section_by_name('.dynstr')
- setattr(self, entry.d_tag[3:].lower(), dynstr.get_string(self.entry.d_val))
-
-@@ -37,9 +40,7 @@
- return '<DynamicTag (%s): %r>' % (self.entry.d_tag, self.entry)
-
- def __str__(self):
-- if self.entry.d_tag == 'DT_NEEDED' or \
-- self.entry.d_tag == 'DT_RPATH' or \
-- self.entry.d_tag == 'DT_RUNPATH':
-+ if self.entry.d_tag in self._HANDLED_TAGS:
- s = '"%s"' % getattr(self, self.entry.d_tag[3:].lower())
- else:
- s = '%#x' % self.entry.d_ptr
-@@ -58,16 +59,12 @@
- def iter_tags(self, type=None):
- """ Yield all tags (limit to |type| if specified)
- """
-- offset = self._offset - self._tagsize
-- for i in range(self.num_tags):
-- offset += self._tagsize
-- entry = struct_parse(
-- self._elfstructs.Elf_Dyn,
-- self._stream,
-- stream_pos=offset)
-- if type is not None and entry.d_tag != type:
-- continue
-- yield DynamicTag(entry, self._elffile)
-+ for n in itertools.count():
-+ tag = self.get_tag(n)
-+ if type is None or tag.entry.d_tag == type:
-+ yield tag
-+ if tag.entry.d_tag == 'DT_NULL':
-+ break
-
- def get_tag(self, n):
- """ Get the tag at index #n from the file (DynamicTag object)
-@@ -86,17 +83,11 @@
- if self._num_tags != -1:
- return self._num_tags
-
-- offset = self._offset
-- while True:
-- entry = struct_parse(
-- self._elfstructs.Elf_Dyn,
-- self._stream,
-- stream_pos=offset)
-- if entry.d_tag == 'DT_NULL':
-- self._num_tags = ((offset - self._offset) // self._tagsize) + 1
-- break
-- offset += self._tagsize
-- return self._num_tags
-+ for n in itertools.count():
-+ tag = self.get_tag(n)
-+ if tag.entry.d_tag == 'DT_NULL':
-+ self._num_tags = n
-+ return n
-
-
- class DynamicSection(Section, Dynamic):
diff --git a/dev-python/pyelftools/files/pyelftools-0.21-dyntable.patch b/dev-python/pyelftools/files/pyelftools-0.21-dyntable.patch
new file mode 100644
index 000000000000..e43e6cb0a4db
--- /dev/null
+++ b/dev-python/pyelftools/files/pyelftools-0.21-dyntable.patch
@@ -0,0 +1,143 @@
+changeset: 207:92736c403d53
+tag: tip
+user: Mike Frysinger <vapier@gentoo.org>
+date: Mon Apr 22 19:02:21 2013 -0400
+summary: support parsing of dynamic ELFs w/out section headers
+
+At runtime, ELFs do not use the section headers at all. Instead, only
+the program segments and dynamic tags get used. This means you can
+strip the section table completely from an ELF and have it still work.
+
+In practice, people rarely do this, but it's not unheard of. Make the
+Dynamic tags work even in these cases by loading the strings table the
+same way the runtime loader does:
+- parse the symtab address from DT_STRTAB
+- locate the file offset via the program segments
+
+In order to avoid circular deps (parsing a dyntag requires walking parsed
+dyntags), add a set of internal funcs for returning the raw values.
+
+diff --git a/elftools/elf/dynamic.py b/elftools/elf/dynamic.py
+--- a/elftools/elf/dynamic.py
++++ b/elftools/elf/dynamic.py
+@@ -10,11 +10,26 @@
+
+ from .sections import Section
+ from .segments import Segment
+-from ..common.utils import struct_parse
++from ..common.utils import struct_parse, parse_cstring_from_stream
+
+ from .enums import ENUM_D_TAG
+
+
++class _DynamicStringTable(object):
++ """ Bare string table based on values found via ELF dynamic tags and
++ loadable segments only. Good enough for get_string() only.
++ """
++ def __init__(self, stream, table_offset):
++ self._stream = stream
++ self._table_offset = table_offset
++
++ def get_string(self, offset):
++ """ Get the string stored at the given offset in this string table.
++ """
++ return parse_cstring_from_stream(self._stream,
++ self._table_offset + offset)
++
++
+ class DynamicTag(object):
+ """ Dynamic Tag object - representing a single dynamic tag entry from a
+ dynamic section.
+@@ -27,10 +42,9 @@
+ _HANDLED_TAGS = frozenset(
+ ['DT_NEEDED', 'DT_RPATH', 'DT_RUNPATH', 'DT_SONAME'])
+
+- def __init__(self, entry, elffile):
++ def __init__(self, entry, dynstr):
+ self.entry = entry
+- if entry.d_tag in self._HANDLED_TAGS:
+- dynstr = elffile.get_section_by_name(b'.dynstr')
++ if entry.d_tag in self._HANDLED_TAGS and dynstr:
+ setattr(self, entry.d_tag[3:].lower(),
+ dynstr.get_string(self.entry.d_val))
+
+@@ -60,26 +74,66 @@
+ self._num_tags = -1
+ self._offset = position
+ self._tagsize = self._elfstructs.Elf_Dyn.sizeof()
++ self.__string_table = None
++
++ @property
++ def _string_table(self):
++ if self.__string_table:
++ return self.__string_table
++
++ # If the ELF has stripped its section table (which is unusual, but
++ # perfectly valid), we need to use the dynamic tags to locate the
++ # dynamic string table.
++ strtab = None
++ for tag in self._iter_tags(type='DT_STRTAB'):
++ strtab = tag['d_val']
++ break
++ # If we found a dynamic string table, locate the offset in the file
++ # by using the program headers.
++ if strtab:
++ for segment in self._elffile.iter_segments():
++ if (strtab >= segment['p_vaddr'] and
++ strtab < segment['p_vaddr'] + segment['p_filesz']):
++ self.__string_table = _DynamicStringTable(
++ self._stream,
++ segment['p_offset'] + (strtab - segment['p_vaddr']))
++ return self.__string_table
++
++ # That didn't work for some reason. Let's use the section header
++ # even though this ELF is super weird.
++ self.__string_table = self._elffile.get_section_by_name(b'.dynstr')
++
++ return self.__string_table
++
++ def _iter_tags(self, type=None):
++ """ Yield all raw tags (limit to |type| if specified)
++ """
++ for n in itertools.count():
++ tag = self._get_tag(n)
++ if type is None or tag['d_tag'] == type:
++ yield tag
++ if tag['d_tag'] == 'DT_NULL':
++ break
+
+ def iter_tags(self, type=None):
+ """ Yield all tags (limit to |type| if specified)
+ """
+- for n in itertools.count():
+- tag = self.get_tag(n)
+- if type is None or tag.entry.d_tag == type:
+- yield tag
+- if tag.entry.d_tag == 'DT_NULL':
+- break
++ for tag in self._iter_tags(type=type):
++ yield DynamicTag(tag, self._string_table)
++
++ def _get_tag(self, n):
++ """ Get the raw tag at index #n from the file
++ """
++ offset = self._offset + n * self._tagsize
++ return struct_parse(
++ self._elfstructs.Elf_Dyn,
++ self._stream,
++ stream_pos=offset)
+
+ def get_tag(self, n):
+ """ Get the tag at index #n from the file (DynamicTag object)
+ """
+- offset = self._offset + n * self._tagsize
+- entry = struct_parse(
+- self._elfstructs.Elf_Dyn,
+- self._stream,
+- stream_pos=offset)
+- return DynamicTag(entry, self._elffile)
++ return DynamicTag(self._get_tag(n), self._string_table)
+
+ def num_tags(self):
+ """ Number of dynamic tags in the file
+
diff --git a/dev-python/pyelftools/pyelftools-0.20-r2.ebuild b/dev-python/pyelftools/pyelftools-0.20-r2.ebuild
deleted file mode 100644
index f6a37408f1fc..000000000000
--- a/dev-python/pyelftools/pyelftools-0.20-r2.ebuild
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/pyelftools-0.20-r2.ebuild,v 1.1 2013/01/21 02:39:53 idella4 Exp $
-
-EAPI=5
-
-PYTHON_COMPAT=( python{2_7,3_2} )
-inherit distutils-r1 eutils
-
-DESCRIPTION="pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
-HOMEPAGE="http://pypi.python.org/pypi/pyelftools https://bitbucket.org/eliben/pyelftools"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="public-domain"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-src_prepare() {
- distutils-r1_src_prepare
- epatch "${FILESDIR}"/${P}-dyntags-{1,2}.patch
-}
-
-python_test() {
- # readelf_tests fails
- local test
- for test in all_unittests examples_test; do
- PYTHONPATH=$(ls -d build-${PYTHON_ABI}/lib/) "${PYTHON}" ./test/run_${test}.py || die
- done
-}
diff --git a/dev-python/pyelftools/pyelftools-0.20.ebuild b/dev-python/pyelftools/pyelftools-0.20.ebuild
deleted file mode 100644
index 1af85a08a4cc..000000000000
--- a/dev-python/pyelftools/pyelftools-0.20.ebuild
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 1999-2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/pyelftools-0.20.ebuild,v 1.1 2012/11/01 05:44:11 vapier Exp $
-
-EAPI="4"
-
-SUPPORT_PYTHON_ABIS="1"
-
-inherit distutils
-
-DESCRIPTION="pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
-HOMEPAGE="http://pypi.python.org/pypi/pyelftools https://bitbucket.org/eliben/pyelftools"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="public-domain"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE=""
-
-src_test() {
- local t
- # readelf_tests fails
- for t in all_unittests examples_test ; do
- ./test/run_${t}.py || die
- done
-}
diff --git a/dev-python/pyelftools/pyelftools-0.21-r1.ebuild b/dev-python/pyelftools/pyelftools-0.21-r1.ebuild
deleted file mode 100644
index f1168dbabbae..000000000000
--- a/dev-python/pyelftools/pyelftools-0.21-r1.ebuild
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/pyelftools-0.21-r1.ebuild,v 1.1 2013/04/20 17:15:54 mgorny Exp $
-
-EAPI=5
-
-PYTHON_COMPAT=( python{2_6,2_7,3_2,3_3} )
-inherit distutils-r1
-
-DESCRIPTION="Pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
-HOMEPAGE="http://pypi.python.org/pypi/pyelftools https://bitbucket.org/eliben/pyelftools"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="public-domain"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-python_test() {
- # readelf_tests often fails due to host `readelf` changing output format
- local t
- for t in all_unittests examples_test ; do
- "${PYTHON}" ./test/run_${t}.py || die "Tests fail with ${EPYTHON}"
- done
-}
diff --git a/dev-python/pyelftools/pyelftools-0.20-r1.ebuild b/dev-python/pyelftools/pyelftools-0.21-r2.ebuild
index 4bf1a5a2f725..44c5b1c6be74 100644
--- a/dev-python/pyelftools/pyelftools-0.20-r1.ebuild
+++ b/dev-python/pyelftools/pyelftools-0.21-r2.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/pyelftools-0.20-r1.ebuild,v 1.2 2013/01/21 02:39:53 idella4 Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-python/pyelftools/pyelftools-0.21-r2.ebuild,v 1.1 2013/04/24 01:35:21 vapier Exp $
EAPI="4"
@@ -17,14 +17,17 @@ KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~spar
IUSE=""
src_prepare() {
- epatch "${FILESDIR}"/${P}-dyntags-{1,2}.patch
- distutils_src_prepare
+ epatch "${FILESDIR}"/${P}-dyntable.patch
}
-src_test() {
+python_test() {
+ # readelf_tests often fails due to host `readelf` changing output format
local t
- # readelf_tests fails
for t in all_unittests examples_test ; do
- ./test/run_${t}.py || die
+ PYTHONPATH=$(_distutils_get_PYTHONPATH) "$(PYTHON)" ./test/run_${t}.py || die
done
}
+
+src_test() {
+ python_execute_function python_test
+}