public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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