X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=853af753377762dee701bd1853fc5346e16cc3f4;hb=2537cd07f496d05574e5b997a5d415484c8710f6;hp=6a59df0bda57c06ac0c5b44cb6346d5b07e41289;hpb=f3117747ff1d38648805543429386d11a78836df;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 6a59df0bda..853af75337 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -8,26 +8,21 @@ # \author Bo Peng # Full author contact details are available in file CREDITS. -import sys, os, re, shutil, glob - - -class Tee: - ''' Writing to a Tee object will write to all file objects it keeps. - That is to say, writing to Tee(sys.stdout, open(logfile, 'w')) will - write to sys.stdout as well as a log file. - ''' - def __init__(self, *args): - self.files = args - - def write(self, data): - for f in self.files: - result = f.write(data) - return result - - def writelines(self, seq): - for i in seq: - self.write(i) +import sys, os, re, shutil, glob, logging +# set up logging +logging.basicConfig(level = logging.DEBUG, + format = '%(levelname)s: %(message)s', # ignore application name + filename = 'configure.log', + filemode = 'w') +# +# Add a handler to log to console +console = logging.StreamHandler() +console.setLevel(logging.INFO) # the console only print out general information +formatter = logging.Formatter('%(message)s') # only print out the message itself +console.setFormatter(formatter) +logger = logging.getLogger('LyX') +logger.addHandler(console) def writeToFile(filename, lines, append = False): " utility function: write or append lines to filename " @@ -45,6 +40,7 @@ def addToRC(lines): ''' if lines.strip() != '': writeToFile(outfile, lines + '\n', append = True) + logger.debug('Add to RC:\n' + lines + '\n\n') def removeFiles(filenames): @@ -54,7 +50,9 @@ def removeFiles(filenames): for file in filenames: try: os.remove(file) + logger.debug('Removing file %s' % file) except: + logger.debug('Failed to remove file %s' % file) pass @@ -73,7 +71,7 @@ def setEnviron(): NLS nuisances. Only set these to C if already set. These must not be set unconditionally because not all systems understand e.g. LANG=C (notably SCO). - Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! + Fixing LC_MESSAGES prevents Solaris sh from translating var values in set! Non-C LC_CTYPE values break the ctype check. ''' os.environ['LANG'] = os.getenv('LANG', 'C') @@ -89,8 +87,9 @@ def createDirectories(): if not os.path.isdir( dir ): try: os.mkdir( dir) + logger.debug('Create directory %s.' % dir) except: - print "Failed to create directory ", dir + logger.error('Failed to create directory %s.' % dir) sys.exit(1) @@ -110,10 +109,10 @@ def checkTeXPaths(): os.close(fd) latex_out = cmdOutput(r'latex "\nonstopmode\input{%s}"' % inpname) if 'Error' in latex_out: - print "configure: TeX engine needs posix-style paths in latex files" + logger.warning("configure: TeX engine needs posix-style paths in latex files") windows_style_tex_paths = 'false' else: - print "configure: TeX engine needs windows-style paths in latex files" + logger.info("configure: TeX engine needs windows-style paths in latex files") windows_style_tex_paths = 'true' removeFiles([tmpfname, logname, 'texput.log']) return windows_style_tex_paths @@ -148,15 +147,15 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): ''' # one rc entry for each progs plus not_found entry if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1: - print "rc entry should have one item or item for each prog and not_found." + logger.error("rc entry should have one item or item for each prog and not_found.") sys.exit(2) - print 'checking for ' + description + '...' + logger.info('checking for ' + description + '...') ## print '(' + ','.join(progs) + ')', for idx in range(len(progs)): # ac_prog may have options, ac_word is the command name ac_prog = progs[idx] ac_word = ac_prog.split(' ')[0] - print '+checking for "' + ac_word + '"... ', + msg = '+checking for "' + ac_word + '"... ' path = os.environ["PATH"].split(os.pathsep) + path extlist = [''] if os.environ.has_key("PATHEXT"): @@ -164,7 +163,7 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): for ac_dir in path: for ext in extlist: if os.path.isfile( os.path.join(ac_dir, ac_word + ext) ): - print ' yes' + logger.info(msg + ' yes') # write rc entries for this command if len(rc_entry) == 1: addToRC(rc_entry[0].replace('%%', ac_prog)) @@ -172,7 +171,68 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): addToRC(rc_entry[idx].replace('%%', ac_prog)) return [ac_dir, ac_word] # if not successful - print ' no' + logger.info(msg + ' no') + # write rc entries for 'not found' + if len(rc_entry) > 0: # the last one. + addToRC(rc_entry[-1].replace('%%', not_found)) + return ['', not_found] + + +## Searching some useful programs +def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], path = [], not_found = ''): + ''' + The same as checkProg, but additionally, all found programs will be added + as alt_rc_entries + ''' + # one rc entry for each progs plus not_found entry + if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1: + logger.error("rc entry should have one item or item for each prog and not_found.") + sys.exit(2) + # check if alt rcs are given + if len(alt_rc_entry) > 1 and len(alt_rc_entry) != len(rc_entry): + logger.error("invalid alt_rc_entry specification.") + sys.exit(2) + logger.info('checking for ' + description + '...') + ## print '(' + ','.join(progs) + ')', + found_prime = False + real_ac_dir = '' + real_ac_word = not_found + for idx in range(len(progs)): + # ac_prog may have options, ac_word is the command name + ac_prog = progs[idx] + ac_word = ac_prog.split(' ')[0] + msg = '+checking for "' + ac_word + '"... ' + path = os.environ["PATH"].split(os.pathsep) + path + extlist = [''] + if os.environ.has_key("PATHEXT"): + extlist = extlist + os.environ["PATHEXT"].split(os.pathsep) + found_alt = False + for ac_dir in path: + for ext in extlist: + if os.path.isfile( os.path.join(ac_dir, ac_word + ext) ): + logger.info(msg + ' yes') + # write rc entries for this command + if found_prime == False: + if len(rc_entry) == 1: + addToRC(rc_entry[0].replace('%%', ac_prog)) + elif len(rc_entry) > 1: + addToRC(rc_entry[idx].replace('%%', ac_prog)) + real_ac_dir = ac_dir + real_ac_word = ac_word + found_prime = True + if len(alt_rc_entry) == 1: + addToRC(alt_rc_entry[0].replace('%%', ac_prog)) + elif len(alt_rc_entry) > 1: + addToRC(alt_rc_entry[idx].replace('%%', ac_prog)) + found_alt = True + break + if found_alt: + break + if found_alt == False: + # if not successful + logger.info(msg + ' no') + if found_prime: + return [real_ac_dir, real_ac_word] # write rc entries for 'not found' if len(rc_entry) > 0: # the last one. addToRC(rc_entry[-1].replace('%%', not_found)) @@ -202,19 +262,20 @@ def checkLatex(dtl_tools): path, PPLATEX = checkProg('a DVI postprocessing program', ['pplatex $$i']) #----------------------------------------------------------------- path, PLATEX = checkProg('pLaTeX, the Japanese LaTeX', ['platex $$i']) - # check if PLATEX is pLaTeX2e - writeToFile('chklatex.ltx', ''' + if PLATEX != '': + # check if PLATEX is pLaTeX2e + writeToFile('chklatex.ltx', ''' \\nonstopmode \\@@end ''') - # run platex on chklatex.ltx and check result - if cmdOutput(PLATEX + ' chklatex.ltx').find('pLaTeX2e') != -1: - # We have the Japanese pLaTeX2e - addToRC(r'\converter platex dvi "%s" "latex"' % PLATEX) - LATEX = PLATEX - else: - PLATEX = '' - removeFiles(['chklatex.ltx', 'chklatex.log']) + # run platex on chklatex.ltx and check result + if cmdOutput(PLATEX + ' chklatex.ltx').find('pLaTeX2e') != -1: + # We have the Japanese pLaTeX2e + addToRC(r'\converter platex dvi "%s" "latex"' % PLATEX) + LATEX = PLATEX + else: + PLATEX = '' + removeFiles(['chklatex.ltx', 'chklatex.log']) #----------------------------------------------------------------- # use LATEX to convert from latex to dvi if PPLATEX is not available if PPLATEX == '': @@ -240,7 +301,7 @@ def checkLatex(dtl_tools): # valid latex2e return LATEX else: - print "Latex not usable (not LaTeX2e) " + logger.warning("Latex not usable (not LaTeX2e) ") # remove temporary files removeFiles(['chklatex.ltx', 'chklatex.log']) return '' @@ -254,6 +315,9 @@ def checkFormatEntries(dtl_tools): checkViewer('a FIG viewer and editor', ['xfig', 'jfig3-itext.jar', 'jfig3.jar'], rc_entry = [r'\Format fig fig FIG "" "%%" "%%" "vector"']) # + checkViewer('a Dia viewer and editor', ['dia'], + rc_entry = [r'\Format dia dia DIA "" "%%" "%%" "vector"']) + # checkViewer('a Grace viewer and editor', ['xmgrace'], rc_entry = [r'\Format agr agr Grace "" "%%" "%%" "vector"']) # @@ -285,9 +349,11 @@ def checkFormatEntries(dtl_tools): \Format dot dot "Graphviz Dot" "" "" "%%" "vector" \Format platex tex "LaTeX (pLaTeX)" "" "" "%%" "document" \Format literate nw NoWeb N "" "%%" "document" +\Format sweave Rnw "Sweave" S "" "%%" "document" \Format lilypond ly "LilyPond music" "" "" "%%" "vector" \Format latex tex "LaTeX (plain)" L "" "%%" "document" \Format pdflatex tex "LaTeX (pdflatex)" "" "" "%%" "document" +\Format xetex tex "LaTeX (XeTeX)" "" "" "%%" "document" \Format text txt "Plain text" a "" "%%" "document" \Format text2 txt "Plain text (pstotext)" "" "" "%%" "document" \Format text3 txt "Plain text (ps2ascii)" "" "" "%%" "document" @@ -303,17 +369,18 @@ def checkFormatEntries(dtl_tools): # #checkProg('a Postscript interpreter', ['gs'], # rc_entry = [ r'\ps_command "%%"' ]) - checkViewer('a Postscript previewer', ['kghostview', 'evince', 'gv', 'ghostview -swap'], + checkViewer('a Postscript previewer', ['kghostview', 'okular', 'evince', 'gv', 'ghostview -swap'], rc_entry = [r'''\Format eps eps EPS "" "%%" "" "vector" \Format ps ps Postscript t "%%" "" "document,vector"''']) # - checkViewer('a PDF previewer', ['kpdf', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \ + checkViewer('a PDF previewer', ['kpdf', 'okular', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \ 'gv', 'ghostview'], rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document,vector" \Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document,vector" -\Format pdf3 pdf "PDF (dvipdfm)" m "%%" "" "document,vector"''']) +\Format pdf3 pdf "PDF (dvipdfm)" m "%%" "" "document,vector" +\Format pdf4 pdf "PDF (XeTeX)" X "%%" "" "document,vector"''']) # - checkViewer('a DVI previewer', ['xdvi', 'kdvi'], + checkViewer('a DVI previewer', ['xdvi', 'kdvi', 'okular'], rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document,vector"']) if dtl_tools: # Windows only: DraftDVI @@ -336,6 +403,7 @@ def checkFormatEntries(dtl_tools): \Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document" \Format lyx14x lyx14 "LyX 1.4.x" "" "" "" "document" \Format lyx15x lyx15 "LyX 1.5.x" "" "" "" "document" +\Format lyx16x lyx16 "LyX 1.6.x" "" "" "" "document" \Format clyx cjklyx "CJK LyX 1.4.x (big5)" "" "" "" "document" \Format jlyx cjklyx "CJK LyX 1.4.x (euc-jp)" "" "" "" "document" \Format klyx cjklyx "CJK LyX 1.4.x (euc-kr)" "" "" "" "document" @@ -349,7 +417,7 @@ def checkFormatEntries(dtl_tools): \Format wmf wmf "Windows Metafile" "" "" "" "vector" \Format emf emf "Enhanced Metafile" "" "" "" "vector" \Format word doc "MS Word" W "" "" "document,vector" -\Format wordhtml html "HTML (MS Word)" "" "" "" "document" +\Format wordhtml html "HTML (MS Word)" "" "" "" "document" ''') @@ -357,6 +425,9 @@ def checkConverterEntries(): ''' Check all converters (\converter entries) ''' checkProg('the pdflatex program', ['pdflatex $$i'], rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex"' ]) + + checkProg('XeTeX', ['xelatex $$i'], + rc_entry = [ r'\converter xetex pdf4 "%%" "latex"' ]) ''' If we're running LyX in-place then tex2lyx will be found in ../src/tex2lyx. Add this directory to the PATH temporarily and @@ -377,6 +448,18 @@ def checkConverterEntries(): checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'], rc_entry = [r'''\converter literate latex "%%" "" \converter literate pdflatex "%%" ""''']) + # + checkProg('a Sweave -> LaTeX converter', ['R CMD Sweave $$i'], + rc_entry = [r'''\converter sweave latex "%%" "" +\converter sweave pdflatex "%%" ""''']) + # + path, elyx = checkProg('eLyXer converter', ['elyxer.py $$i $$o'], + rc_entry = [ r'\converter lyx html2 "%%" ""' ] ) + if elyx.find('elyxer.py') >= 0 : + addToRC(r'''\copier html2 "python -tt $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''') + checkViewer('an eLyXer previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'], + rc_entry = [r'\Format html2 html "HTML (eLyXer)" e "%%" "" "document"']) + # checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i', \ 'htmltolatex -input $$i -output $$o', 'java -jar htmltolatex.jar -input $$i -output $$o'], @@ -472,10 +555,9 @@ def checkConverterEntries(): # checkProg('a TGIF -> EPS/PPM converter', ['tgif'], rc_entry = [ - r'''\converter tgif eps "tgif -stdout -print -color -eps $$i > $$o" "" -\converter tgif ppm "tgif -stdout -print -color -ppm $$i > $$o" "" -\converter tgif png "tgif -stdout -print -color -png $$i > $$o" "" -\converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''', + r'''\converter tgif eps "tgif -print -color -eps -stdout $$i > $$o" "" +\converter tgif png "tgif -print -color -png -o $$d $$i" "" +\converter tgif pdf "tgif -print -color -pdf -stdout $$i > $$o" ""''', '']) # checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'], @@ -502,6 +584,12 @@ def checkConverterEntries(): checkProg('a Dot -> PDF converter', ['dot -Tpdf $$i -o $$o'], rc_entry = [ r'\converter dot pdf "%%" ""']) # + checkProg('a Dia -> PNG converter', ['dia -e $$o -t png $$i'], + rc_entry = [ r'\converter dia png "%%" ""']) + # + checkProg('a Dia -> EPS converter', ['dia -e $$o -t eps $$i'], + rc_entry = [ r'\converter dia eps "%%" ""']) + # # path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond']) if (lilypond != ''): @@ -510,16 +598,21 @@ def checkConverterEntries(): if match: version_number = match.groups()[0] version = version_number.split('.') - if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 6): + if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 11): + addToRC(r'''\converter lilypond eps "lilypond -dbackend=eps --ps $$i" "" +\converter lilypond png "lilypond -dbackend=eps --png $$i" ""''') + addToRC(r'\converter lilypond pdf "lilypond -dbackend=eps --pdf $$i" ""') + print '+ found LilyPond version %s.' % version_number + elif int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 6): addToRC(r'''\converter lilypond eps "lilypond -b eps --ps $$i" "" \converter lilypond png "lilypond -b eps --png $$i" ""''') if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 9): addToRC(r'\converter lilypond pdf "lilypond -b eps --pdf $$i" ""') - print '+ found LilyPond version %s.' % version_number + logger.info('+ found LilyPond version %s.' % version_number) else: - print '+ found LilyPond, but version %s is too old.' % version_number + logger.info('+ found LilyPond, but version %s is too old.' % version_number) else: - print '+ found LilyPond, but could not extract version number.' + logger.info('+ found LilyPond, but could not extract version number.') # checkProg('a Noteedit -> LilyPond converter', ['noteedit --export-lilypond $$i'], rc_entry = [ r'\converter noteedit lilypond "%%" ""', '']) @@ -539,6 +632,7 @@ def checkConverterEntries(): \converter lyx lyx13x "python -tt $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o" "" \converter lyx lyx14x "python -tt $$s/lyx2lyx/lyx2lyx -t 245 $$i > $$o" "" \converter lyx lyx15x "python -tt $$s/lyx2lyx/lyx2lyx -t 276 $$i > $$o" "" +\converter lyx lyx16x "python -tt $$s/lyx2lyx/lyx2lyx -t 345 $$i > $$o" "" \converter lyx clyx "python -tt $$s/lyx2lyx/lyx2lyx -c big5 -t 245 $$i > $$o" "" \converter lyx jlyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp -t 245 $$i > $$o" "" \converter lyx klyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr -t 245 $$i > $$o" "" @@ -550,13 +644,15 @@ def checkConverterEntries(): def checkDocBook(): ''' Check docbook ''' - path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook) or db2x scripts', ['sgmltools', 'db2dvi'], + path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook), db2x scripts or xsltproc', ['sgmltools', 'db2dvi', 'xsltproc'], rc_entry = [ r'''\converter docbook dvi "sgmltools -b dvi $$i" "" \converter docbook html "sgmltools -b html $$i" ""''', r'''\converter docbook dvi "db2dvi $$i" "" \converter docbook html "db2html $$i" ""''', r'''\converter docbook dvi "" "" +\converter docbook html "" ""''', + r'''\converter docbook dvi "" "" \converter docbook html "" ""''']) # if DOCBOOK != '': @@ -567,21 +663,22 @@ def checkDocBook(): def checkOtherEntries(): ''' entries other than Format and Converter ''' - checkProg('a *roff formatter', ['groff', 'nroff'], - rc_entry = [ - r'\plaintext_roff_command "groff -t -Tlatin1 $$FName"', - r'\plaintext_roff_command "tbl $$FName | nroff"', - r'\plaintext_roff_command ""' ]) checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], rc_entry = [ r'\chktex_command "%%"' ]) - checkProg('BibTeX', ['jbibtex', 'bibtex'], - rc_entry = [ r'\bibtex_command "%%"' ]) - checkProg('an index processor', ['texindy', 'makeindex -c -q'], - rc_entry = [ r'\index_command "%%"' ]) + checkProgAlternatives('BibTeX or alternative programs', ['bibtex', 'bibtex8', 'biber'], + rc_entry = [ r'\bibtex_command "%%"' ], + alt_rc_entry = [ r'\bibtex_alternatives "%%"' ]) + checkProg('JBibTeX, the Japanese BibTeX', ['jbibtex', 'bibtex'], + rc_entry = [ r'\jbibtex_command "%%"' ]) + checkProgAlternatives('available index processors', ['texindy', 'makeindex -c -q'], + rc_entry = [ r'\index_command "%%"' ], + alt_rc_entry = [ r'\index_alternatives "%%"' ]) + checkProg('an index processor appropriate to Japanese', ['mendex -c -q', 'makeindex -c -q'], + rc_entry = [ r'\jindex_command "%%"' ]) + checkProg('the splitindex processor', ['splitindex.pl', 'java splitindex', 'splitindex'], + rc_entry = [ r'\splitindex_command "%%"' ]) checkProg('a nomenclature processor', ['makeindex'], rc_entry = [ r'\nomencl_command "makeindex -s nomencl.ist"' ]) - checkProg('a spellchecker', ['ispell'], - rc_entry = [ r'\spell_command "%%"' ]) ## FIXME: OCTAVE is not used anywhere # path, OCTAVE = checkProg('Octave', ['octave']) ## FIXME: MAPLE is not used anywhere @@ -627,15 +724,15 @@ def processLayoutFile(file, bool_docbook): if opt == None: opt = classname return '"%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai) - print "Layout file without \DeclareXXClass line. " - sys.exit(2) + logger.warning("Layout file " + file + " has no \DeclareXXClass line. ") + return "" + - def checkLatexConfig(check_config, bool_docbook): ''' Explore the LaTeX configuration Return None (will be passed to sys.exit()) for success. ''' - print 'checking LaTeX configuration... ', + msg = 'checking LaTeX configuration... ' # if --without-latex-config is forced, or if there is no previous # version of textclass.lst, re-generate a default file. if not os.path.isfile('textclass.lst') or not check_config: @@ -644,8 +741,8 @@ def checkLatexConfig(check_config, bool_docbook): # # Then, generate a default textclass.lst. In case configure.py # fails, we still have something to start lyx. - print ' default values' - print '+checking list of textclasses... ' + logger.info(msg + ' default values') + logger.info('+checking list of textclasses... ') tx = open('textclass.lst', 'w') tx.write(''' # This file declares layouts and their associated definition files @@ -670,22 +767,23 @@ def checkLatexConfig(check_config, bool_docbook): # make sure the same class is not considered twice if foundClasses.count(cleanclass) == 0: # not found before foundClasses.append(cleanclass) - tx.write(processLayoutFile(file, bool_docbook)) + retval = processLayoutFile(file, bool_docbook) + if retval != "": + tx.write(retval) tx.close() - print '\tdone' + logger.info('\tdone') if not check_config: return None # the following will generate textclass.lst.tmp, and packages.lst.tmp else: - print '\tauto' + logger.info(msg + '\tauto') removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \ 'chkconfig.classes', 'chklayouts.tex']) rmcopy = False if not os.path.isfile( 'chkconfig.ltx' ): shutil.copyfile( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) rmcopy = True - writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n', - docbook_cmd) + writeToFile('wrap_chkconfig.ltx', '%s\n\\input{chkconfig.ltx}\n' % docbook_cmd) # Construct the list of classes to test for. # build the list of available layout files and convert it to commands # for chkconfig.ltx @@ -700,7 +798,7 @@ def checkLatexConfig(check_config, bool_docbook): if p1.search(line) == None: continue if line[0] != '#': - print "Wrong input layout file with line '" + line + logger.error("Wrong input layout file with line '" + line) sys.exit(3) testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) break @@ -717,7 +815,7 @@ def checkLatexConfig(check_config, bool_docbook): if not line: break; if re.match('^\+', line): - print line, + logger.info(line.strip()) # if the command succeeds, None will be returned ret = fout.close() # @@ -747,7 +845,7 @@ def checkLatexConfig(check_config, bool_docbook): def checkModulesConfig(): removeFiles(['lyxmodules.lst']) - print '+checking list of modules... ' + logger.info('+checking list of modules... ') tx = open('lyxmodules.lst', 'w') tx.write('''## This file declares modules and their associated definition files. ## It has been automatically generated by configure @@ -759,12 +857,14 @@ def checkModulesConfig(): for file in glob.glob( os.path.join('layouts', '*.module') ) + \ glob.glob( os.path.join(srcdir, 'layouts', '*.module' ) ) : # valid file? - print file + logger.info(file) if not os.path.isfile(file): continue - tx.write(processModuleFile(file, bool_docbook)) + retval = processModuleFile(file, bool_docbook) + if retval != "": + tx.write(retval) tx.close() - print '\tdone' + logger.info('\tdone') def processModuleFile(file, bool_docbook): @@ -829,25 +929,25 @@ def processModuleFile(file, bool_docbook): continue if modname != "": return '"%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl) - print "Module file without \DeclareLyXModule line. " - sys.exit(2) + logger.warning("Module file without \DeclareLyXModule line. ") + return "" def checkTeXAllowSpaces(): ''' Let's check whether spaces are allowed in TeX file names ''' tex_allows_spaces = 'false' if lyx_check_config: - print "Checking whether TeX allows spaces in file names... ", + msg = "Checking whether TeX allows spaces in file names... " writeToFile('a b.tex', r'\message{working^^J}' ) if os.name == 'nt': latex_out = cmdOutput(LATEX + r""" "\nonstopmode\input{\"a b\"}" """) else: latex_out = cmdOutput(LATEX + r""" '\nonstopmode\input{"a b"}' """) if 'working' in latex_out: - print 'yes' + logger.info(msg + 'yes') tex_allows_spaces = 'true' else: - print 'no' + logger.info(msg + 'no') tex_allows_spaces = 'false' addToRC(r'\tex_allows_spaces ' + tex_allows_spaces) removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) @@ -868,7 +968,6 @@ if __name__ == '__main__': rc_entries = '' lyx_keep_temps = False version_suffix = '' - logfile = 'configure.log' ## Parse the command line for op in sys.argv[1:]: # default shell/for list is $*, the options if op in [ '-help', '--help', '-h' ]: @@ -890,16 +989,12 @@ Options: print "Unknown option", op sys.exit(1) # - # set up log file for stdout and stderr - log = open(logfile, 'w') - sys.stdout = Tee(sys.stdout, log) - sys.stderr = Tee(sys.stderr, log) # check if we run from the right directory srcdir = os.path.dirname(sys.argv[0]) if srcdir == '': srcdir = '.' if not os.path.isfile( os.path.join(srcdir, 'chkconfig.ltx') ): - print "configure: error: cannot find chkconfig.ltx script" + logger.error("configure: error: cannot find chkconfig.ltx script") sys.exit(1) setEnviron() createDirectories()