Index: head/devel/py-ply/Makefile =================================================================== --- head/devel/py-ply/Makefile (revision 390979) +++ head/devel/py-ply/Makefile (revision 390980) @@ -1,37 +1,38 @@ # Created by: ijliao # $FreeBSD$ PORTNAME= ply PORTVERSION= 3.6 +PORTREVISION= 1 CATEGORIES= devel python MASTER_SITES= http://www.dabeaz.com/ply/ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} MAINTAINER= mva@FreeBSD.org COMMENT= Python Lex-Yacc LICENSE= BSD3CLAUSE USES= python USE_PYTHON= autoplist concurrent distutils PORTDOCS= ply.html internal.html OPTIONS_DEFINE= DOCS EXAMPLES post-extract: @${FIND} ${WRKSRC}/example -name "*.pyc" -type f -delete @${FIND} ${WRKSRC}/example -name "__pycache__" -type d -delete pre-configure: @${REINPLACE_CMD} -e 's|from setuptools import setup|from distutils.core import setup|' \ ${WRKSRC}/setup.py post-install: @${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/doc/ply.html ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/doc/internal.html ${STAGEDIR}${DOCSDIR} @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${CP} -R ${WRKSRC}/example/ ${STAGEDIR}${EXAMPLESDIR} .include Index: head/devel/py-ply/files/patch-CHANGES =================================================================== --- head/devel/py-ply/files/patch-CHANGES (nonexistent) +++ head/devel/py-ply/files/patch-CHANGES (revision 390980) @@ -0,0 +1,12 @@ +--- CHANGES.orig 2015-04-25 14:15:57 UTC ++++ CHANGES +@@ -1,3 +1,9 @@ ++Version 3.7 ++--------------------- ++05/07/15: beazley ++ Fixed regression in handling of table modules if specified as module ++ objects. See https://github.com/dabeaz/ply/issues/63 ++ + Version 3.6 + --------------------- + 04/25/15: beazley Property changes on: head/devel/py-ply/files/patch-CHANGES ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/py-ply/files/patch-ply_lex.py =================================================================== --- head/devel/py-ply/files/patch-ply_lex.py (nonexistent) +++ head/devel/py-ply/files/patch-ply_lex.py (revision 390980) @@ -0,0 +1,82 @@ +--- ply/lex.py.orig 2015-04-26 21:17:41 UTC ++++ ply/lex.py +@@ -171,7 +171,10 @@ class Lexer: + # ------------------------------------------------------------ + # writetab() - Write lexer information to a table file + # ------------------------------------------------------------ +- def writetab(self, basetabmodule, outputdir=''): ++ def writetab(self, lextab, outputdir=''): ++ if isinstance(lextab, types.ModuleType): ++ raise IOError("Won't overwrite existing lextab module") ++ basetabmodule = lextab.split('.')[-1] + filename = os.path.join(outputdir, basetabmodule) + '.py' + with open(filename, 'w') as tf: + tf.write('# %s.py. This file automatically created by PLY (version %s). Don\'t edit!\n' % (basetabmodule, __version__)) +@@ -856,6 +859,10 @@ class LexerReflect(object): + # ----------------------------------------------------------------------------- + def lex(module=None, object=None, debug=False, optimize=False, lextab='lextab', + reflags=0, nowarn=False, outputdir=None, debuglog=None, errorlog=None): ++ ++ if lextab is None: ++ lextab = 'lextab' ++ + global lexer + + ldict = None +@@ -885,29 +892,13 @@ def lex(module=None, object=None, debug= + else: + ldict = get_caller_module_dict(2) + +- if outputdir is None: +- # If no output directory is set, the location of the output files +- # is determined according to the following rules: +- # - If lextab specifies a package, files go into that package directory +- # - Otherwise, files go in the same directory as the specifying module +- if '.' not in lextab: +- srcfile = ldict['__file__'] +- else: +- parts = lextab.split('.') +- pkgname = '.'.join(parts[:-1]) +- exec('import %s' % pkgname) +- srcfile = getattr(sys.modules[pkgname], '__file__', '') +- outputdir = os.path.dirname(srcfile) +- + # Determine if the module is package of a package or not. + # If so, fix the tabmodule setting so that tables load correctly + pkg = ldict.get('__package__') +- if pkg: ++ if pkg and isinstance(lextab, str): + if '.' not in lextab: + lextab = pkg + '.' + lextab + +- baselextab = lextab.split('.')[-1] +- + # Collect parser information from the dictionary + linfo = LexerReflect(ldict, log=errorlog, reflags=reflags) + linfo.get_all() +@@ -1029,8 +1020,24 @@ def lex(module=None, object=None, debug= + + # If in optimize mode, we write the lextab + if lextab and optimize: ++ if outputdir is None: ++ # If no output directory is set, the location of the output files ++ # is determined according to the following rules: ++ # - If lextab specifies a package, files go into that package directory ++ # - Otherwise, files go in the same directory as the specifying module ++ if isinstance(lextab, types.ModuleType): ++ srcfile = lextab.__file__ ++ else: ++ if '.' not in lextab: ++ srcfile = ldict['__file__'] ++ else: ++ parts = lextab.split('.') ++ pkgname = '.'.join(parts[:-1]) ++ exec('import %s' % pkgname) ++ srcfile = getattr(sys.modules[pkgname], '__file__', '') ++ outputdir = os.path.dirname(srcfile) + try: +- lexobj.writetab(baselextab, outputdir) ++ lexobj.writetab(lextab, outputdir) + except IOError as e: + errorlog.warning("Couldn't write lextab module %r. %s" % (lextab, e)) + Property changes on: head/devel/py-ply/files/patch-ply_lex.py ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/py-ply/files/patch-ply_yacc.py =================================================================== --- head/devel/py-ply/files/patch-ply_yacc.py (nonexistent) +++ head/devel/py-ply/files/patch-ply_yacc.py (revision 390980) @@ -0,0 +1,79 @@ +--- ply/yacc.py.orig 2015-04-26 21:19:12 UTC ++++ ply/yacc.py +@@ -2692,7 +2692,11 @@ class LRGeneratedTable(LRTable): + # This function writes the LR parsing tables to a file + # ----------------------------------------------------------------------------- + +- def write_table(self, basemodulename, outputdir='', signature=''): ++ def write_table(self, tabmodule, outputdir='', signature=''): ++ if isinstance(tabmodule, types.ModuleType): ++ raise IOError("Won't overwrite existing tabmodule") ++ ++ basemodulename = tabmodule.split('.')[-1] + filename = os.path.join(outputdir, basemodulename) + '.py' + try: + f = open(filename, 'w') +@@ -2705,7 +2709,7 @@ _tabversion = %r + _lr_method = %r + + _lr_signature = %r +- ''' % (filename, __tabversion__, self.lr_method, signature)) ++ ''' % (os.path.basename(filename), __tabversion__, self.lr_method, signature)) + + # Change smaller to 0 to go back to original tables + smaller = 1 +@@ -3179,6 +3183,9 @@ def yacc(method='LALR', debug=yaccdebug, + check_recursion=True, optimize=False, write_tables=True, debugfile=debug_file, + outputdir=None, debuglog=None, errorlog=None, picklefile=None): + ++ if tabmodule is None: ++ tabmodule = tab_module ++ + # Reference to the parsing method of the last built parser + global parse + +@@ -3204,22 +3211,26 @@ def yacc(method='LALR', debug=yaccdebug, + # is determined according to the following rules: + # - If tabmodule specifies a package, files go into that package directory + # - Otherwise, files go in the same directory as the specifying module +- if '.' not in tabmodule: +- srcfile = pdict['__file__'] ++ if isinstance(tabmodule, types.ModuleType): ++ srcfile = tabmodule.__file__ + else: +- parts = tabmodule.split('.') +- pkgname = '.'.join(parts[:-1]) +- exec('import %s' % pkgname) +- srcfile = getattr(sys.modules[pkgname], '__file__', '') ++ if '.' not in tabmodule: ++ srcfile = pdict['__file__'] ++ else: ++ parts = tabmodule.split('.') ++ pkgname = '.'.join(parts[:-1]) ++ exec('import %s' % pkgname) ++ srcfile = getattr(sys.modules[pkgname], '__file__', '') + outputdir = os.path.dirname(srcfile) + + # Determine if the module is package of a package or not. + # If so, fix the tabmodule setting so that tables load correctly + pkg = pdict.get('__package__') +- if pkg and '.' not in tabmodule: +- tabmodule = pkg + '.' + tabmodule ++ if pkg and isinstance(tabmodule, str): ++ if '.' not in tabmodule: ++ tabmodule = pkg + '.' + tabmodule ++ + +- basetabmodule = tabmodule.split('.')[-1] + + # Set start symbol if it's specified directly using an argument + if start is not None: +@@ -3432,7 +3443,7 @@ def yacc(method='LALR', debug=yaccdebug, + # Write the table file if requested + if write_tables: + try: +- lr.write_table(basetabmodule, outputdir, signature) ++ lr.write_table(tabmodule, outputdir, signature) + except IOError as e: + errorlog.warning("Couldn't create %r. %s" % (tabmodule, e)) + Property changes on: head/devel/py-ply/files/patch-ply_yacc.py ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property