* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-06-05 18:08 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-06-05 18:08 UTC (permalink / raw
To: gentoo-commits
commit: 86c8b9ce562b4cecab65c03d2cbd2cae983d1b57
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jun 5 17:56:47 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Jun 5 17:56:47 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=86c8b9ce
support '->' in SRC_URI
---
roverlay/ebuild/abstractcomponents.py | 34 ++++++++++++++++++----------------
roverlay/ebuild/creation.py | 7 ++++++-
roverlay/ebuild/evars.py | 33 ++++++++++++++++++++++++++++++---
3 files changed, 54 insertions(+), 20 deletions(-)
diff --git a/roverlay/ebuild/abstractcomponents.py b/roverlay/ebuild/abstractcomponents.py
index ec3db04..f8c9aed 100644
--- a/roverlay/ebuild/abstractcomponents.py
+++ b/roverlay/ebuild/abstractcomponents.py
@@ -144,7 +144,7 @@ class ListValue ( object ):
if self.empty_value is not None:
self.value.append ( self.empty_value )
- self.add_value ( value )
+ self.add ( value )
# --- end of set_value (...) ---
def add ( self, value ):
@@ -157,20 +157,22 @@ class ListValue ( object ):
self.value.append ( value )
# --- end of add (...) ---
- add_value = add
+ def add_value ( self, *args, **kwargs ):
+ raise NotImplementedError ( "add_value() is deprecated - use add()!" )
+ # --- end of add_value (...) ---
+
+ def join_value_str ( self, join_str, quoted=False ):
+ return join_str.join (
+ get_value_str (
+ v,
+ quote_char = "'" if quoted else None
+ ) for v in self.value
+ )
+ # --- end of join_value_str (...) ---
def to_str ( self ):
"""Returns a string representing this ListValue."""
- def get_value_strings ( join_str, quoted=False ):
- return join_str.join (
- get_value_str (
- v,
- quote_char = "'" if quoted else None
- ) for v in self.value
- )
- # --- end of get_value_strings (...) ---
-
value_count = len ( self.value )
if self.is_bash_array:
@@ -180,7 +182,7 @@ class ListValue ( object ):
elif self.single_line or value_count == 1:
# one value or several values in a single line
- ret = "( " + get_value_strings ( ' ', True ) + " )"
+ ret = "( " + self.join_value_str ( ' ', True ) + " )"
else:
ret = "{head}{values}{tail}".format (
@@ -188,20 +190,20 @@ class ListValue ( object ):
( '(\n' + self.val_indent )
if self.insert_leading_newline else '( '
),
- values = get_value_strings ( self.line_join_str, True ),
+ values = self.join_value_str ( self.line_join_str, True ),
tail = '\n' + self.var_indent + ')\n'
)
else:
if value_count == 0:
ret = ""
elif self.single_line or value_count == 1:
- ret = get_value_strings ( ' ' )
+ ret = self.join_value_str ( ' ' )
else:
if self.insert_leading_newline:
ret = '\n' + self.val_indent
- ret += get_value_strings ( self.line_join_str )
+ ret += self.join_value_str ( self.line_join_str )
else:
- ret = get_value_strings ( self.line_join_str )
+ ret = self.join_value_str ( self.line_join_str )
if self.append_indented_newline:
ret += '\n' + self.var_indent
diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
index 8ea1854..de5a358 100644
--- a/roverlay/ebuild/creation.py
+++ b/roverlay/ebuild/creation.py
@@ -153,7 +153,12 @@ class EbuildCreation ( object ):
ebuild.use ( self._get_ebuild_description() )
# SRC_URI
- ebuild.use ( evars.SRC_URI ( self.package_info ['SRC_URI'] ) )
+ ebuild.use ( evars.SRC_URI (
+ src_uri = self.package_info ['SRC_URI'],
+ src_uri_dest = self.package_info.get (
+ "src_uri_dest", do_fallback=True
+ )
+ ) )
ebuild_text = ebuild.to_str()
diff --git a/roverlay/ebuild/evars.py b/roverlay/ebuild/evars.py
index 7bc461b..23f7e27 100644
--- a/roverlay/ebuild/evars.py
+++ b/roverlay/ebuild/evars.py
@@ -19,7 +19,7 @@ __all__ = [ 'DEPEND', 'DESCRIPTION', 'IUSE', 'MISSINGDEPS',
import roverlay.strutil
-from roverlay.ebuild.abstractcomponents import ListValue, EbuildVar
+from roverlay.ebuild.abstractcomponents import ListValue, EbuildVar, get_value_str
IUSE_SUGGESTS = 'R_suggests'
RSUGGESTS_NAME = IUSE_SUGGESTS.upper()
@@ -68,11 +68,38 @@ class KEYWORDS ( EbuildVar ):
# --- end of __init__ (...) ---
+class SRC_URI_ListValue ( ListValue ):
+ """List value that represents SRC_URI entries."""
+
+ def _accept_value ( self, value ): raise NotImplementedError()
+
+ def add ( self, value ):
+ """Adds/Appends a value."""
+ if value [0]:
+ self.value.append ( value )
+ else:
+ raise ValueError ( value )
+ # --- end of add (...) ---
+
+ def join_value_str ( self, join_str, quoted=False ):
+ return join_str.join (
+ get_value_str (
+ (
+ "{} -> {}".format ( v[0], v[1] ) if v[1] else str ( v[0] )
+ ),
+ quote_char=( "'" if quoted else None )
+ ) for v in self.value
+ )
+ # --- end of join_value_str (...) ---
+
+
class SRC_URI ( EbuildVar ):
"""A SRC_URI="..." statement."""
- def __init__ ( self, src_uri ):
+ def __init__ ( self, src_uri, src_uri_dest ):
super ( SRC_URI, self ) . __init__ (
- name='SRC_URI', value=src_uri, priority=90
+ name = 'SRC_URI',
+ value = SRC_URI_ListValue ( value=( src_uri, src_uri_dest ) ),
+ priority = 90
)
def _empty_str ( self ):
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-06-19 18:58 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-06-19 18:58 UTC (permalink / raw
To: gentoo-commits
commit: d58688a7338049e1762b5fe9702cca820fd7fee2
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jun 19 18:47:40 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Jun 19 18:47:40 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=d58688a7
roverlay/ebuild: useflagmap
This should've been committed yesterday.
UseFlagRenameMap/UseFlagAliasMap allow to rename USE_EXPAND flags.
---
roverlay/ebuild/useflagmap.py | 152 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 152 insertions(+)
diff --git a/roverlay/ebuild/useflagmap.py b/roverlay/ebuild/useflagmap.py
new file mode 100644
index 0000000..8b5d7a6
--- /dev/null
+++ b/roverlay/ebuild/useflagmap.py
@@ -0,0 +1,152 @@
+# R overlay -- ebuild creation, USE_EXPAND alias map
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013 André Erdmann <dywi@mailerd.de>
+# Distributed under the terms of the GNU General Public License;
+# either version 2 of the License, or (at your option) any later version.
+
+import roverlay.util
+import roverlay.strutil
+
+__all__ = [ 'UseFlagAliasMap', 'UseFlagRenameMap', ]
+
+class _UseFlagMapBase ( dict ):
+
+ class AbstractMethod ( NotImplementedError ):
+ pass
+
+ class BadFile ( Exception ):
+ pass
+
+ def __init__ ( self, from_file=None ):
+ super ( _UseFlagMapBase, self ).__init__()
+ if from_file:
+ self.read_file ( from_file )
+ # --- end of __init__ (...) ---
+
+ def add_entry ( self, flag, alias_list, **kw ):
+ raise self.__class__.AbstractMethod()
+ # --- end of add_entry (...) ---
+
+ def get_alias_map ( self ):
+ raise self.__class__.AbstractMethod()
+ # --- end of get_alias_map (...) ---
+
+ def get_rename_map ( self ):
+ raise self.__class__.AbstractMethod()
+ # --- end of get_rename_map (...) ---
+
+ def __invert__ ( self ):
+ raise self.__class__.AbstractMethod()
+ # --- end of __invert__ (...) ---
+
+ def read_file ( self, filepath ):
+ with open ( filepath, 'rt' ) as FH:
+ current_flag = None
+ for line in FH.readlines():
+ sline = line.strip()
+ if not sline or sline [0] == '#':
+ pass
+ elif sline [0] != line [0]:
+ # append to last flag
+ alias = roverlay.strutil.split_whitespace ( sline )
+ if alias:
+ self.add_entry ( current_flag, alias )
+ else:
+ next_flag, alias = roverlay.util.headtail (
+ roverlay.strutil.split_whitespace ( sline )
+ )
+ next_flag = next_flag.lower()
+ if not next_flag or next_flag == '=':
+ raise self.__class__.BadFile()
+ elif alias:
+ if alias [0] == '=':
+ self.add_entry ( next_flag, alias [1:] )
+ else:
+ self.add_entry ( next_flag, alias )
+ # -- end if;
+ current_flag = next_flag
+ # -- end if;
+ # -- end for;
+ # --- end of read_file (...) ---
+
+ def _iter_sorted ( self ):
+ return sorted ( self.items(), key=lambda e: e[0] )
+ # --- end of _iter_sorted (...) ---
+
+ def get_export_str ( self ):
+ raise self.__class__.AbstractMethod()
+ # --- end of get_export_str (...) ---
+
+# --- end of _UseFlagMapBase ---
+
+
+# { new_name => [original_name...] }
+class UseFlagAliasMap ( _UseFlagMapBase ):
+
+ def add_entry ( self, flag, alias_list, not_a_list=False ):
+ existing_entry = self.get ( flag, None )
+ if existing_entry:
+ if not_a_list:
+ existing_entry.add ( alias_list )
+ else:
+ existing_entry.update ( alias_list )
+ elif not_a_list:
+ self [flag] = { alias_list, }
+ else:
+ self [flag] = set ( alias_list )
+ # --- end of add_entry (...) ---
+
+ def get_rename_map ( self ):
+ c = UseFlagRenameMap()
+ for flag, alias in self.items():
+ c.add_entry ( flag, alias )
+ return c
+ # --- end of get_rename_map (...) ---
+
+ def get_alias_map ( self ):
+ return self
+ # --- end of get_alias_map (...) ---
+
+ def __invert__ ( self ):
+ return self.get_rename_map()
+ # --- end of __invert__ (...) ---
+
+ def get_export_str ( self ):
+ return '\n'.join (
+ '{flag} : {alias}'.format ( flag=k, alias=' '.join ( sorted ( v ) ) )
+ for k, v in self._iter_sorted()
+ )
+ # --- end of get_export_str (...) ---
+
+# --- end of UseFlagMap ---
+
+
+# { original_name => new_name }
+class UseFlagRenameMap ( _UseFlagMapBase ):
+
+ def add_entry ( self, flag, alias_list ):
+ for alias in alias_list:
+ #assert alias not in self
+ self [alias] = flag
+ # --- end of add_entry (...) ---
+
+ def get_rename_map ( self ):
+ return self
+ # --- end of get_rename_map (...) ---
+
+ def get_alias_map ( self ):
+ c = UseFlagAliasMap()
+ for alias, flag in self.items():
+ c.add_entry ( flag, alias, not_a_list=True )
+ return c
+ # --- end of get_alias_map ( self )
+
+ def __invert__ ( self ):
+ return self.get_alias_map()
+ # --- end of __invert__ (...) ---
+
+ def get_export_str ( self ):
+ return self.get_alias_map().get_export_str()
+ # --- end of get_export_str (...) ---
+
+# --- end of UseFlagRenameMap ---
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-07-08 22:47 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-07-08 22:47 UTC (permalink / raw
To: gentoo-commits
commit: 217302f1171f4b26e5c97b227e6ed811875bd00d
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Jul 8 22:41:57 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Jul 8 22:41:57 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=217302f1
roverlay/ebuild/creation: log _run_create()
Add some logging messages that report whether selfdep validation was successful.
---
roverlay/ebuild/creation.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
index 98a5963..52a5034 100644
--- a/roverlay/ebuild/creation.py
+++ b/roverlay/ebuild/creation.py
@@ -1,6 +1,6 @@
# R overlay -- ebuild creation
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 André Erdmann <dywi@mailerd.de>
+# Copyright (C) 2012, 2013 André Erdmann <dywi@mailerd.de>
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
@@ -169,6 +169,7 @@ class EbuildCreation ( object ):
# proceed
self.paused = True
self._resume = self._run_create
+ self.logger.debug ( "paused - waiting for selfdep validation" )
return True
else:
return self._run_create()
@@ -225,8 +226,15 @@ class EbuildCreation ( object ):
self.status = 0
return True
- else:
+ elif (
+ hasattr ( self, 'selfdeps' ) or hasattr ( self, 'optional_selfdeps' )
+ ):
+ self.logger.debug ( "selfdep validation failed." )
return False
+ else:
+ raise AssertionError (
+ "selfdep validation must not fail if no selfdeps are present!"
+ )
# --- end of _run_create (...) ---
# --- end of EbuildCreation ---
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-07-08 22:47 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-07-08 22:47 UTC (permalink / raw
To: gentoo-commits
commit: 67400590e39f148355b08b20efa67278dc28de6d
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Jul 8 22:38:42 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Jul 8 22:38:42 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=67400590
roverlay/ebuild/ebuilder: remove newline at EOF
Using want_newline=<True|False> instead of inserting a newline directly fixes
a (minor) syntax issue.
---
roverlay/ebuild/ebuilder.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/roverlay/ebuild/ebuilder.py b/roverlay/ebuild/ebuilder.py
index 6806478..047a678 100644
--- a/roverlay/ebuild/ebuilder.py
+++ b/roverlay/ebuild/ebuilder.py
@@ -25,20 +25,26 @@ class Ebuilder ( object ):
def get_lines ( self ):
"""Creates and returns (ordered) text lines."""
+ EMPTY_STR = ""
evar_list = sorted (
self._evars.values(), key=lambda e: ( e.priority, e.name )
)
- last = len ( evar_list ) - 1
+ last = len ( evar_list ) - 1
+ want_newline = False
for index, e in enumerate ( evar_list ):
if e.active():
varstr = str ( e )
if varstr:
+ if want_newline:
+ yield EMPTY_STR
+ want_newline = False
+
yield varstr
if index < last and self.min_newline_distance < abs (
evar_list [index + 1].priority - e.priority
):
- yield ''
+ want_newline = True
# -- end for;
# --- end of get_lines (...) ---
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-07-08 22:47 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-07-08 22:47 UTC (permalink / raw
To: gentoo-commits
commit: e074d6a74675f650a02e7304dcaf791a850ae169
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Jul 8 22:43:29 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Jul 8 22:43:29 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=e074d6a7
roverlay/ebuild, "selfdep reduction": fixup
Selfdep validation is usable now.
(Some debug statements need to be removed.)
---
roverlay/ebuild/abstractcomponents.py | 4 +-
roverlay/ebuild/depres.py | 107 ++++++++++++++++++++++++++++---
roverlay/ebuild/evars.py | 114 ++++++++++++++++++++++------------
3 files changed, 174 insertions(+), 51 deletions(-)
diff --git a/roverlay/ebuild/abstractcomponents.py b/roverlay/ebuild/abstractcomponents.py
index def0c2a..9b47b88 100644
--- a/roverlay/ebuild/abstractcomponents.py
+++ b/roverlay/ebuild/abstractcomponents.py
@@ -1,6 +1,6 @@
# R overlay -- ebuild creation, ebuild variables (abstract)
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 André Erdmann <dywi@mailerd.de>
+# Copyright (C) 2012, 2013 André Erdmann <dywi@mailerd.de>
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
@@ -29,7 +29,7 @@ IGNORED_VALUE_CHARS = "\"'`;"
def _value_char_allowed ( c ):
"""Returns True if the given char is allowed, else False (=char should
- be ignored.
+ be ignored).
arguments:
* c --
diff --git a/roverlay/ebuild/depres.py b/roverlay/ebuild/depres.py
index fb9b267..86015db 100644
--- a/roverlay/ebuild/depres.py
+++ b/roverlay/ebuild/depres.py
@@ -1,9 +1,12 @@
# R overlay -- ebuild creation, dependency resolution
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 André Erdmann <dywi@mailerd.de>
+# Copyright (C) 2012, 2013 André Erdmann <dywi@mailerd.de>
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
+from __future__ import print_function
+# TODO: remove import ^
+
"""ebuild dependency resolution
This module handles ebuild-side dependency resolution (i.e. initialize
@@ -66,6 +69,76 @@ EBUILDVARS = {
}
+class DepResultIterator ( object ):
+ """A dependency result iterator meant for debugging only."""
+ # meant for testing/debugging only,
+ # since (mandatory) deps should always be valid
+ # (and therefore direct access to the iterable is sufficient)
+ #
+
+ # a list of package names that should trigger "possibly broken" behavior
+ # (see below)
+ WATCHLIST = frozenset ({
+ 'wavethresh',
+ })
+
+ def __init__ ( self, deps ):
+ super ( DepResultIterator, self ).__init__()
+ self.deps = deps
+ # --- end of __init__ (...) ---
+
+ def possibly_broken ( self, dep ):
+ print ( "--- POSSIBLY BROKEN SELFDEP FOUND ---" )
+ print (
+ dep.dep,
+ dep.version if dep.fuzzy else "<any version does it>",
+ repr ( dep.version_compare ) if dep.fuzzy else "<no v-compare>",
+ dep.candidates,
+ [ c.get ( 'version' ) for c in dep.candidates ]
+ )
+ print ( "--- SNIP ---" )
+ # --- end of possibly_broken (...) ---
+
+ def __iter__ ( self ):
+ for dep in self.deps:
+ if dep.is_valid():
+ # FIXME/REMOVE: debug code
+ if dep.is_selfdep and dep.package in self.WATCHLIST:
+ self.possibly_broken ( dep )
+ yield dep
+ else:
+ raise Exception (
+ "unsatisfied mandatory selfdep found: " + str ( dep )
+ )
+ # --- end of __iter__ (...) ---
+
+# --- end of DepResultIterator ---
+
+
+class OptionalSelfdepIterator ( object ):
+ def __init__ ( self, deps ):
+ super ( OptionalSelfdepIterator, self ).__init__()
+ self.deps = deps
+ self.missingdeps = set()
+ # --- end of __init__ (...) ---
+
+ def __iter__ ( self ):
+ dep_missing = self.missingdeps.add
+
+ for dep in self.deps:
+ if dep.is_valid():
+ yield dep
+ else:
+ # !!! COULDFIX
+ # dep.dep is a depend atom, whereas the usual missingdeps
+ # entries are dependency strings
+ #
+ dep_missing ( dep.dep )
+ # --- end of __iter__ (...) ---
+
+# --- end of OptionalSelfdepIterator ---
+
+
class EbuildDepRes ( object ):
"""Handles dependency resolution for a single ebuild."""
@@ -282,7 +355,7 @@ class EbuildDepRes ( object ):
if 'DEPEND' in depmap:
evar_list.append (
EBUILDVARS ['DEPEND'] (
- ( k for k in depmap ['DEPEND'] ),
+ DepResultIterator ( depmap ['DEPEND'] ),
using_suggests=has_suggests, use_expand=True
)
)
@@ -290,7 +363,7 @@ class EbuildDepRes ( object ):
if 'RDEPEND' in depmap:
evar_list.append (
EBUILDVARS ['RDEPEND'] (
- ( k for k in depmap ['RDEPEND'] ),
+ DepResultIterator ( depmap ['RDEPEND'] ),
using_suggests=has_suggests, use_expand=True
)
)
@@ -301,20 +374,36 @@ class EbuildDepRes ( object ):
)
)
+
+ missing_deps = self.missingdeps
if has_suggests:
# TODO: add unsatisfiable^optional selfdeps to MISSINGDEPS below
+ selfdep_iter = OptionalSelfdepIterator ( depmap [ 'R_SUGGESTS'] )
+
evar_list.append (
EBUILDVARS ['R_SUGGESTS'] (
- ( k.dep for k in depmap ['R_SUGGESTS'] if k.is_valid() ),
- using_suggests=True, use_expand=True
+ selfdep_iter, using_suggests=True, use_expand=True
)
)
-
-
- if self.missingdeps:
+ if selfdep_iter.missingdeps:
+ if missing_deps:
+ evar_list.append (
+ evars.MISSINGDEPS (
+ missing_deps | selfdep_iter.missingdeps, do_sort=True
+ )
+ )
+ else:
+ evar_list.append (
+ evars.MISSINGDEPS ( selfdep_iter.missingdeps, do_sort=True )
+ )
+ elif missing_deps:
+ evar_list.append (
+ evars.MISSINGDEPS ( missing_deps, do_sort=True )
+ )
+ elif missing_deps:
evar_list.append (
- evars.MISSINGDEPS ( self.missingdeps, do_sort=True )
+ evars.MISSINGDEPS ( missing_deps, do_sort=True )
)
return evar_list
diff --git a/roverlay/ebuild/evars.py b/roverlay/ebuild/evars.py
index ef5016b..573647c 100644
--- a/roverlay/ebuild/evars.py
+++ b/roverlay/ebuild/evars.py
@@ -1,6 +1,6 @@
# R overlay -- ebuild creation, ebuild variables
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 André Erdmann <dywi@mailerd.de>
+# Copyright (C) 2012, 2013 André Erdmann <dywi@mailerd.de>
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
@@ -30,6 +30,63 @@ RSUGGESTS_NAME = 'R_SUGGESTS'
# ignoring style guide here (camel case, ...)
+class DependListValue (
+ roverlay.ebuild.abstractcomponents.ListValue
+):
+
+ def add ( self, deps ):
+ if deps:
+ if isinstance ( deps, str ):
+ self.value.append ( deps )
+ else:
+ for item in deps:
+ self.value.append ( item.dep )
+ # --- end of add (...) ---
+
+# --- end of DependListValue ---
+
+class DependencyVariable ( roverlay.ebuild.abstractcomponents.EbuildVar ):
+ #DEFAULT_PRIORITY = 140
+
+ def __init__ ( self, deps, empty_value=None, **kw ):
+ cls = self.__class__
+ super ( DependencyVariable, self ).__init__ (
+ name = cls.__name__,
+ value = DependListValue ( deps, empty_value=empty_value ),
+ priority = cls.DEFAULT_PRIORITY,
+ param_expansion = True,
+ #ignore **kw
+ )
+ # --- end of __init__ (...) ---
+
+# --- end of DependencyVariable ---
+
+
+class DEPEND ( DependencyVariable ):
+ """A DEPEND="..." statement."""
+ DEFAULT_PRIORITY = 150
+# --- end of DEPEND ---
+
+class RDEPEND ( DependencyVariable ):
+ """A RDEPEND="..." statement."""
+ DEFAULT_PRIORITY = 160
+
+ def __init__ ( self, deps, using_suggests=False, **kwargs ):
+ super ( RDEPEND, self ).__init__ (
+ deps, empty_value="${DEPEND-}", **kwargs
+ )
+ if using_suggests:
+ self.enable_suggests()
+ # --- end of __init__ (...) ---
+
+
+ def enable_suggests ( self ):
+ """Adds the optional R_SUGGESTS dependencies to RDEPEND."""
+ self.add_value ( '${' + RSUGGESTS_NAME + '-}' )
+ # --- end of enable_suggests (...) ---
+
+# --- end of RDEPEND ---
+
class UseExpandListValue (
roverlay.ebuild.abstractcomponents.AbstractListValue
@@ -62,17 +119,21 @@ class UseExpandListValue (
self.set_value ( deps )
# --- end of __init__ (...) ---
- def _get_depstr_key ( self, depstr ):
- # tries to get the use flag name from depstr
- match = self.__class__.RE_USENAME.match ( depstr )
- if match:
- return self._get_use_key (
- ( match.group ( "pn" ) or match.group ( "pf" ) ).lower()
- )
+ def _get_depstr_key ( self, dep ):
+ if hasattr ( dep, 'package' ):
+ return dep.package
else:
- raise ValueError (
- "depstr {!r} cannot be parsed".format ( depstr )
- )
+ # tries to get the use flag name from dep.dep
+ # str(dep) == dep.dep
+ match = self.__class__.RE_USENAME.match ( dep.dep )
+ if match:
+ return self._get_use_key (
+ ( match.group ( "pn" ) or match.group ( "pf" ) ).lower()
+ )
+ else:
+ raise ValueError (
+ "depstr {!r} cannot be parsed".format ( depstr )
+ )
# --- end of _get_depstr_key (...) ---
def _get_use_key ( self, orig_key ):
@@ -101,10 +162,10 @@ class UseExpandListValue (
for item in deps:
if hasattr ( item, '__iter__' ) and not isinstance ( item, str ):
key = self._get_use_key ( str ( item [0] ) )
- val = item [1]
+ val = item [1].dep
else:
key = self._get_depstr_key ( item )
- val = item
+ val = item.dep
# -- end if;
vref = self.depdict.get ( key, None )
@@ -298,33 +359,6 @@ class R_SUGGESTS_USE_EXPAND ( roverlay.ebuild.abstractcomponents.EbuildVar ):
return self.value.get_flags ( *args, **kwargs )
# --- end of get_flags (...) ---
-class DEPEND ( roverlay.ebuild.abstractcomponents.EbuildVar ):
- """A DEPEND="..." statement."""
- def __init__ ( self, deps, **kw ):
- super ( DEPEND, self ) . __init__ (
- name='DEPEND',
- value=ListValue ( deps ),
- priority=150,
- param_expansion=True,
- )
-
-
-class RDEPEND ( roverlay.ebuild.abstractcomponents.EbuildVar ):
- """A RDEPEND="..." statement."""
- def __init__ ( self, deps, using_suggests=False, **kw ):
- super ( RDEPEND, self ) . __init__ (
- name='RDEPEND',
- value=ListValue ( deps, empty_value="${DEPEND-}" ),
- priority=160,
- param_expansion=True
- )
- if using_suggests: self.enable_suggests()
-
- def enable_suggests ( self ):
- """Adds the optional R_SUGGESTS dependencies to RDEPEND."""
- self.add_value ( '${' + RSUGGESTS_NAME + '-}' )
- # --- end of enable_suggests (...) --
-
class MISSINGDEPS ( roverlay.ebuild.abstractcomponents.EbuildVar ):
def __init__ ( self, missing_deps, do_sort=False, **kw ):
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
@ 2013-07-10 8:26 André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-07-10 8:26 UTC (permalink / raw
To: gentoo-commits
commit: 9a3c8889b88e751086616592413a8038dd57e41c
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jul 10 08:21:00 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Jul 10 08:21:00 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=9a3c8889
ebuild creation: LICENSE variable
create a LICENSE variable if possible and add it to the ebuild
This commit also fixes a case (in)sensitivity issue in UseExpandListValue.
---
roverlay/ebuild/creation.py | 19 ++++++++-----
roverlay/ebuild/evars.py | 65 ++++++++++++++++++++++++++++-----------------
2 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
index 52a5034..b2a291e 100644
--- a/roverlay/ebuild/creation.py
+++ b/roverlay/ebuild/creation.py
@@ -96,12 +96,10 @@ class EbuildCreation ( object ):
raise
# --- end of run (...) ---
- def _get_ebuild_description ( self ):
+ def _get_ebuild_description ( self, desc ):
"""Creates a DESCRIPTION variable."""
# FIXME: could be moved to _run_create()
- desc = self.package_info ['desc_data']
-
description = None
if USE_FULL_DESCRIPTION:
# use Title and Description for DESCRIPTION=
@@ -181,8 +179,7 @@ class EbuildCreation ( object ):
self.status = 3
p_info = self.package_info
dep_resolution = self.dep_resolution
-
- # FIXME: selfdep reduction should not remove any package (optional deps!)
+ desc = self.package_info ['desc_data']
if p_info.end_selfdep_validate():
ebuild = ebuilder.Ebuilder()
@@ -209,7 +206,7 @@ class EbuildCreation ( object ):
# ebuild.use ( evars.IUSE() )
# DESCRIPTION
- ebuild.use ( self._get_ebuild_description() )
+ ebuild.use ( self._get_ebuild_description ( desc ) )
# SRC_URI
ebuild.use ( evars.SRC_URI (
@@ -217,7 +214,15 @@ class EbuildCreation ( object ):
src_uri_dest = p_info.get ( "src_uri_dest", do_fallback=True )
) )
- ebuild_text = ebuild.to_str()
+ # LICENSE (optional)
+ license_str = desc.get ( 'License' )
+ if license_str:
+ ebuild.use ( evars.LICENSE ( license_str ) )
+
+
+ #ebuild_text = ebuild.to_str()
+ ## FIXME: debug rstrip()
+ ebuild_text = ebuild.to_str().rstrip()
p_info.update_now (
ebuild=ebuild_text,
diff --git a/roverlay/ebuild/evars.py b/roverlay/ebuild/evars.py
index 573647c..138fc04 100644
--- a/roverlay/ebuild/evars.py
+++ b/roverlay/ebuild/evars.py
@@ -14,7 +14,7 @@ is printed as bash array.
"""
__all__ = [ 'DEPEND', 'DESCRIPTION', 'IUSE', 'MISSINGDEPS',
- 'RDEPEND', 'R_SUGGESTS', 'R_SUGGESTS_USE_EXPAND', 'SRC_URI', 'KEYWORDS',
+ 'RDEPEND', 'R_SUGGESTS_USE_EXPAND', 'SRC_URI', 'KEYWORDS',
]
import collections
@@ -112,45 +112,38 @@ class UseExpandListValue (
**kw
)
self.insert_leading_newline = True
+ # dict { <internal flag name> => <overlay flag name> }
self.alias_map = alias_map or None
self.basename = basename.rstrip ( '_' ).lower()
self.sort_flags = True
+ # dict { <overlay flag name> => <list [dep...]> }
+ #self.depdict = dict()
self.set_value ( deps )
# --- end of __init__ (...) ---
def _get_depstr_key ( self, dep ):
- if hasattr ( dep, 'package' ):
- return dep.package
+ # tries to get the use flag name from dep.dep
+ # str(dep) == dep.dep
+ match = self.__class__.RE_USENAME.match ( dep.dep )
+ if match:
+ return self._get_use_key (
+ ( match.group ( "pn" ) or match.group ( "pf" ) )
+ )
else:
- # tries to get the use flag name from dep.dep
- # str(dep) == dep.dep
- match = self.__class__.RE_USENAME.match ( dep.dep )
- if match:
- return self._get_use_key (
- ( match.group ( "pn" ) or match.group ( "pf" ) ).lower()
- )
- else:
- raise ValueError (
- "depstr {!r} cannot be parsed".format ( depstr )
- )
+ raise ValueError (
+ "depstr {!r} cannot be parsed".format ( depstr )
+ )
# --- end of _get_depstr_key (...) ---
def _get_use_key ( self, orig_key ):
+ key_low = orig_key.lower()
if self.alias_map:
- return self.alias_map.get ( orig_key, orig_key ).lower()
+ return self.alias_map.get ( key_low, key_low ).lower()
else:
- return orig_key.lower()
+ return key_low
# --- end of _get_use_key (...) ---
- def _accept_value ( self, value ):
- if hasattr ( value, '__iter__' ):
- if isinstance ( value, str ):
- raise ValueError ( "x" )
- else:
- return False
- # --- end of _accept_value (...) ---
-
def set_value ( self, deps ):
self.depdict = dict()
if deps: self.add ( deps )
@@ -163,6 +156,9 @@ class UseExpandListValue (
if hasattr ( item, '__iter__' ) and not isinstance ( item, str ):
key = self._get_use_key ( str ( item [0] ) )
val = item [1].dep
+ elif hasattr ( item, 'package' ):
+ key = self._get_use_key ( item.package )
+ val = item.dep
else:
key = self._get_depstr_key ( item )
val = item.dep
@@ -234,6 +230,27 @@ class UseExpandListValue (
# --- end of UseExpandListValue ---
+class LICENSE ( roverlay.ebuild.abstractcomponents.EbuildVar ):
+ def __init__ ( self, license_str ):
+ super ( LICENSE, self ).__init__ (
+ name = 'LICENSE',
+ value = license_str,
+ priority = 100,
+ )
+ # --- end of __init__ (...) ---
+# --- end of LICENSE ---
+
+
+class HOMEPAGE ( roverlay.ebuild.abstractcomponents.EbuildVar ):
+ def __init__ ( self, homepage ):
+ super ( HOMEPAGE, self ).__init__ (
+ name = 'HOMEPAGE',
+ value = homepage,
+ priority = 95,
+ )
+ # --- end of __init__ (...) ---
+# --- end of HOMEPAGE ---
+
class DESCRIPTION ( roverlay.ebuild.abstractcomponents.EbuildVar ):
"""A DESCRIPTION="..." statement."""
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
2013-07-10 16:16 [gentoo-commits] proj/R_overlay:master " André Erdmann
@ 2013-07-10 15:10 ` André Erdmann
0 siblings, 0 replies; 7+ messages in thread
From: André Erdmann @ 2013-07-10 15:10 UTC (permalink / raw
To: gentoo-commits
commit: a12e8a089a6c8d6df6a6f3dac0da2e95f7d3b714
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jul 10 13:36:07 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Jul 10 13:36:07 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=a12e8a08
roveray/ebuild/: disable debug dep iterator
---
roverlay/ebuild/depres.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/roverlay/ebuild/depres.py b/roverlay/ebuild/depres.py
index 86015db..81f2711 100644
--- a/roverlay/ebuild/depres.py
+++ b/roverlay/ebuild/depres.py
@@ -79,7 +79,6 @@ class DepResultIterator ( object ):
# a list of package names that should trigger "possibly broken" behavior
# (see below)
WATCHLIST = frozenset ({
- 'wavethresh',
})
def __init__ ( self, deps ):
@@ -355,7 +354,8 @@ class EbuildDepRes ( object ):
if 'DEPEND' in depmap:
evar_list.append (
EBUILDVARS ['DEPEND'] (
- DepResultIterator ( depmap ['DEPEND'] ),
+ #DepResultIterator ( depmap ['DEPEND'] ),
+ depmap ['DEPEND'],
using_suggests=has_suggests, use_expand=True
)
)
@@ -363,7 +363,8 @@ class EbuildDepRes ( object ):
if 'RDEPEND' in depmap:
evar_list.append (
EBUILDVARS ['RDEPEND'] (
- DepResultIterator ( depmap ['RDEPEND'] ),
+ #DepResultIterator ( depmap ['RDEPEND'] ),
+ depmap ['RDEPEND'],
using_suggests=has_suggests, use_expand=True
)
)
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-07-10 15:10 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-08 22:47 [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/ André Erdmann
-- strict thread matches above, loose matches on Subject: below --
2013-07-10 16:16 [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-10 15:10 ` [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-10 8:26 André Erdmann
2013-07-08 22:47 André Erdmann
2013-07-08 22:47 André Erdmann
2013-06-19 18:58 André Erdmann
2013-06-05 18:08 André Erdmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox