X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=7d9c3b91c812c6cf54136e0bb09d5c89affb31a3;hb=1a4b549a534c70cc8c336b0baeeb523d07c9cb58;hp=0ab15c7a800f69614f165bc8f2c2ee1c5fb068a2;hpb=f3b66682f272645bef8f270f766cc6e70392da25;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 0ab15c7a80..7d9c3b91c8 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -13,6 +13,24 @@ 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) + + def writeToFile(filename, lines, append = False): " utility function: write or append lines to filename " if append: @@ -165,12 +183,21 @@ def checkViewer(description, progs, rc_entry = [], path = []): return checkProg(description, progs, rc_entry, path, not_found = 'auto') -def checkLatex(): - ''' Check latex, return lyx_check_config ''' +def checkDTLtools(): + ''' Check whether DTL tools are available (Windows only) ''' # Find programs! Returned path is not used now if ((os.name == 'nt' or sys.platform == 'cygwin') and checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): + dtl_tools = True + else: + dtl_tools = False + return dtl_tools + + +def checkLatex(dtl_tools): + ''' Check latex, return lyx_check_config ''' + if dtl_tools: # Windows only: DraftDVI converter_entry = r'''\converter latex dvi2 "%%" "latex" \converter dvi2 dvi "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""''' @@ -199,16 +226,16 @@ def checkLatex(): return '' -def checkFormatEntries(): +def checkFormatEntries(dtl_tools): ''' Check all formats (\Format entries) ''' checkViewer('a Tgif viewer and editor', ['tgif'], - rc_entry = [r'\Format tgif obj Tgif "" "%%" "%%" ""']) + rc_entry = [r'\Format tgif obj Tgif "" "%%" "%%" "vector"']) # checkViewer('a FIG viewer and editor', ['xfig'], - rc_entry = [r'\Format fig fig FIG "" "%%" "%%" ""']) + rc_entry = [r'\Format fig fig FIG "" "%%" "%%" "vector"']) # checkViewer('a Grace viewer and editor', ['xmgrace'], - rc_entry = [r'\Format agr agr Grace "" "%%" "%%" ""']) + rc_entry = [r'\Format agr agr Grace "" "%%" "%%" "vector"']) # checkViewer('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], rc_entry = [r'\Format fen fen FEN "" "%%" "%%" ""']) @@ -236,6 +263,7 @@ def checkFormatEntries(): \Format docbook sgml DocBook B "" "%%" "document" \Format docbook-xml xml "Docbook (XML)" "" "" "%%" "document" \Format literate nw NoWeb N "" "%%" "document" +\Format lilypond ly "LilyPond music" "" "" "%%" "vector" \Format latex tex "LaTeX (plain)" L "" "%%" "document" \Format linuxdoc sgml LinuxDoc x "" "%%" "document" \Format pdflatex tex "LaTeX (pdflatex)" "" "" "%%" "document" @@ -248,22 +276,20 @@ def checkFormatEntries(): #checkProg('a Postscript interpreter', ['gs'], # rc_entry = [ r'\ps_command "%%"' ]) checkViewer('a Postscript previewer', ['gv', 'ghostview -swap', 'kghostview'], - rc_entry = [r'''\Format eps eps EPS "" "%%" "" "" -\Format ps ps Postscript t "%%" "" "document"''']) + rc_entry = [r'''\Format eps eps EPS "" "%%" "" "vector" +\Format ps ps Postscript t "%%" "" "document,vector"''']) # checkViewer('a PDF previewer', ['acrobat', 'acroread', 'gv', 'ghostview', \ 'xpdf', 'kpdf', 'kghostview'], - rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document" -\Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document" -\Format pdf3 pdf "PDF (dvipdfm)" m "%%" "" "document"''']) + 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"''']) # checkViewer('a DVI previewer', ['xdvi', 'kdvi'], - rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document"']) - if ((os.name == 'nt' or sys.platform == 'cygwin') and - checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and - checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): + rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document,vector"']) + if dtl_tools: # Windows only: DraftDVI - addToRC(r'\Format dvi2 dvi DraftDVI "" "" "document"') + addToRC(r'\Format dvi2 dvi DraftDVI "" "" "document,vector"') # checkViewer('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], rc_entry = [r'\Format html html HTML H "%%" "" "document"']) @@ -277,8 +303,10 @@ def checkFormatEntries(): \Format pdftex pdftex_t PDFTEX "" "" "" "" \Format program "" Program "" "" "" "" \Format pstex pstex_t PSTEX "" "" "" "" -\Format sxw sxw "OpenOffice.Org Writer" O "" "" "document" -\Format word doc "MS Word" W "" "" "document" +\Format rtf rtf "Rich Text Format" "" "" "" "document,vector" +\Format sxw sxw "OpenOffice.Org Writer" O "" "" "document,vector" +\Format wmf wmf "Windows Meta File" "" "" "" "vector" +\Format word doc "MS Word" W "" "" "document,vector" \Format wordhtml html "MS Word (HTML)" "" "" "" "document" ''') @@ -297,15 +325,12 @@ def checkConverterEntries(): os.environ["PATH"] = os.path.join('..', 'src', 'tex2lyx') + \ os.pathsep + path_orig - checkProg('a LaTeX -> LyX converter', ['tex2lyx -f $$i $$o', \ - 'tex2lyx' + version_suffix + ' -f $$i $$o' ], - rc_entry = [ r'\converter latex lyx "%%" ""' ]) + checkProg('a LaTeX/Noweb -> LyX converter', ['tex2lyx', 'tex2lyx' + version_suffix], + rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" "" +\converter literate lyx "%% -n -f $$i $$o" ""''']) os.environ["PATH"] = path_orig - # - checkProg('a Noweb -> LyX converter', ['noweb2lyx' + version_suffix + ' $$i $$o'], path = ['./reLyX'], - rc_entry = [ r'\converter literate lyx "%%" ""' ]) # checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'], rc_entry = [ r'\converter literate latex "%%" ""' ]) @@ -322,8 +347,11 @@ def checkConverterEntries(): checkProg('an OpenOffice.org -> LaTeX converter', ['w2l -clean $$i'], rc_entry = [ r'\converter sxw latex "%%" ""' ]) # - checkProg('an LaTeX -> OpenOffice.org LaTeX converter', ['oolatex $$i', 'oolatex.sh $$i'], + checkProg('a LaTeX -> OpenOffice.org converter', ['oolatex $$i', 'oolatex.sh $$i'], rc_entry = [ r'\converter latex sxw "%%" "latex"' ]) + # On windows it is called latex2rt.exe + checkProg('a LaTeX -> RTF converter', ['latex2rtf -p -S -o $$o $$i', 'latex2rt -p -S -o $$o $$i'], + rc_entry = [ r'\converter latex rtf "%%" "needaux"' ]) # checkProg('a PS to PDF converter', ['ps2pdf13 $$i $$o'], rc_entry = [ r'\converter ps pdf "%%" ""' ]) @@ -370,6 +398,9 @@ def checkConverterEntries(): \converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''', '']) # + checkProg('a WMF -> EPS converter', ['wmf2eps -o $$o $$i'], + rc_entry = [ r'\converter wmf eps "%%" ""', '']) + # checkProg('a EPS -> PDF converter', ['epstopdf'], rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', '']) # @@ -385,6 +416,24 @@ def checkConverterEntries(): 'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'], rc_entry = [ r'\converter latex html "%%" "originaldir,needaux"' ]) # + path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond']) + if (lilypond != ''): + version_string = cmdOutput("lilypond --version") + match = re.match('GNU LilyPond (\S+)', version_string) + 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): + 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 + else: + print '+ found LilyPond, but version %s is too old.' % version_number + else: + print '+ found LilyPond, but could not extract version number.' + # # FIXME: no rc_entry? comment it out # checkProg('Image converter', ['convert $$i $$o']) # @@ -481,7 +530,7 @@ def processLayoutFile(file, bool_docbook, bool_linuxdoc): ''' classname = file.split(os.sep)[-1].split('.')[0] # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclearLaTeXClass[a,b,c]{article} - p = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') + p = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') for line in open(file).readlines(): res = p.search(line) if res != None: @@ -508,7 +557,7 @@ def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc): # This file declares layouts and their associated definition files # (include dir. relative to the place where this file is). # It contains only default values, since chkconfig.ltx could not be run -# for some reason. Run ./configure if you need to update it after a +# for some reason. Run ./configure.py if you need to update it after a # configuration change. ''') # build the list of available layout files and convert it to commands @@ -543,7 +592,7 @@ def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc): # Construct the list of classes to test for. # build the list of available layout files and convert it to commands # for chkconfig.ltx - p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') + p1 = re.compile(r'\Declare(LaTeX|DocBook)Class') testclasses = list() for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : @@ -603,7 +652,7 @@ def createLaTeXConfig(): writeToFile('packages.lst', ''' ### This file should contain the list of LaTeX packages that have been ### recognized by LyX. Unfortunately, since configure could not find -### your LaTeX2e program, the tests have not been run. Run ./configure +### your LaTeX2e program, the tests have not been run. Run ./configure.py ### if you need to update it after a configuration change. ''') print 'creating doc/LaTeXConfig.lyx' @@ -678,6 +727,7 @@ 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' ]: @@ -698,7 +748,11 @@ Options: else: 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 == '': @@ -709,17 +763,18 @@ Options: setEnviron() createDirectories() windows_style_tex_paths = checkTeXPaths() + dtl_tools = checkDTLtools() ## Write the first part of outfile writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure.py # script. It contains default settings that have been determined by # examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you -# want to customize LyX, make a copy of the file LYXDIR/lyxrc as -# ~/.lyx/lyxrc and edit this file instead. Any setting in lyxrc will +# want to customize LyX, use LyX' Preferences dialog or modify directly +# the "preferences" file instead. Any setting in that file will # override the values given here. ''') # check latex - LATEX = checkLatex() - checkFormatEntries() + LATEX = checkLatex(dtl_tools) + checkFormatEntries(dtl_tools) checkConverterEntries() (chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc() (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()