From eec24fb77970647e567b889985635ea0e9f291aa Mon Sep 17 00:00:00 2001 From: Ruben Undheim Date: Tue, 29 Jan 2019 15:34:59 +0000 Subject: New upstream version 0.84.41+dfsg.1 --- debian/changelog | 6 ++++++ oregano.spec.in | 3 +++ waf | 14 +++++++------- waflib/Build.py | 11 +++++++---- waflib/Configure.py | 7 ++++--- waflib/Context.py | 18 +++++++++--------- waflib/Node.py | 2 +- waflib/Options.py | 2 +- waflib/Runner.py | 10 ++++++++-- waflib/Scripting.py | 15 +++++++++------ waflib/Task.py | 12 ++++++++---- waflib/TaskGen.py | 6 +++--- waflib/Tools/c_config.py | 6 +++--- waflib/Tools/c_preproc.py | 2 +- waflib/Tools/ccroot.py | 8 +++++++- waflib/Tools/compiler_c.py | 2 +- waflib/Tools/compiler_cxx.py | 2 +- waflib/Tools/compiler_d.py | 2 +- waflib/Tools/compiler_fc.py | 2 +- waflib/Tools/fc.py | 10 +++++++++- waflib/Tools/fc_config.py | 4 ++-- waflib/Tools/fc_scan.py | 8 +++++++- waflib/Tools/ifort.py | 2 +- waflib/Tools/javaw.py | 27 +++++++++++++++++++++++---- waflib/Tools/md5_tstamp.py | 2 +- waflib/Tools/msvc.py | 4 ++-- waflib/Tools/python.py | 2 ++ waflib/Tools/waf_unit_test.py | 2 +- waflib/Utils.py | 19 ++++++++++++------- waflib/ansiterm.py | 2 +- waflib/extras/compat15.py | 2 +- waflib/fixpy2.py | 6 +++--- waflib/processor.py | 2 +- wscript | 2 +- 34 files changed, 148 insertions(+), 76 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3e778ac..298da3b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +oregano (0.84.41-0) unstable; urgency=low + + * Update upstream + + -- Bernhard Schuster Fri, 4 Jan 2019 12:18:52 +0200 + oregano (0.84.40-0) unstable; urgency=low * Update upstream diff --git a/oregano.spec.in b/oregano.spec.in index ce060db..17daa2a 100644 --- a/oregano.spec.in +++ b/oregano.spec.in @@ -84,6 +84,9 @@ rm -rf "$RPM_BUILD_ROOT" %{_mandir}/man1/oregano.1.gz %changelog +* Fri Jan 4 2019 Bernhard Schuster 0.84.41-1 + - Dist fix + * Mon Sep 21 2018 Bernhard Schuster 0.84.40-1 - Fix crash causing bugs diff --git a/waf b/waf index 3d45b55..b16d09c 100755 --- a/waf +++ b/waf @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # encoding: latin-1 # Thomas Nagy, 2005-2018 # @@ -32,13 +32,13 @@ POSSIBILITY OF SUCH DAMAGE. import os, sys, inspect -VERSION="2.0.11" -REVISION="4af5f6d4e441ea5db7e393d841ce352c" -GIT="fe03c6fa470f0bc3c086baafed8c6b4b6d28a245" +VERSION="2.0.14" +REVISION="e67604cd8962dbdaf7c93e0d7470ef5b" +GIT="353ffefa21e6f8795469d118d8059aa16ef49109" INSTALL='' -C1='#4' -C2='#/' -C3='#&' +C1='#(' +C2='#&' +C3='#%' cwd = os.getcwd() join = os.path.join diff --git a/waflib/Build.py b/waflib/Build.py index fbec9de..e54c6bc 100644 --- a/waflib/Build.py +++ b/waflib/Build.py @@ -131,7 +131,7 @@ class BuildContext(Context.Context): Node.Nod3=self.node_class try: data=cPickle.loads(data) - except Exception ,e: + except Exception as e: Logs.debug('build: Could not pickle the build cache %s: %r',dbfn,e) else: for x in SAVED_ATTRS: @@ -528,6 +528,8 @@ class inst(Task.Task): dest=self.install_to.abspath() else: dest=Utils.subst_vars(self.install_to,self.env) + if not os.path.isabs(dest): + dest=os.path.join(self.env.PREFIX,dest) if destdir and Options.options.destdir: dest=os.path.join(Options.options.destdir,os.path.splitdrive(dest)[1].lstrip(os.sep)) return dest @@ -588,7 +590,7 @@ class inst(Task.Task): pass try: self.copy_fun(src,tgt) - except EnvironmentError ,e: + except EnvironmentError as e: if not os.path.exists(src): Logs.error('File %r does not exist',src) elif not os.path.isfile(src): @@ -620,7 +622,7 @@ class inst(Task.Task): Logs.info('- remove %s',tgt) try: os.remove(tgt) - except OSError ,e: + except OSError as e: if e.errno!=errno.ENOENT: if not getattr(self,'uninstall_error',None): self.uninstall_error=True @@ -669,7 +671,8 @@ class CleanContext(BuildContext): lst=[] for env in self.all_envs.values(): lst.extend(self.root.find_or_declare(f)for f in env[CFG_FILES]) - for n in self.bldnode.ant_glob('**/*',excl='.lock* *conf_check_*/** config.log c4che/*',quiet=True): + excluded_dirs='.lock* *conf_check_*/** config.log %s/*'%CACHE_DIR + for n in self.bldnode.ant_glob('**/*',excl=excluded_dirs,quiet=True): if n in lst: continue n.delete() diff --git a/waflib/Configure.py b/waflib/Configure.py index 1af9a67..a5da91b 100644 --- a/waflib/Configure.py +++ b/waflib/Configure.py @@ -61,7 +61,7 @@ class ConfigurationContext(Context.Context): self.bldnode=(os.path.isabs(out)and self.root or self.path).make_node(out) self.bldnode.mkdir() if not os.path.isdir(self.bldnode.abspath()): - conf.fatal('Could not create the build directory %s'%self.bldnode.abspath()) + self.fatal('Could not create the build directory %s'%self.bldnode.abspath()) def execute(self): self.init_dirs() self.cachedir=self.bldnode.make_node(Build.CACHE_DIR) @@ -96,6 +96,7 @@ class ConfigurationContext(Context.Context): env.hash=self.hash env.files=self.files env.environ=dict(self.environ) + env.launch_dir=Context.launch_dir if not(self.env.NO_LOCK_IN_RUN or env.environ.get('NO_LOCK_IN_RUN')or getattr(Options.options,'no_lock_in_run')): env.store(os.path.join(Context.run_dir,Options.lockfile)) if not(self.env.NO_LOCK_IN_TOP or env.environ.get('NO_LOCK_IN_TOP')or getattr(Options.options,'no_lock_in_top')): @@ -140,9 +141,9 @@ class ConfigurationContext(Context.Context): module=None try: module=Context.load_tool(tool,tooldir,ctx=self,with_sys_path=with_sys_path) - except ImportError ,e: + except ImportError as e: self.fatal('Could not load the Waf tool %r from %r\n%s'%(tool,getattr(e,'waf_sys_path',sys.path),e)) - except Exception ,e: + except Exception as e: self.to_log('imp %r (%r & %r)'%(tool,tooldir,funs)) self.to_log(traceback.format_exc()) raise diff --git a/waflib/Context.py b/waflib/Context.py index 21f2145..ab6b154 100644 --- a/waflib/Context.py +++ b/waflib/Context.py @@ -5,9 +5,9 @@ import os,re,imp,sys from waflib import Utils,Errors,Logs import waflib.Node -HEXVERSION=0x2000b00 -WAFVERSION="2.0.11" -WAFREVISION="a97f6fb0941091b4966b625f15ec32fa783a8bec" +HEXVERSION=0x2000e00 +WAFVERSION="2.0.14" +WAFREVISION="907519cab9c1c8c7e4f7d4e468ed6200b9250d58" ABI=20 DBFILE='.wafpickle-%s-%d-%d'%(sys.platform,sys.hexversion,ABI) APPNAME='APPNAME' @@ -172,8 +172,8 @@ class Context(ctx): encoding=kw.pop('decode_as',default_encoding) try: ret,out,err=Utils.run_process(cmd,kw,cargs) - except Exception ,e: - raise Errors.WafError('Execution failure: %s'%str(e),ex=e),None,sys.exc_info()[2] + except Exception as e: + raise Errors.WafError('Execution failure: %s'%str(e),ex=e) if out: if not isinstance(out,str): out=out.decode(encoding,errors='replace') @@ -218,8 +218,8 @@ class Context(ctx): encoding=kw.pop('decode_as',default_encoding) try: ret,out,err=Utils.run_process(cmd,kw,cargs) - except Exception ,e: - raise Errors.WafError('Execution failure: %s'%str(e),ex=e),None,sys.exc_info()[2] + except Exception as e: + raise Errors.WafError('Execution failure: %s'%str(e),ex=e) if not isinstance(out,str): out=out.decode(encoding,errors='replace') if not isinstance(err,str): @@ -371,7 +371,7 @@ def load_tool(tool,tooldir=None,ctx=None,with_sys_path=True): sys.path=tooldir+sys.path try: __import__(tool) - except ImportError ,e: + except ImportError as e: e.waf_sys_path=list(sys.path) raise finally: @@ -392,7 +392,7 @@ def load_tool(tool,tooldir=None,ctx=None,with_sys_path=True): x=None else: __import__(tool) - except ImportError ,e: + except ImportError as e: e.waf_sys_path=list(sys.path) raise finally: diff --git a/waflib/Node.py b/waflib/Node.py index 9d5ae5a..dc979d6 100644 --- a/waflib/Node.py +++ b/waflib/Node.py @@ -52,7 +52,7 @@ def ant_matcher(s,ignorecase): k='^%s$'%k try: exp=re.compile(k,flags=reflags) - except Exception ,e: + except Exception as e: raise Errors.WafError('Invalid pattern: %s'%k,e) else: accu.append(exp) diff --git a/waflib/Options.py b/waflib/Options.py index 92017c8..b61c60a 100644 --- a/waflib/Options.py +++ b/waflib/Options.py @@ -18,7 +18,7 @@ class opt_parser(optparse.OptionParser): while rargs: try: optparse.OptionParser._process_args(self,largs,rargs,values) - except(optparse.BadOptionError,optparse.AmbiguousOptionError),e: + except(optparse.BadOptionError,optparse.AmbiguousOptionError)as e: if self.allow_unknown: largs.append(e.opt_str) else: diff --git a/waflib/Runner.py b/waflib/Runner.py index 063b6f2..e443021 100644 --- a/waflib/Runner.py +++ b/waflib/Runner.py @@ -27,6 +27,8 @@ class PriorityTasks(object): return len(self.lst) def __iter__(self): return iter(self.lst) + def __str__(self): + return'PriorityTasks: [%s]'%'\n '.join(str(x)for x in self.lst) def clear(self): self.lst=[] def append(self,task): @@ -97,7 +99,9 @@ class Parallel(object): self.biter=None self.dirty=False self.revdeps=Utils.defaultdict(set) - self.spawner=Spawner(self) + self.spawner=None + if self.numjobs>1: + self.spawner=Spawner(self) def get_next_task(self): if not self.outstanding: return None @@ -141,9 +145,11 @@ class Parallel(object): self.outstanding.append(x) break else: + if self.stop or self.error: + break raise Errors.WafError('Broken revdeps detected on %r'%self.incomplete) else: - tasks=self.biter.next() + tasks=next(self.biter) ready,waiting=self.prio_and_split(tasks) self.outstanding.extend(ready) self.incomplete.update(waiting) diff --git a/waflib/Scripting.py b/waflib/Scripting.py index e2f085d..7db951d 100644 --- a/waflib/Scripting.py +++ b/waflib/Scripting.py @@ -100,11 +100,11 @@ def waf_entry_point(current_directory,version,wafdir): sys.exit(1) try: set_main_module(wscript) - except Errors.WafError ,e: + except Errors.WafError as e: Logs.pprint('RED',e.verbose_msg) Logs.error(str(e)) sys.exit(1) - except Exception ,e: + except Exception as e: Logs.error('Waf: The wscript in %r is unreadable',Context.run_dir) traceback.print_exc(file=sys.stdout) sys.exit(2) @@ -125,14 +125,14 @@ def waf_entry_point(current_directory,version,wafdir): pdb.post_mortem(tb) else: raise - except Errors.WafError ,e: + except Errors.WafError as e: if Logs.verbose>1: Logs.pprint('RED',e.verbose_msg) Logs.error(e.msg) sys.exit(1) except SystemExit: raise - except Exception ,e: + except Exception as e: traceback.print_exc(file=sys.stdout) sys.exit(2) except KeyboardInterrupt: @@ -194,7 +194,7 @@ def distclean_dir(dirname): except OSError: pass try: - shutil.rmtree('c4che') + shutil.rmtree(Build.CACHE_DIR) except OSError: pass def distclean(ctx): @@ -202,7 +202,7 @@ def distclean(ctx): def remove_and_log(k,fun): try: fun(k) - except EnvironmentError ,e: + except EnvironmentError as e: if e.errno!=errno.ENOENT: Logs.warn('Could not remove %r',k) if not Options.commands: @@ -389,12 +389,15 @@ def autoconfigure(execute_method): cmd=env.config_cmd or'configure' if Configure.autoconfig=='clobber': tmp=Options.options.__dict__ + launch_dir_tmp=Context.launch_dir if env.options: Options.options.__dict__=env.options + Context.launch_dir=env.launch_dir try: run_command(cmd) finally: Options.options.__dict__=tmp + Context.launch_dir=launch_dir_tmp else: run_command(cmd) run_command(self.cmd) diff --git a/waflib/Task.py b/waflib/Task.py index 912008d..f0e2397 100644 --- a/waflib/Task.py +++ b/waflib/Task.py @@ -22,6 +22,9 @@ def f(tsk): bld = gen.bld cwdx = tsk.get_cwd() p = env.get_flat + def to_list(xx): + if isinstance(xx, str): return [xx] + return xx tsk.last_cmd = cmd = \'\'\' %s \'\'\' % s return tsk.exec_command(cmd, cwd=cwdx, env=env.env or None) ''' @@ -47,7 +50,8 @@ def f(tsk): ''' COMPILE_TEMPLATE_SIG_VARS=''' def f(tsk): - super(tsk.__class__, tsk).sig_vars() + sig = tsk.generator.bld.hash_env_vars(tsk.env, tsk.vars) + tsk.m.update(sig) env = tsk.env gen = tsk.generator bld = gen.bld @@ -55,7 +59,7 @@ def f(tsk): p = env.get_flat buf = [] %s - tsk.m.update(repr(buf)) + tsk.m.update(repr(buf).encode()) ''' classes={} class store_task_type(type): @@ -151,7 +155,7 @@ class Task(evil): cmd,args=self.split_argfile(cmd) try: (fd,tmp)=tempfile.mkstemp() - os.write(fd,'\r\n'.join(args)) + os.write(fd,'\r\n'.join(args).encode()) os.close(fd) if Logs.verbose: Logs.debug('argfile: @%r -> %r',tmp,args) @@ -699,7 +703,7 @@ def compile_fun_noshell(line): else: call='%s%s'%(var,code) add_dvar(call) - app('gen.to_list(%s)'%call) + app('to_list(%s)'%call) else: app('to_list(env[%r])'%var) add_dvar(var) diff --git a/waflib/TaskGen.py b/waflib/TaskGen.py index e699692..ce4f43a 100644 --- a/waflib/TaskGen.py +++ b/waflib/TaskGen.py @@ -22,7 +22,7 @@ class task_gen(object): else: self.bld=kw['bld'] self.env=self.bld.env.derive() - self.path=self.bld.path + self.path=kw.get('path',self.bld.path) path=self.path.abspath() try: self.idx=self.bld.idx[path]=self.bld.idx.get(path,0)+1 @@ -410,9 +410,9 @@ class subst_pc(Task.Task): env=self.env upd=self.m.update if getattr(self.generator,'fun',None): - upd(Utils.h_fun(self.generator.fun)) + upd(Utils.h_fun(self.generator.fun).encode()) if getattr(self.generator,'subst_fun',None): - upd(Utils.h_fun(self.generator.subst_fun)) + upd(Utils.h_fun(self.generator.subst_fun).encode()) vars=self.generator.bld.raw_deps.get(self.uid(),[]) act_sig=bld.hash_env_vars(env,vars) upd(act_sig) diff --git a/waflib/Tools/c_config.py b/waflib/Tools/c_config.py index 7b8b9ba..c8350c3 100644 --- a/waflib/Tools/c_config.py +++ b/waflib/Tools/c_config.py @@ -198,7 +198,7 @@ def check_cfg(self,*k,**kw): ret=None try: ret=self.exec_cfg(kw) - except self.errors.WafError ,e: + except self.errors.WafError as e: if'errmsg'in kw: self.end_msg(kw['errmsg'],'YELLOW',**kw) if Logs.verbose>1: @@ -568,7 +568,7 @@ def get_cc_version(conf,cc,gcc=False,icc=False,clang=False): cmd=cc+['-dM','-E','-'] env=conf.env.env or None try: - out,err=conf.cmd_and_log(cmd,output=0,input='\n',env=env) + out,err=conf.cmd_and_log(cmd,output=0,input='\n'.encode(),env=env) except Errors.WafError: conf.fatal('Could not determine the compiler version %r'%cmd) if gcc: @@ -650,7 +650,7 @@ def get_suncc_version(conf,cc): cmd=cc+['-V'] try: out,err=conf.cmd_and_log(cmd,output=0) - except Errors.WafError ,e: + except Errors.WafError as e: if not(hasattr(e,'returncode')and hasattr(e,'stdout')and hasattr(e,'stderr')): conf.fatal('Could not find suncc %r'%cmd) out=e.stdout diff --git a/waflib/Tools/c_preproc.py b/waflib/Tools/c_preproc.py index 2afeeae..8781b73 100644 --- a/waflib/Tools/c_preproc.py +++ b/waflib/Tools/c_preproc.py @@ -653,7 +653,7 @@ class c_parser(object): elif token=='pragma': if re_pragma_once.match(line.lower()): self.ban_includes.add(self.current_file) - except Exception ,e: + except Exception as e: if Logs.verbose: Logs.debug('preproc: line parsing failed (%s): %s %s',e,line,traceback.format_exc()) def define_name(self,line): diff --git a/waflib/Tools/ccroot.py b/waflib/Tools/ccroot.py index 8b22ad0..9d865bf 100644 --- a/waflib/Tools/ccroot.py +++ b/waflib/Tools/ccroot.py @@ -130,6 +130,10 @@ def rm_tgt(cls): return old(self) setattr(cls,'run',wrap) rm_tgt(stlink_task) +@feature('skip_stlib_link_deps') +@before_method('process_use') +def apply_skip_stlib_link_deps(self): + self.env.SKIP_STLIB_LINK_DEPS=True @feature('c','cxx','d','fc','asm') @after_method('process_source') def apply_link(self): @@ -233,7 +237,9 @@ def process_use(self): y=self.bld.get_tgen_by_name(x) var=y.tmp_use_var if var and link_task: - if var=='LIB'or y.tmp_use_stlib or x in names: + if self.env.SKIP_STLIB_LINK_DEPS and isinstance(link_task,stlink_task): + pass + elif var=='LIB'or y.tmp_use_stlib or x in names: self.env.append_value(var,[y.target[y.target.rfind(os.sep)+1:]]) self.link_task.dep_nodes.extend(y.link_task.outputs) tmp_path=y.link_task.outputs[0].parent.path_from(self.get_cwd()) diff --git a/waflib/Tools/compiler_c.py b/waflib/Tools/compiler_c.py index e62c846..ee607be 100644 --- a/waflib/Tools/compiler_c.py +++ b/waflib/Tools/compiler_c.py @@ -21,7 +21,7 @@ def configure(conf): conf.start_msg('Checking for %r (C compiler)'%compiler) try: conf.load(compiler) - except conf.errors.ConfigurationError ,e: + except conf.errors.ConfigurationError as e: conf.env.revert() conf.end_msg(False) debug('compiler_c: %r',e) diff --git a/waflib/Tools/compiler_cxx.py b/waflib/Tools/compiler_cxx.py index 018a401..cbd267f 100644 --- a/waflib/Tools/compiler_cxx.py +++ b/waflib/Tools/compiler_cxx.py @@ -21,7 +21,7 @@ def configure(conf): conf.start_msg('Checking for %r (C++ compiler)'%compiler) try: conf.load(compiler) - except conf.errors.ConfigurationError ,e: + except conf.errors.ConfigurationError as e: conf.env.revert() conf.end_msg(False) debug('compiler_cxx: %r',e) diff --git a/waflib/Tools/compiler_d.py b/waflib/Tools/compiler_d.py index b4d7100..2ca7e26 100644 --- a/waflib/Tools/compiler_d.py +++ b/waflib/Tools/compiler_d.py @@ -19,7 +19,7 @@ def configure(conf): conf.start_msg('Checking for %r (D compiler)'%compiler) try: conf.load(compiler) - except conf.errors.ConfigurationError ,e: + except conf.errors.ConfigurationError as e: conf.env.revert() conf.end_msg(False) Logs.debug('compiler_d: %r',e) diff --git a/waflib/Tools/compiler_fc.py b/waflib/Tools/compiler_fc.py index 29bb754..8b23a2b 100644 --- a/waflib/Tools/compiler_fc.py +++ b/waflib/Tools/compiler_fc.py @@ -20,7 +20,7 @@ def configure(conf): conf.start_msg('Checking for %r (Fortran compiler)'%compiler) try: conf.load(compiler) - except conf.errors.ConfigurationError ,e: + except conf.errors.ConfigurationError as e: conf.env.revert() conf.end_msg(False) Logs.debug('compiler_fortran: %r',e) diff --git a/waflib/Tools/fc.py b/waflib/Tools/fc.py index 6c3bc2a..64c479d 100644 --- a/waflib/Tools/fc.py +++ b/waflib/Tools/fc.py @@ -15,7 +15,15 @@ def fc_hook(self,node): return self.create_compiled_task('fc',node) @conf def modfile(conf,name): - return{'lower':name.lower()+'.mod','lower.MOD':name.lower()+'.MOD','UPPER.mod':name.upper()+'.mod','UPPER':name.upper()+'.MOD'}[conf.env.FC_MOD_CAPITALIZATION or'lower'] + if name.find(':')>=0: + separator=conf.env.FC_SUBMOD_SEPARATOR or'@' + modpath=name.split(':') + modname=modpath[0]+separator+modpath[-1] + suffix=conf.env.FC_SUBMOD_SUFFIX or'.smod' + else: + modname=name + suffix='.mod' + return{'lower':modname.lower()+suffix.lower(),'lower.MOD':modname.lower()+suffix.upper(),'UPPER.mod':modname.upper()+suffix.lower(),'UPPER':modname.upper()+suffix.upper()}[conf.env.FC_MOD_CAPITALIZATION or'lower'] def get_fortran_tasks(tsk): bld=tsk.generator.bld tasks=bld.get_tasks_group(bld.get_group_idx(tsk.generator)) diff --git a/waflib/Tools/fc_config.py b/waflib/Tools/fc_config.py index aee023c..d0d4c45 100644 --- a/waflib/Tools/fc_config.py +++ b/waflib/Tools/fc_config.py @@ -202,10 +202,10 @@ def getoutput(conf,cmd,stdin=False): else: env=dict(os.environ) env['LANG']='C' - input=stdin and'\n'or None + input=stdin and'\n'.encode()or None try: out,err=conf.cmd_and_log(cmd,env=env,output=0,input=input) - except Errors.WafError ,e: + except Errors.WafError as e: if not(hasattr(e,'stderr')and hasattr(e,'stdout')): raise e else: diff --git a/waflib/Tools/fc_scan.py b/waflib/Tools/fc_scan.py index c07a22d..a688250 100644 --- a/waflib/Tools/fc_scan.py +++ b/waflib/Tools/fc_scan.py @@ -5,10 +5,12 @@ import re INC_REGEX="""(?:^|['">]\s*;)\s*(?:|#\s*)INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])""" USE_REGEX="""(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)""" -MOD_REGEX="""(?:^|;)\s*MODULE(?!\s*PROCEDURE)(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)""" +MOD_REGEX="""(?:^|;)\s*MODULE(?!\s+(?:PROCEDURE|SUBROUTINE|FUNCTION))\s+(\w+)""" +SMD_REGEX="""(?:^|;)\s*SUBMODULE\s*\(([\w:]+)\)\s*(\w+)""" re_inc=re.compile(INC_REGEX,re.I) re_use=re.compile(USE_REGEX,re.I) re_mod=re.compile(MOD_REGEX,re.I) +re_smd=re.compile(SMD_REGEX,re.I) class fortran_parser(object): def __init__(self,incpaths): self.seen=[] @@ -30,6 +32,10 @@ class fortran_parser(object): m=re_mod.search(line) if m: mods.append(m.group(1)) + m=re_smd.search(line) + if m: + uses.append(m.group(1)) + mods.append('{0}:{1}'.format(m.group(1),m.group(2))) return(incs,uses,mods) def start(self,node): self.waiting=[node] diff --git a/waflib/Tools/ifort.py b/waflib/Tools/ifort.py index b9e95c6..2cbae10 100644 --- a/waflib/Tools/ifort.py +++ b/waflib/Tools/ifort.py @@ -189,7 +189,7 @@ echo LIB=%%LIB%%;%%LIBPATH%% if conf.logger: conf.logger.error(st) conf.fatal('ifort: Unicode error - check the code page?') - except Exception ,e: + except Exception as e: Logs.debug('ifort: get_ifort_version: %r %r %r -> failure %s',compiler,version,target,str(e)) conf.fatal('ifort: cannot run the compiler in get_ifort_version (run with -v to display errors)') else: diff --git a/waflib/Tools/javaw.py b/waflib/Tools/javaw.py index 8b7ab2a..adb4e04 100644 --- a/waflib/Tools/javaw.py +++ b/waflib/Tools/javaw.py @@ -5,7 +5,7 @@ import os,shutil from waflib import Task,Utils,Errors,Node from waflib.Configure import conf -from waflib.TaskGen import feature,before_method,after_method +from waflib.TaskGen import feature,before_method,after_method,taskgen_method from waflib.Tools import ccroot ccroot.USELIB_VARS['javac']=set(['CLASSPATH','JAVACFLAGS']) SOURCE_RE='**/*.java' @@ -65,11 +65,28 @@ def apply_java(self): names=[x.srcpath()for x in tsk.srcdir] if names: tsk.env.append_value('JAVACFLAGS',['-sourcepath',names]) +@taskgen_method +def java_use_rec(self,name,**kw): + if name in self.tmp_use_seen: + return + self.tmp_use_seen.append(name) + try: + y=self.bld.get_tgen_by_name(name) + except Errors.WafError: + self.uselib.append(name) + return + else: + y.post() + if hasattr(y,'jar_task'): + self.use_lst.append(y.jar_task.outputs[0].abspath()) + for x in self.to_list(getattr(y,'use',[])): + self.java_use_rec(x) @feature('javac') @before_method('propagate_uselib_vars') @after_method('apply_java') def use_javac_files(self): - lst=[] + self.use_lst=[] + self.tmp_use_seen=[] self.uselib=self.to_list(getattr(self,'uselib',[])) names=self.to_list(getattr(self,'use',[])) get=self.bld.get_tgen_by_name @@ -81,12 +98,14 @@ def use_javac_files(self): else: y.post() if hasattr(y,'jar_task'): - lst.append(y.jar_task.outputs[0].abspath()) + self.use_lst.append(y.jar_task.outputs[0].abspath()) self.javac_task.set_run_after(y.jar_task) else: for tsk in y.tasks: self.javac_task.set_run_after(tsk) - self.env.append_value('CLASSPATH',lst) + if getattr(self,'recurse_use',False)or self.bld.env.RECURSE_JAVA: + self.java_use_rec(x) + self.env.append_value('CLASSPATH',self.use_lst) @feature('javac') @after_method('apply_java','propagate_uselib_vars','use_javac_files') def set_classpath(self): diff --git a/waflib/Tools/md5_tstamp.py b/waflib/Tools/md5_tstamp.py index bb7a772..0d0faa0 100644 --- a/waflib/Tools/md5_tstamp.py +++ b/waflib/Tools/md5_tstamp.py @@ -17,7 +17,7 @@ def h_file(self): else: if stat.S_ISDIR(st[stat.ST_MODE]): raise IOError('Not a file') - ret=Utils.md5(str((st.st_mtime,st.st_size))).digest() + ret=Utils.md5(str((st.st_mtime,st.st_size)).encode()).digest() cache[filename]=(st.st_mtime,ret) return ret h_file.__doc__=Node.Node.h_file.__doc__ diff --git a/waflib/Tools/msvc.py b/waflib/Tools/msvc.py index 522e6e2..662fa61 100644 --- a/waflib/Tools/msvc.py +++ b/waflib/Tools/msvc.py @@ -118,7 +118,7 @@ echo LIB=%%LIB%%;%%LIBPATH%% if conf.logger: conf.logger.error(st) conf.fatal('msvc: Unicode error - check the code page?') - except Exception ,e: + except Exception as e: Logs.debug('msvc: get_msvc_version: %r %r %r -> failure %s',compiler,version,target,str(e)) conf.fatal('msvc: cannot run the compiler in get_msvc_version (run with -v to display errors)') else: @@ -304,7 +304,7 @@ def gather_vswhere_versions(conf,versions): args=[vswhere,'-products','*','-legacy','-format','json'] try: txt=conf.cmd_and_log(args) - except Errors.WafError ,e: + except Errors.WafError as e: Logs.debug('msvc: vswhere.exe failed %s',e) return if sys.version_info[0]<3: diff --git a/waflib/Tools/python.py b/waflib/Tools/python.py index 3b7947f..f41f15c 100644 --- a/waflib/Tools/python.py +++ b/waflib/Tools/python.py @@ -211,6 +211,8 @@ def check_python_headers(conf,features='pyembed pyext'): num='.'.join(env.PYTHON_VERSION.split('.')[:2]) conf.find_program([''.join(pybin)+'-config','python%s-config'%num,'python-config-%s'%num,'python%sm-config'%num],var='PYTHON_CONFIG',msg="python-config",mandatory=False) if env.PYTHON_CONFIG: + if conf.env.HAVE_PYTHON_H: + return all_flags=[['--cflags','--libs','--ldflags']] if sys.hexversion<0x2070000: all_flags=[[k]for k in all_flags[0]] diff --git a/waflib/Tools/waf_unit_test.py b/waflib/Tools/waf_unit_test.py index af07b44..fde877d 100644 --- a/waflib/Tools/waf_unit_test.py +++ b/waflib/Tools/waf_unit_test.py @@ -122,7 +122,7 @@ class utest(Task.Task): self.ut_exec=shlex.split(ut_cmd%' '.join(self.ut_exec)) return self.exec_command(self.ut_exec) def exec_command(self,cmd,**kw): - Logs.debug('runner: %r',cmd) + self.generator.bld.log_command(cmd,kw) if getattr(Options.options,'dump_test_scripts',False): script_code=SCRIPT_TEMPLATE%{'python':sys.executable,'env':self.get_test_env(),'cwd':self.get_cwd().abspath(),'cmd':cmd} script_file=self.inputs[0].abspath()+'_run.py' diff --git a/waflib/Utils.py b/waflib/Utils.py index a62daab..273ebb0 100644 --- a/waflib/Utils.py +++ b/waflib/Utils.py @@ -33,9 +33,14 @@ try: from hashlib import md5 except ImportError: try: - from md5 import md5 + from hashlib import sha1 as md5 except ImportError: pass +else: + try: + md5().digest() + except ValueError: + from hashlib import sha1 as md5 try: import threading except ImportError: @@ -49,7 +54,7 @@ except ImportError: def release(self): pass threading.Lock=threading.Thread=Lock -SIG_NIL='SIG_NIL_SIG_NIL_' +SIG_NIL='SIG_NIL_SIG_NIL_'.encode() O644=420 O755=493 rot_chr=['\\','|','/','-'] @@ -134,7 +139,7 @@ class lazy_generator(object): it=self.it=self.fun(*self.params) return next(it) next=__next__ -is_win32=os.sep=='\\'or sys.platform=='win32' +is_win32=os.sep=='\\'or sys.platform=='win32'or os.name=='nt' def readf(fname,m='r',encoding='latin-1'): if sys.hexversion>0x3000000 and not'b'in m: m+='b' @@ -331,7 +336,7 @@ def check_dir(path): if not os.path.isdir(path): try: os.makedirs(path) - except OSError ,e: + except OSError as e: if not os.path.isdir(path): raise Errors.WafError('Cannot create the folder %r'%path,ex=e) def check_exe(name,env=None): @@ -365,7 +370,7 @@ def shell_escape(cmd): return cmd return' '.join(repr(x)if re_sh.search(x)else x for x in cmd) def h_list(lst): - return md5(repr(lst)).digest() + return md5(repr(lst).encode()).digest() def h_fun(fun): try: return fun.code @@ -521,7 +526,7 @@ def run_prefork_process(cmd,kwargs,cargs): if not proc: return run_regular_process(cmd,kwargs,cargs) proc.stdin.write(obj) - proc.stdin.write('\n') + proc.stdin.write('\n'.encode()) proc.stdin.flush() obj=proc.stdout.readline() if not obj: @@ -575,7 +580,7 @@ def run_regular_process(cmd,kwargs,cargs={}): out,err=(None,None) try: status=proc.wait(**cargs) - except TimeoutExpired ,e: + except TimeoutExpired as e: if kwargs.get('start_new_session')and hasattr(os,'killpg'): os.killpg(proc.pid,signal.SIGKILL) else: diff --git a/waflib/ansiterm.py b/waflib/ansiterm.py index 8de767d..1d8bc78 100644 --- a/waflib/ansiterm.py +++ b/waflib/ansiterm.py @@ -232,7 +232,7 @@ else: return struct.unpack("HHHH",fcntl.ioctl(FD,termios.TIOCGWINSZ,struct.pack("HHHH",0,0,0,0)))[1] try: fun() - except Exception ,e: + except Exception as e: pass else: get_term_cols=fun diff --git a/waflib/extras/compat15.py b/waflib/extras/compat15.py index 9e9a0c6..fb4e578 100644 --- a/waflib/extras/compat15.py +++ b/waflib/extras/compat15.py @@ -48,7 +48,7 @@ def cmd_output(cmd,**kw): try: p=Utils.subprocess.Popen(cmd,**kw) output=p.communicate()[0] - except OSError ,e: + except OSError as e: raise ValueError(str(e)) if p.returncode: if not silent: diff --git a/waflib/fixpy2.py b/waflib/fixpy2.py index 15f55f4..9aa8418 100644 --- a/waflib/fixpy2.py +++ b/waflib/fixpy2.py @@ -36,9 +36,9 @@ def subst(*k): return do_subst @subst('*') def r1(code): - code=code.replace(',e:',',e:') - code=code.replace("",'') - return code.replace('','') + code=code.replace('as e:',',e:') + code=code.replace(".decode(sys.stdout.encoding or'latin-1',errors='replace')",'') + return code.replace('.encode()','') @subst('Runner.py') def r4(code): return code.replace('next(self.biter)','self.biter.next()') diff --git a/waflib/processor.py b/waflib/processor.py index 1e36c5f..10f7c1b 100755 --- a/waflib/processor.py +++ b/waflib/processor.py @@ -38,7 +38,7 @@ def run(): exc.stderr=err raise exc ret=proc.returncode - except Exception ,e: + except Exception as e: exc_type,exc_value,tb=sys.exc_info() exc_lines=traceback.format_exception(exc_type,exc_value,tb) trace=str(cmd)+'\n'+''.join(exc_lines) diff --git a/wscript b/wscript index 4ed68be..6714aad 100644 --- a/wscript +++ b/wscript @@ -1,7 +1,7 @@ #! /usr/bin/env python3 # encoding: utf-8 -VERSION = '0.84.40' +VERSION = '0.84.41' APPNAME = 'oregano' top = '.' -- cgit v1.2.3