diff options
Diffstat (limited to 'src/engine/SCons/Tool')
| -rw-r--r-- | src/engine/SCons/Tool/dvi.py | 3 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/dvipdf.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/intelc.py | 16 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/latex.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/msvc.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/msvs.py | 15 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/msvs.xml | 28 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/pdf.py | 3 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/pdftex.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/tex.py | 56 |
10 files changed, 88 insertions, 45 deletions
diff --git a/src/engine/SCons/Tool/dvi.py b/src/engine/SCons/Tool/dvi.py index 1be710c..fce9850 100644 --- a/src/engine/SCons/Tool/dvi.py +++ b/src/engine/SCons/Tool/dvi.py @@ -47,7 +47,8 @@ def generate(env): DVIBuilder = SCons.Builder.Builder(action = {}, source_scanner = SCons.Tool.LaTeXScanner, suffix = '.dvi', - emitter = {}) + emitter = {}, + source_ext_match = None) env['BUILDERS']['DVI'] = DVIBuilder diff --git a/src/engine/SCons/Tool/dvipdf.py b/src/engine/SCons/Tool/dvipdf.py index bade8ff..51dfae1 100644 --- a/src/engine/SCons/Tool/dvipdf.py +++ b/src/engine/SCons/Tool/dvipdf.py @@ -66,7 +66,7 @@ def generate(env): env['DVIPDF'] = 'dvipdf' env['DVIPDFFLAGS'] = SCons.Util.CLVar('') - env['DVIPDFCOM'] = '$DVIPDF $DVIPDFFLAGS $SOURCES $TARGET' + env['DVIPDFCOM'] = '$DVIPDF $DVIPDFFLAGS $SOURCE $TARGET' # Deprecated synonym. env['PDFCOM'] = ['$DVIPDFCOM'] diff --git a/src/engine/SCons/Tool/intelc.py b/src/engine/SCons/Tool/intelc.py index b247a38..e668bf0 100644 --- a/src/engine/SCons/Tool/intelc.py +++ b/src/engine/SCons/Tool/intelc.py @@ -71,12 +71,18 @@ def linux_ver_normalize(vstr): is greater than 60 it's an old-style number and otherwise new-style. Always returns an old-style float like 80 or 90 for compatibility with Windows. Shades of Y2K!""" - f = float(vstr) - if is_windows: - return f + # Check for version number like 9.1.026: return 91.026 + m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)', vstr) + if m: + vmaj,vmin,build = m.groups() + return float(vmaj) * 10 + float(vmin) + float(build) / 1000.; else: - if f < 60: return f * 10.0 - else: return f + f = float(vstr) + if is_windows: + return f + else: + if f < 60: return f * 10.0 + else: return f def check_abi(abi): """Check for valid ABI (application binary interface) name, diff --git a/src/engine/SCons/Tool/latex.py b/src/engine/SCons/Tool/latex.py index 5bd21d9..72371b3 100644 --- a/src/engine/SCons/Tool/latex.py +++ b/src/engine/SCons/Tool/latex.py @@ -64,7 +64,7 @@ def generate(env): env['LATEX'] = 'latex' env['LATEXFLAGS'] = SCons.Util.CLVar('') - env['LATEXCOM'] = '$LATEX $LATEXFLAGS $SOURCES' + env['LATEXCOM'] = '$LATEX $LATEXFLAGS $SOURCE' env['LATEXRETRIES'] = 3 def exists(env): diff --git a/src/engine/SCons/Tool/msvc.py b/src/engine/SCons/Tool/msvc.py index 80c5896..86cde78 100644 --- a/src/engine/SCons/Tool/msvc.py +++ b/src/engine/SCons/Tool/msvc.py @@ -296,7 +296,7 @@ def _get_msvc8_path(path, version, platform, suite): "Unable to retrieve the %s path from MS VC++."%path # collect some useful information for later expansions... - paths = SCons.Tool.msvs.get_msvs_install_dirs(version) + paths = SCons.Tool.msvs.get_msvs_install_dirs(version, suite) # expand the directory path variables that we support. If there # is a variable we don't support, then replace that entry with @@ -474,7 +474,7 @@ def _get_msvc8_default_paths(env, version, suite, use_mfc_dirs): lib_paths = [] include_paths = [] try: - paths = SCons.Tool.msvs.get_msvs_install_dirs(version) + paths = SCons.Tool.msvs.get_msvs_install_dirs(version, suite) MVSdir = paths['VSINSTALLDIR'] except (KeyError, SCons.Util.RegError, SCons.Errors.InternalError): if os.environ.has_key('VSCOMNTOOLS'): diff --git a/src/engine/SCons/Tool/msvs.py b/src/engine/SCons/Tool/msvs.py index e17dcfd..e8aaf83 100644 --- a/src/engine/SCons/Tool/msvs.py +++ b/src/engine/SCons/Tool/msvs.py @@ -1295,7 +1295,7 @@ def get_visualstudio8_suites(): except SCons.Util.RegError: pass - # Detect Expression edition + # Detect Express edition try: idk = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, r'Software\Microsoft\VCExpress\8.0') @@ -1316,7 +1316,7 @@ def is_msvs_installed(): except (SCons.Util.RegError, SCons.Errors.InternalError): return 0 -def get_msvs_install_dirs(version = None): +def get_msvs_install_dirs(version = None, vs8suite = None): """ Get installed locations for various msvc-related products, like the .NET SDK and the Platform SDK. @@ -1336,9 +1336,14 @@ def get_msvs_install_dirs(version = None): K = 'Software\\Microsoft\\VisualStudio\\' + str(version_num) if (version_num >= 8.0): - try: - SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K ) - except SCons.Util.RegError: + if vs8suite == None: + # We've been given no guidance about which Visual Studio 8 + # suite to use, so attempt to autodetect. + suites = get_visualstudio8_suites() + if suites: + vs8suite = suites[0] + + if vs8suite == 'EXPRESS': K = 'Software\\Microsoft\\VCExpress\\' + str(version_num) # vc++ install dir diff --git a/src/engine/SCons/Tool/msvs.xml b/src/engine/SCons/Tool/msvs.xml index 56180b0..c16beaa 100644 --- a/src/engine/SCons/Tool/msvs.xml +++ b/src/engine/SCons/Tool/msvs.xml @@ -131,17 +131,17 @@ barlocalincs = ['StdAfx.h'] barresources = ['bar.rc','resource.h'] barmisc = ['bar_readme.txt'] -dll = local.SharedLibrary(target = 'bar.dll', - source = barsrcs) - -local.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], - srcs = barsrcs, - incs = barincs, - localincs = barlocalincs, - resources = barresources, - misc = barmisc, - buildtarget = dll, - variant = 'Release') +dll = env.SharedLibrary(target = 'bar.dll', + source = barsrcs) + +env.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], + srcs = barsrcs, + incs = barincs, + localincs = barlocalincs, + resources = barresources, + misc = barmisc, + buildtarget = dll, + variant = 'Release') </example> </summary> </builder> @@ -193,9 +193,9 @@ not the source files used to build the solution file. Example Usage: <example> -local.MSVSSolution(target = 'Bar' + env['MSVSSOLUTIONSUFFIX'], - projects = ['bar' + env['MSVSPROJECTSUFFIX']], - variant = 'Release') +env.MSVSSolution(target = 'Bar' + env['MSVSSOLUTIONSUFFIX'], + projects = ['bar' + env['MSVSPROJECTSUFFIX']], + variant = 'Release') </example> </summary> </builder> diff --git a/src/engine/SCons/Tool/pdf.py b/src/engine/SCons/Tool/pdf.py index b4bfc17..0f6468b 100644 --- a/src/engine/SCons/Tool/pdf.py +++ b/src/engine/SCons/Tool/pdf.py @@ -44,7 +44,8 @@ def generate(env): source_scanner = SCons.Tool.LaTeXScanner, prefix = '$PDFPREFIX', suffix = '$PDFSUFFIX', - emitter = {}) + emitter = {}, + source_ext_match = None) env['BUILDERS']['PDF'] = PDFBuilder env['PDFPREFIX'] = '' diff --git a/src/engine/SCons/Tool/pdftex.py b/src/engine/SCons/Tool/pdftex.py index 075315d..ddf5a23 100644 --- a/src/engine/SCons/Tool/pdftex.py +++ b/src/engine/SCons/Tool/pdftex.py @@ -87,12 +87,12 @@ def generate(env): # Duplicate from latex.py. If latex.py goes away, then this is still OK. env['PDFLATEX'] = 'pdflatex' env['PDFLATEXFLAGS'] = SCons.Util.CLVar('') - env['PDFLATEXCOM'] = '$PDFLATEX $PDFLATEXFLAGS $SOURCES' + env['PDFLATEXCOM'] = '$PDFLATEX $PDFLATEXFLAGS $SOURCE' env['LATEXRETRIES'] = 3 env['BIBTEX'] = 'bibtex' env['BIBTEXFLAGS'] = SCons.Util.CLVar('') - env['BIBTEXCOM'] = '$BIBTEX $BIBTEXFLAGS $SOURCES' + env['BIBTEXCOM'] = '$BIBTEX $BIBTEXFLAGS ${SOURCE.base}' def exists(env): return env.Detect('pdftex') diff --git a/src/engine/SCons/Tool/tex.py b/src/engine/SCons/Tool/tex.py index 1ca40f2..d613958 100644 --- a/src/engine/SCons/Tool/tex.py +++ b/src/engine/SCons/Tool/tex.py @@ -42,6 +42,10 @@ import SCons.Node import SCons.Node.FS import SCons.Util +warning_rerun_re = re.compile("^LaTeX Warning:.*Rerun", re.MULTILINE) +undefined_references_re = re.compile("^LaTeX Warning:.*undefined references", re.MULTILINE) +openout_aux_re = re.compile(r"\\openout.*`(.*\.aux)'") + # An Action sufficient to build any generic tex file. TeXAction = None @@ -62,28 +66,36 @@ def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None basename, ext = SCons.Util.splitext(str(target[0])) # Run LaTeX once to generate a new aux file. - XXXLaTeXAction(target,source,env) + XXXLaTeXAction(target, source, env) # Decide if various things need to be run, or run again. We check # for the existence of files before opening them--even ones like the # aux file that TeX always creates--to make it possible to write tests # with stubs that don't necessarily generate all of the same files. + # Read the log file to find all .aux files + logfilename = basename + '.log' + auxfiles = [] + if os.path.exists(logfilename): + content = open(logfilename, "rb").read() + auxfiles = openout_aux_re.findall(content) + # Now decide if bibtex will need to be run. - auxfilename = basename + '.aux' - if os.path.exists(auxfilename): - content = open(auxfilename, "rb").read() - if string.find(content, "bibdata") != -1: - bibfile = env.fs.File(basename) - BibTeXAction(None,bibfile,env) + for auxfilename in auxfiles: + if os.path.exists(auxfilename): + content = open(auxfilename, "rb").read() + if string.find(content, "bibdata") != -1: + bibfile = env.fs.File(basename) + BibTeXAction(None, bibfile, env) + break # Now decide if makeindex will need to be run. idxfilename = basename + '.idx' if os.path.exists(idxfilename): idxfile = env.fs.File(basename) # TODO: if ( idxfile has changed) ... - MakeIndexAction(None,idxfile,env) - LaTeXAction(target,source,env) + MakeIndexAction(None, idxfile, env) + XXXLaTeXAction(target, source, env) # Now decide if latex needs to be run yet again. logfilename = basename + '.log' @@ -91,9 +103,10 @@ def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None if not os.path.exists(logfilename): break content = open(logfilename, "rb").read() - if not re.search("^LaTeX Warning:.*Rerun",content,re.MULTILINE) and not re.search("^LaTeX Warning:.*undefined references",content,re.MULTILINE): + if not warning_rerun_re.search(content) and \ + not undefined_references_re.search(content): break - XXXLaTeXAction(target,source,env) + XXXLaTeXAction(target, source, env) return 0 def LaTeXAuxAction(target = None, source= None, env=None): @@ -123,6 +136,23 @@ def tex_emitter(target, source, env): base = SCons.Util.splitext(str(source[0]))[0] target.append(base + '.aux') target.append(base + '.log') + for f in source: + content = f.get_contents() + if string.find(content, r'\makeindex') != -1: + target.append(base + '.ilg') + target.append(base + '.ind') + target.append(base + '.idx') + if string.find(content, r'\bibliography') != -1: + target.append(base + '.bbl') + target.append(base + '.blg') + + # read log file to get all .aux files + logfilename = base + '.log' + if os.path.exists(logfilename): + content = open(logfilename, "rb").read() + aux_files = openout_aux_re.findall(content) + target.extend(filter(lambda f, b=base+'.aux': f != b, aux_files)) + return (target, source) TeXLaTeXAction = None @@ -149,7 +179,7 @@ def generate(env): # Define an action to run MakeIndex on a file. global MakeIndexAction if MakeIndexAction is None: - MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXOMSTR") + MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXCOMSTR") global TeXLaTeXAction if TeXLaTeXAction is None: @@ -174,7 +204,7 @@ def generate(env): env['BIBTEX'] = 'bibtex' env['BIBTEXFLAGS'] = SCons.Util.CLVar('') - env['BIBTEXCOM'] = '$BIBTEX $BIBTEXFLAGS $SOURCE' + env['BIBTEXCOM'] = '$BIBTEX $BIBTEXFLAGS ${SOURCE.base}' env['MAKEINDEX'] = 'makeindex' env['MAKEINDEXFLAGS'] = SCons.Util.CLVar('') |
