diff --git a/lib/configure.py b/lib/configure.py index 6e71430229..416e9a3b8c 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -4,23 +4,14 @@ # This file is part of LyX, the document processor. # Licence details can be found in the file COPYING. -# author Bo Peng +# \author Bo Peng # Full author contact details are available in file CREDITS. # This is an experimental version of the configure script, written -# in Python. It is not yet used by LyX but aims to replace the -# configure script eventually. Part of the goal to reduce the -# number of scripting languages used by an official LyX distribution -# to just one --- Python. +# in Python. import sys, os, re, shutil, glob -outfile = 'lyxrc.defaults' -rc_entries = '' -lyx_check_config = True -lyx_keep_temps = False -srcdir = '' -version_suffix = '' def writeToFile(filename, lines, append = False): " utility function: write or append lines to filename " @@ -31,6 +22,7 @@ def writeToFile(filename, lines, append = False): file.write(lines) file.close() + def addToRC(lines): ''' utility function: shortcut for appending lines to outfile add newline at the end of lines. @@ -38,6 +30,7 @@ def addToRC(lines): if lines.strip() != '': writeToFile(outfile, lines + '\n', append = True) + def removeFiles(filenames): '''utility function: 'rm -f' ignore erroes when file does not exist, or is a directory. @@ -48,6 +41,7 @@ def removeFiles(filenames): except: pass + def cmdOutput(cmd): '''utility function: run a command and get its output as a string cmd: command to run @@ -57,96 +51,57 @@ def cmdOutput(cmd): fout.close() return output.strip() -## Parse the command line -for op in sys.argv[1:]: # default shell/for list is $*, the options - if op in [ '-help', '--help', '-h' ]: - print '''Usage: configure [options] -Options: - --help show this help lines - --keep-temps keep temporary files (for debug. purposes) - --without-latex-config do not run LaTeX to determine configuration - --with-version-suffix=suffix suffix of binary installed files -''' - sys.exit(0) - elif op == '--without-latex-config': - lyx_check_config = False - elif op == '--keep-temps': - lyx_keep_temps = True - elif op[0:22] == '--with-version-suffix=': # never mind if op is not long enough - version_suffix = op[22:] - else: - print "Unknown option", op - sys.exit(1) -## Checking for some echo oddities (ignored) -## The original script defines ac_n, ac_t and ac_c for -## tab, newline etc, I just use python's print output. +def setEnviron(): + ''' I do not really know why this is useful, but we might as well keep it. + 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'! + Non-C LC_CTYPE values break the ctype check. + ''' + os.environ['LANG'] = os.getenv('LANG', 'C') + os.environ['LC'] = os.getenv('LC_ALL', 'C') + os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C') + os.environ['LC_CTYPE'] = os.getenv('LC_CTYPE', 'C') -## I do not really know why this is useful, but we might as well keep it. -### 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'! -### Non-C LC_CTYPE values break the ctype check. -## -os.environ['LANG'] = os.getenv('LANG', 'C') -os.environ['LC'] = os.getenv('LC_ALL', 'C') -os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C') -os.environ['LC_CTYPE'] = os.getenv('LC_CTYPE', 'C') -## Guess the directory in which configure is located. -ac_prog = sys.argv[0] -srcdir = os.path.dirname(ac_prog) -if srcdir == '': - srcdir = '.' -if not os.path.isfile( os.path.join(srcdir, 'chkconfig.ltx') ): - print "configure: error: cannot find chkconfig.ltx script" - sys.exit(1) +def createDirectories(): + ''' Create the build directories if necessary ''' + for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \ + 'layouts', 'scripts', 'templates', 'ui' ]: + if not os.path.isdir( dir ): + try: + os.mkdir( dir) + except: + print "Failed to create directory ", dir + sys.exit(1) -## Adjust PATH for Win32 (Cygwin) -# -use_cygwin_path_fix = '' -if sys.platform == 'cygwin': - from tempfile import mkstemp - fd, tmpfname = mkstemp(suffix='.ltx') - os.write(fd, r''' + +def checkCygwinPath(): + ''' Adjust PATH for Win32 (Cygwin) ''' + if sys.platform == 'cygwin': + from tempfile import mkstemp + fd, tmpfname = mkstemp(suffix='.ltx') + os.write(fd, r''' \documentstyle{article} \begin{document}\end{document} -''') - os.close(fd) - inpname = cmdOutput('cygpath -w ' + tmpfname).replace('\\', '/') - # a wrapper file - wfd, wtmpfname = mkstemp(suffix='.ltx') - os.write(wfd, r'\input{' + inpname + '}' ) - os.close(wfd) - if cmdOutput('latex ' + wtmpfname).find('Error') != -1: - print "configure: cygwin detected; path correction" - srcdir = cmdOutput('cygpath -w ' + srcdir).replace(r'\\', '') - print "srcdir = ", srcdir - use_cygwin_path_fix = 'true' - else: - print "configure: cygwin detected; path correction is not needed" - use_cygwin_path_fix = 'false' - removeFiles( [ tmpfname, wtmpfname ]) + ''') + os.close(fd) + inpname = cmdOutput('cygpath -w ' + tmpfname).replace('\\', '/') + # a wrapper file + wfd, wtmpfname = mkstemp(suffix='.ltx') + os.write(wfd, r'\input{' + inpname + '}' ) + os.close(wfd) + if cmdOutput('latex ' + wtmpfname).find('Error') != -1: + print "configure: cygwin detected; path correction" + srcdir = cmdOutput('cygpath -w ' + srcdir).replace(r'\\', '') + print "srcdir = ", srcdir + addToRC(r'\cygwin_path_fix_needed true') + else: + print "configure: cygwin detected; path correction is not needed" + removeFiles( [ tmpfname, wtmpfname ]) -#### Create the build directories if necessary -for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \ - 'layouts', 'scripts', 'templates', 'ui' ]: - if not os.path.isdir( dir ): - try: - os.mkdir( dir) - except: - print "Failed to create directory ", dir - sys.exit(1) - -## Write the first part of outfile -writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure -# 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 -# override the values given here. -''') ## Searching some useful programs def checkProg(description, progs, rc_entry = [], path = [] ): @@ -200,47 +155,50 @@ def checkProg(description, progs, rc_entry = [], path = [] ): addToRC(rc_entry[-1].replace('%%', 'none')) return ['', 'none'] -# Find programs! Returned path is not used now -path, LATEX = checkProg( 'a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'], - rc_entry = [ r'\converter latex dvi "%%" "latex"' ] ) -# no latex -lyx_check_config = False -if LATEX != 'none': - # Check if latex is usable - writeToFile('chklatex.ltx', ''' +def checkLatex(): + ''' Check latex, return lyx_check_config ''' + # Find programs! Returned path is not used now + path, LATEX = checkProg( 'a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'], + rc_entry = [ r'\converter latex dvi "%%" "latex"' ] ) + # no latex + if LATEX != 'none': + # Check if latex is usable + writeToFile('chklatex.ltx', ''' \\nonstopmode\\makeatletter \\ifx\\undefined\\documentclass\\else \\message{ThisIsLaTeX2e} \\fi \\@@end ''') - # run latex on chklatex.ltx and check result - if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1: - lyx_check_config = True - else: - print "Latex not usable (not LaTeX2e) " - # remove temporary files - removeFiles(['chklatex.ltx', 'chklatex.log']) + # run latex on chklatex.ltx and check result + if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1: + # valid latex2e + return LATEX + else: + print "Latex not usable (not LaTeX2e) " + # remove temporary files + removeFiles(['chklatex.ltx', 'chklatex.log']) + return '' -checkProg('the pdflatex program', ['pdflatex $$i'], - rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex"' ]) -checkProg('a Tgif viewer and editor', ['tgif'], - rc_entry = [ r'\Format tgif obj Tgif "" "%%" "%%"']) - -checkProg('a FIG viewer and editor', ['xfig'], - rc_entry = [ r'\Format fig fig FIG "" "%%" "%%"'] ) - -checkProg('a Grace viewer and editor', ['xmgrace'], - rc_entry = [ r'\Format agr agr Grace "" "%%" "%%"'] ) - -checkProg('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], - rc_entry = [ r'\Format fen fen FEN "" "%%" "%%"' ]) - -path, iv = checkProg('a raster image viewer', ['xv', 'kview', 'gimp']) -path, ie = checkProg('a raster image editor', ['gimp']) -addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" +def checkFormatEntries(): + ''' Check all formats (\Format entries) ''' + checkProg('a Tgif viewer and editor', ['tgif'], + rc_entry = [ r'\Format tgif obj Tgif "" "%%" "%%"']) + # + checkProg('a FIG viewer and editor', ['xfig'], + rc_entry = [ r'\Format fig fig FIG "" "%%" "%%"'] ) + # + checkProg('a Grace viewer and editor', ['xmgrace'], + rc_entry = [ r'\Format agr agr Grace "" "%%" "%%"'] ) + # + checkProg('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], + rc_entry = [ r'\Format fen fen FEN "" "%%" "%%"' ]) + # + path, iv = checkProg('a raster image viewer', ['xv', 'kview', 'gimp']) + path, ie = checkProg('a raster image editor', ['gimp']) + addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" \Format gif gif GIF "" "%s" "%s" \Format jpg jpg JPEG "" "%s" "%s" \Format pbm pbm PBM "" "%s" "%s" @@ -250,12 +208,11 @@ addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" \Format tiff tif TIFF "" "%s" "%s" \Format xbm xbm XBM "" "%s" "%s" \Format xpm xpm XPM "" "%s" "%s"''' % \ -(iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) ) - -checkProg('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ - 'nedit', 'gedit', 'notepad'], - rc_entry = [ - r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" + (iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) ) + # + checkProg('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ + 'nedit', 'gedit', 'notepad'], + rc_entry = [ r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" \Format asciiimage asc "Plain text (image)" "" "" "%%" \Format asciixfig asc "Plain text (Xfig output)" "" "" "%%" \Format dateout tmp "date (output)" "" "" "%%" @@ -267,146 +224,27 @@ checkProg('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ \Format pdflatex tex "TeX (pdflatex)" "" "" "%%" \Format text txt "Plain text" a "" "%%" \Format textparagraph txt "Plain text (paragraphs)" "" "" "%%"''' ]) - -checkProg('a LaTeX -> LyX converter', [os.path.join('..','src','tex2lyx','tex2lyx') + ' -f $$i $$o', \ - 'tex2lyx' + version_suffix + ' -f $$i $$o' ], - rc_entry = [ r'\converter latex lyx "%%" ""' ]) - -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 "%%" ""' ]) - -checkProg('a HTML -> LaTeX converter', ['html2latex $$i'], - rc_entry = [ r'\converter html latex "%%" ""' ]) - -checkProg('a MSWord -> LaTeX converter', ['wvCleanLatex $$i $$o'], - rc_entry = [ r'\converter word latex "%%" ""' ]) - -checkProg('a LaTeX -> MS Word converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"], - rc_entry = [ r'\converter latex wordhtml "%%" ""' ]) - -# FIXME: image_command is not used anywhere. -checkProg('Image converter', ['convert $$i $$o']) - -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'], - rc_entry = [ r'\converter latex sxw "%%" "latex"' ]) - -#checkProg('a Postscript interpreter', ['gs'], -# rc_entry = [ r'\ps_command "%%"' ]) - -checkProg('a Postscript previewer', ['gsview32', 'gv', 'ghostview -swap', 'kghostview'], - rc_entry = [ - r'''\Format eps eps EPS "" "%%" "" + # + #checkProg('a Postscript interpreter', ['gs'], + # rc_entry = [ r'\ps_command "%%"' ]) + checkProg('a Postscript previewer', ['gsview32', 'gv', 'ghostview -swap', 'kghostview'], + rc_entry = [ r'''\Format eps eps EPS "" "%%" "" \Format ps ps Postscript t "%%" ""''' ]) - -checkProg('a PDF previewer', ['acrobat', 'acrord32', 'gsview32', \ - 'acroread', 'gv', 'ghostview', 'xpdf', 'kpdf', 'kghostview'], - rc_entry = [ r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" + # + checkProg('a PDF previewer', ['acrobat', 'acrord32', 'gsview32', \ + 'acroread', 'gv', 'ghostview', 'xpdf', 'kpdf', 'kghostview'], + rc_entry = [ r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" \Format pdf2 pdf "PDF (pdflatex)" F "%%" "" \Format pdf3 pdf "PDF (dvipdfm)" m "%%" ""''' ]) - -checkProg('a DVI previewer', ['xdvi', 'windvi', 'yap', 'kdvi'], - rc_entry = [ r'\Format dvi dvi DVI D "%%" ""' ]) - -checkProg('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], - rc_entry = [ r'\Format html html HTML H "%%" ""' ]) - -checkProg('a PS to PDF converter', ['ps2pdf13 $$i'], - rc_entry = [ r'\converter ps pdf "%%" ""' ]) - -checkProg('a DVI to PS converter', ['dvips -o $$o $$i'], - rc_entry = [ r'\converter dvi ps "%%" ""' ]) - -checkProg('a DVI to PDF converter', ['dvipdfm $$i'], - rc_entry = [ r'\converter dvi pdf3 "%%" ""' ]) - -### We have a script to convert previewlyx to ppm -addToRC(r'\converter lyxpreview ppm "python $$s/scripts/lyxpreview2bitmap.py" ""') - -path, dvipng = checkProg('dvipng', ['dvipng']) -if dvipng == "dvipng": - addToRC(r'\converter lyxpreview png "python $$s/scripts/lyxpreview2bitmap.py" ""') -else: - addToRC(r'\converter lyxpreview png "" ""') - -checkProg('a *roff formatter', ['groff', 'nroff'], - rc_entry = [ - r'\ascii_roff_command "groff -t -Tlatin1 $$FName"', - r'\ascii_roff_command "tbl $$FName | nroff"', - r'\ascii_roff_command "none"' ]) - -checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], - rc_entry = [ r'\chktex_command "%%"' ]) - -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 -path, MAPLE = checkProg('Maple', ['maple']) - -checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i'], - rc_entry = [ r'\converter ps fax "%%" ""']) - -path, LINUXDOC = checkProg('SGML-tools 1.x (LinuxDoc)', ['sgml2lyx'], - rc_entry = [ - r'''\converter linuxdoc lyx "sgml2lyx $$i" "" -\converter linuxdoc latex "sgml2latex $$i" "" -\converter linuxdoc dvi "sgml2latex -o dvi $$i" "" -\converter linuxdoc html "sgml2html $$i" ""''', - r'''\converter linuxdoc lyx "none" "" -\converter linuxdoc latex "none" "" -\converter linuxdoc dvi "none" "" -\converter linuxdoc html "none" ""''' ]) - -if LINUXDOC != 'none': - chk_linuxdoc = 'yes' - bool_linuxdoc = 'true' - linuxdoc_cmd = '\\def\\haslinuxdoc{yes}' -else: - chk_linuxdoc = 'no' - bool_linuxdoc = 'false' - linuxdoc_cmd = '' - -path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook) or db2x scripts', ['sgmltools', 'db2dvi'], - 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 "none" "" -\converter docbook html "none" ""''']) - -if DOCBOOK != 'none': - chk_docbook = 'yes' - bool_docbook = 'true' - docbook_cmd = '\\def\\hasdocbook{yes}' -else: - chk_docbook = 'no' - bool_docbook = 'false' - docbook_cmd = '' - -checkProg('a spool command', ['lp', 'lpr'], - rc_entry = [ - r'''\print_spool_printerprefix "-d " -\print_spool_command "lp"''', - r'''\print_spool_printerprefix "-P", -\print_spool_command "lpr"''', - '']) - -checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \ - 'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'], - rc_entry = [ r'\converter latex html "%%" "originaldir,needaux"' ]) - -# Add the rest of the entries (no checkProg is required) -addToRC(r'''\Format date "" "date command" "" "" "" + # + checkProg('a DVI previewer', ['xdvi', 'windvi', 'yap', 'kdvi'], + rc_entry = [ r'\Format dvi dvi DVI D "%%" ""' ]) + # + checkProg('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], + rc_entry = [ r'\Format html html HTML H "%%" ""' ]) + # + # entried that do not need checkProg + addToRC(r'''\Format date "" "date command" "" "" "" \Format fax "" Fax "" "" "" \Format lyx lyx LyX "" "" "" \Format lyx13x lyx13 "LyX 1.3.x" "" "" "" @@ -417,254 +255,441 @@ addToRC(r'''\Format date "" "date command" "" "" "" \Format sxw sxw "OpenOffice.Org Writer" O "" "" \Format word doc "MS Word" W "" "" \Format wordhtml html "MS Word (HTML)" "" "" "" +''') + + +def checkConverterEntries(): + ''' Check all converters (\converter entries) ''' + checkProg('the pdflatex program', ['pdflatex $$i'], + rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex"' ]) + # + checkProg('a LaTeX -> LyX converter', [os.path.join('..','src','tex2lyx','tex2lyx') + ' -f $$i $$o', \ + 'tex2lyx' + version_suffix + ' -f $$i $$o' ], + rc_entry = [ r'\converter latex lyx "%%" ""' ]) + # + 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 "%%" ""' ]) + # + checkProg('a HTML -> LaTeX converter', ['html2latex $$i'], + rc_entry = [ r'\converter html latex "%%" ""' ]) + # + checkProg('a MSWord -> LaTeX converter', ['wvCleanLatex $$i $$o'], + rc_entry = [ r'\converter word latex "%%" ""' ]) + # + checkProg('a LaTeX -> MS Word converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"], + rc_entry = [ r'\converter latex wordhtml "%%" ""' ]) + # + 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'], + rc_entry = [ r'\converter latex sxw "%%" "latex"' ]) + # + checkProg('a PS to PDF converter', ['ps2pdf13 $$i'], + rc_entry = [ r'\converter ps pdf "%%" ""' ]) + # + checkProg('a DVI to PS converter', ['dvips -o $$o $$i'], + rc_entry = [ r'\converter dvi ps "%%" ""' ]) + # + checkProg('a DVI to PDF converter', ['dvipdfm $$i'], + rc_entry = [ r'\converter dvi pdf3 "%%" ""' ]) + # + path, dvipng = checkProg('dvipng', ['dvipng']) + if dvipng == "dvipng": + addToRC(r'\converter lyxpreview png "python $$s/scripts/lyxpreview2bitmap.py" ""') + else: + addToRC(r'\converter lyxpreview png "" ""') + # + checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i'], + rc_entry = [ r'\converter ps fax "%%" ""']) + # + checkProg('a FIG -> EPS/PPM converter', ['fig2dev'], + rc_entry = [ + r'''\converter fig eps "fig2dev -L eps $$i $$o" "" +\converter fig ppm "fig2dev -L ppm $$i $$o" "" +\converter fig png "fig2dev -L png $$i $$o" ""''', + '']) + # + checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'], + rc_entry = [ r'\converter tiff eps "%%" ""', '']) + # + checkProg('a TGIF -> EPS/PPM converter', ['tgif'], + rc_entry = [ + r'''\converter tgif eps "tgif -stdout -print -color -eps $$i > $$o" "" +\converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''', + '']) + # + checkProg('a EPS -> PDF converter', ['epstopdf'], + rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', '']) + # + checkProg('a Grace -> Image converter', ['gracebat'], + rc_entry = [ + r'''\converter agr eps "gracebat -hardcopy -printfile $$o -hdevice EPS $$i 2>/dev/null" "" +\converter agr png "gracebat -hardcopy -printfile $$o -hdevice PNG $$i 2>/dev/null" "" +\converter agr jpg "gracebat -hardcopy -printfile $$o -hdevice JPEG $$i 2>/dev/null" "" +\converter agr ppm "gracebat -hardcopy -printfile $$o -hdevice PNM $$i 2>/dev/null" ""''', + '']) + # + checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \ + 'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'], + rc_entry = [ r'\converter latex html "%%" "originaldir,needaux"' ]) + # + # FIXME: no rc_entry? comment it out + # checkProg('Image converter', ['convert $$i $$o']) + # + # Entried that do not need checkProg + addToRC(r'''\converter lyxpreview ppm "python $$s/scripts/lyxpreview2bitmap.py" "" \converter date dateout "date +%d-%m-%Y > $$o" "" \converter docbook docbook-xml "cp $$i $$o" "xml" \converter fen asciichess "python $$s/scripts/fen2ascii.py $$i $$o" "" \converter fig pdftex "sh $$s/scripts/fig2pdftex.sh $$i $$o" "" \converter fig pstex "sh $$s/scripts/fig2pstex.sh $$i $$o" "" \converter lyx lyx13x "python $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o" "" -\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o" +''') + + +def checkLinuxDoc(): + ''' Check linuxdoc ''' + # + path, LINUXDOC = checkProg('SGML-tools 1.x (LinuxDoc)', ['sgml2lyx'], + rc_entry = [ + r'''\converter linuxdoc lyx "sgml2lyx $$i" "" +\converter linuxdoc latex "sgml2latex $$i" "" +\converter linuxdoc dvi "sgml2latex -o dvi $$i" "" +\converter linuxdoc html "sgml2html $$i" ""''', + r'''\converter linuxdoc lyx "none" "" +\converter linuxdoc latex "none" "" +\converter linuxdoc dvi "none" "" +\converter linuxdoc html "none" ""''' ]) + if LINUXDOC != 'none': + return ('yes', 'true', '\\def\\haslinuxdoc{yes}') + else: + return ('no', 'false', '') + + +def checkDocBook(): + ''' Check docbook ''' + path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook) or db2x scripts', ['sgmltools', 'db2dvi'], + 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 "none" "" +\converter docbook html "none" ""''']) + # + if DOCBOOK != 'none': + return ('yes', 'true', '\\def\\hasdocbook{yes}') + else: + return ('no', 'false', '') + + +def checkOtherEntries(): + ''' entries other than Format and Converter ''' + checkProg('a *roff formatter', ['groff', 'nroff'], + rc_entry = [ + r'\ascii_roff_command "groff -t -Tlatin1 $$FName"', + r'\ascii_roff_command "tbl $$FName | nroff"', + r'\ascii_roff_command "none"' ]) + checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], + rc_entry = [ r'\chktex_command "%%"' ]) + 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 + # path, MAPLE = checkProg('Maple', ['maple']) + checkProg('a spool command', ['lp', 'lpr'], + rc_entry = [ + r'''\print_spool_printerprefix "-d " +\print_spool_command "lp"''', + r'''\print_spool_printerprefix "-P", +\print_spool_command "lpr"''', + '']) + # Add the rest of the entries (no checkProg is required) + addToRC(r'''\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o" \copier pstex "python $$s/scripts/tex_copy.py $$i $$o $$l" \copier pdftex "python $$s/scripts/tex_copy.py $$i $$o $$l" ''') -## Explore the LaTeX configuration -print 'checking LaTeX configuration... ', -## First, remove the files that we want to re-create -removeFiles(['textclass.lst', 'packages.lst', 'chkconfig.sed']) -if not lyx_check_config: - print ' default values' - print '+checking list of textclasses... ' - tx = open('textclass.lst', 'w') - tx.write(''' +def checkLatexConfig(check_config): + ''' Explore the LaTeX configuration ''' + print 'checking LaTeX configuration... ', + # First, remove the files that we want to re-create + removeFiles(['textclass.lst', 'packages.lst', 'chkconfig.sed']) + # + if not check_config: + print ' default values' + print '+checking list of textclasses... ' + tx = open('textclass.lst', 'w') + tx.write(''' # 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 # configuration change. ''') - # build the list of available layout files and convert it to commands - # for chkconfig.ltx - foundClasses = [] - # sed filters - # FIXME: this is a direct translation of the sed commands - # There may be more efficient methods - p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') - p2 = re.compile(r'^.*\DeclareLaTeXClass *(.*)') - p3 = re.compile(r'^.*\DeclareDocBookClass *(.*)') - p4 = re.compile(r'^.*\DeclareLinuxDocClass *(.*)') - p5 = re.compile(r'\[([^,]*),[^]]*\]') - p6 = re.compile('^{') - p7 = re.compile(r'\[([^]]*)\] *{([^}]*)}') - for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ - glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : - # valid file? - if not os.path.isfile(file): continue - # get stuff between /xxxx.layout . - classname = file.split(os.sep)[-1].split('.')[0] - # tr ' -' '__'` - cleanclass = classname.replace(' ', '_') - cleanclass = cleanclass.replace('-', '_') - # make sure the same class is not considered twice - if foundClasses.count(cleanclass) == 0: # not found before - foundClasses.append(cleanclass) - # The sed commands below are a bit scary. Here is what they do: - # 1-3: remove the \DeclareFOO macro and add the correct boolean - # at the end of the line telling whether the class is - # available - # 4: if the macro had an optional argument with several - # parameters, only keep the first one - # 5: if the macro did not have an optional argument, provide one - # (equal to the class name) - # 6: remove brackets and replace with correctly quoted entries - # grep '\\Declare\(LaTeX\|DocBook\|LinuxDoc\)Class' "$file" \ - # | sed -e 's/^.*\DeclareLaTeXClass *\(.*\)/\1 "false"/' \ - # -e 's/^.*\DeclareDocBookClass *\(.*\)/\1 "'$bool_docbook'"/' \ - # -e 's/^.*\DeclareLinuxDocClass *\(.*\)/\1 "'$bool_linuxdoc'"/' \ - # -e 's/\[\([^,]*\),[^]]*\]/[\1]/' \ - # -e 's/^{/['$class']{/' \ - # -e 's/\[\([^]]*\)\] *{\([^}]*\)}/"'$class'" "\1" "\2"/' \ - # >>textclass.lst + # build the list of available layout files and convert it to commands + # for chkconfig.ltx + foundClasses = [] + # sed filters + # FIXME: this is a direct translation of the sed commands + # There may be more efficient methods + p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') + p2 = re.compile(r'^.*\DeclareLaTeXClass *(.*)') + p3 = re.compile(r'^.*\DeclareDocBookClass *(.*)') + p4 = re.compile(r'^.*\DeclareLinuxDocClass *(.*)') + p5 = re.compile(r'\[([^,]*),[^]]*\]') + p6 = re.compile('^{') + p7 = re.compile(r'\[([^]]*)\] *{([^}]*)}') + for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ + glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : + # valid file? + if not os.path.isfile(file): + continue + # get stuff between /xxxx.layout . + classname = file.split(os.sep)[-1].split('.')[0] + # tr ' -' '__'` + cleanclass = classname.replace(' ', '_') + cleanclass = cleanclass.replace('-', '_') + # make sure the same class is not considered twice + if foundClasses.count(cleanclass) == 0: # not found before + foundClasses.append(cleanclass) + # The sed commands below are a bit scary. Here is what they do: + # 1-3: remove the \DeclareFOO macro and add the correct boolean + # at the end of the line telling whether the class is + # available + # 4: if the macro had an optional argument with several + # parameters, only keep the first one + # 5: if the macro did not have an optional argument, provide one + # (equal to the class name) + # 6: remove brackets and replace with correctly quoted entries + # grep '\\Declare\(LaTeX\|DocBook\|LinuxDoc\)Class' "$file" \ + # | sed -e 's/^.*\DeclareLaTeXClass *\(.*\)/\1 "false"/' \ + # -e 's/^.*\DeclareDocBookClass *\(.*\)/\1 "'$bool_docbook'"/' \ + # -e 's/^.*\DeclareLinuxDocClass *\(.*\)/\1 "'$bool_linuxdoc'"/' \ + # -e 's/\[\([^,]*\),[^]]*\]/[\1]/' \ + # -e 's/^{/['$class']{/' \ + # -e 's/\[\([^]]*\)\] *{\([^}]*\)}/"'$class'" "\1" "\2"/' \ + # >>textclass.lst + for line in open(file).readlines(): + if p1.search(line) == None: + continue + line = p2.sub(r'\1 "false"', line) + line = p3.sub(r'\1 "' + bool_docbook + '"', line) + line = p4.sub(r'\1 "' + bool_linuxdoc + '"', line) + line = p5.sub(r'[\1]', line) + line = p6.sub("[" + classname + "]{", line) + line = p7.sub( "'" + classname + "'" + r'"\1" "\2"', line) + tx.write(line) + break # one file, one line. + tx.close() + print '\tdone' + else: + print '\tauto' + removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \ + 'chkconfig.classes', 'chklayouts.tex']) + rmcopy = False + if not os.path.isfile( 'chkconfig.ltx' ): + shutil.copy( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) + rmcopy = True + writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \ + % (linuxdoc_cmd, 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 + p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') + testclasses = list() + for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ + glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : + if not os.path.isfile(file): + continue + classname = file.split(os.sep)[-1].split('.')[0] for line in open(file).readlines(): if p1.search(line) == None: continue - line = p2.sub(r'\1 "false"', line) - line = p3.sub(r'\1 "' + bool_docbook + '"', line) - line = p4.sub(r'\1 "' + bool_linuxdoc + '"', line) - line = p5.sub(r'[\1]', line) - line = p6.sub("[" + classname + "]{", line) - line = p7.sub( "'" + classname + "'" + r'"\1" "\2"', line) - tx.write(line) - break # one file, one line. - tx.close() - print '\tdone' -else: - print '\tauto' - removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \ - 'chkconfig.classes', 'chklayouts.tex']) - rmcopy = False - if not os.path.isfile( 'chkconfig.ltx' ): - shutil.copy( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) - rmcopy = True - writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \ - % (linuxdoc_cmd, 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 - p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') - testclasses = list() - for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ - glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : - if not os.path.isfile(file): continue - classname = file.split(os.sep)[-1].split('.')[0] - for line in open(file).readlines(): - if p1.search(line) == None: - continue - if line[0] != '#': - print "Wrong input layout file with line '" + line - sys.exit(3) - testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) - break - testclasses.sort() - cl = open('chklayouts.tex', 'w') - for line in testclasses: - cl.write(line + '\n') - cl.close() - # - # we have chklayouts.tex, then process it - for line in cmdOutput(LATEX + ' wrap_chkconfig.ltx').splitlines(): - if re.match('^\+', line): - print line - # - # evalulate lines in chkconfig.vars? - # is it really necessary? - for line in open('chkconfig.vars').readlines(): - exec( re.sub('-', '_', line) ) - if rmcopy: # remove the copied file - removeFiles( [ 'chkconfig.ltx' ] ) + if line[0] != '#': + print "Wrong input layout file with line '" + line + sys.exit(3) + testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) + break + testclasses.sort() + cl = open('chklayouts.tex', 'w') + for line in testclasses: + cl.write(line + '\n') + cl.close() + # + # we have chklayouts.tex, then process it + for line in cmdOutput(LATEX + ' wrap_chkconfig.ltx').splitlines(): + if re.match('^\+', line): + print line + # + # get lines in chkconfig.vars? + # is this really necessary? Some of the values was write + # to rc file. + values = {} + for line in open('chkconfig.vars').readlines(): + key, val = re.sub('-', '_', line).split('=') + values[key] = val.strip("'\n") + # chk_fontenc may not exist + try: + addToRC(r'\font_encoding "%s"' % values["chk_fontenc"]) + except: + pass + if rmcopy: # remove the copied file + removeFiles( [ 'chkconfig.ltx' ] ) -### Do we have all the files we need? Useful if latex did not run -### if chkconfig.sed does not exist (because LaTeX did not run), -### then provide a standard version. -if not os.path.isfile('chkconfig.sed'): - writeToFile('chkconfig.sed', '##s/@.*@/???/g\n') - -print "creating packages.lst" -### if packages.lst does not exist (because LaTeX did not run), -### then provide a standard version. -if not os.path.isfile('packages.lst'): - writeToFile('packages.lst', ''' +def createLaTeXConfig(): + ''' create LaTeXConfig.lyx ''' + # if chkconfig.sed does not exist (because LaTeX did not run), + # then provide a standard version. + if not os.path.isfile('chkconfig.sed'): + writeToFile('chkconfig.sed', '##s/@.*@/???/g\n') + print "creating packages.lst" + # if packages.lst does not exist (because LaTeX did not run), + # then provide a standard version. + if not os.path.isfile('packages.lst'): + 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 ### if you need to update it after a configuration change. ''') - -print 'creating doc/LaTeXConfig.lyx' -# -# This is originally done by sed, using a -# tex-generated file chkconfig.sed -##sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in -## >doc/LaTeXConfig.lyx -# Now, we have to do it by hand (python). -# -# add to chekconfig.sed -writeToFile('chkconfig.sed', '''s!@chk_linuxdoc@!%s!g + print 'creating doc/LaTeXConfig.lyx' + # + # This is originally done by sed, using a + # tex-generated file chkconfig.sed + ##sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in + ## >doc/LaTeXConfig.lyx + # Now, we have to do it by hand (python). + # + # add to chekconfig.sed + writeToFile('chkconfig.sed', '''s!@chk_linuxdoc@!%s!g s!@chk_docbook@!%s!g -''' % (chk_linuxdoc, chk_docbook) , append=True) -# process this sed file!!!! -lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines() -# get the rules -p = re.compile(r's!(.*)!(.*)!g') -# process each sed replace. -for sed in open('chkconfig.sed').readlines(): - try: - fr, to = p.match(sed).groups() - for line in range(len(lyxin)): - lyxin[line] = lyxin[line].replace(fr, to) - except: # wrong sed entry? - print "Wrong sed entry in chkconfig.sed:", sed - sys.exit(4) + ''' % (chk_linuxdoc, chk_docbook) , append=True) + # process this sed file!!!! + lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines() + # get the rules + p = re.compile(r's!(.*)!(.*)!g') + # process each sed replace. + for sed in open('chkconfig.sed').readlines(): + if sed.strip() == '': + continue + try: + fr, to = p.match(sed).groups() + for line in range(len(lyxin)): + lyxin[line] = lyxin[line].replace(fr, to) + except: # wrong sed entry? + print "Wrong sed entry in chkconfig.sed: '" + sed + "'" + sys.exit(4) + # + writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'), + ''.join(lyxin)) -writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'), - ''.join(lyxin)) -### 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... ", - writeToFile('a b.tex', r'\message{working^^J}' ) - # FIXME: the bsh version uses < /dev/null which is not portable. - # Can anyone confirm if this option (-interaction) is available - # at other flavor of latex as well? (MikTex/win, Web2C/linux are fine.) - if ''.join(cmdOutput(LATEX + ' -interaction=nonstopmode "a b"')).find('working') != -1: - print 'yes' - tex_allows_spaces = 'true' - else: - print 'no' - tex_allows_spaces = 'false' - removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) - -checkProg('a FIG -> EPS/PPM converter', ['fig2dev'], - rc_entry = [ - r'''\converter fig eps "fig2dev -L eps $$i $$o" "" -\converter fig ppm "fig2dev -L ppm $$i $$o" "" -\converter fig png "fig2dev -L png $$i $$o" ""''', - '']) - -checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'], - rc_entry = [ r'\converter tiff eps "%%" ""', '']) - -checkProg('a TGIF -> EPS/PPM converter', ['tgif'], - rc_entry = [ - r'''\converter tgif eps "tgif -stdout -print -color -eps $$i > $$o" "" -\converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''', - '']) - -checkProg('a EPS -> PDF converter', ['epstopdf'], - rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', '']) - -path, GRACE = checkProg('a Grace -> Image converter', ['gracebat'], - rc_entry = [ - r'''\converter agr eps "gracebat -hardcopy -printfile $$o -hdevice EPS $$i 2>/dev/null" "" -\converter agr png "gracebat -hardcopy -printfile $$o -hdevice PNG $$i 2>/dev/null" "" -\converter agr jpg "gracebat -hardcopy -printfile $$o -hdevice JPEG $$i 2>/dev/null" "" -\converter agr ppm "gracebat -hardcopy -printfile $$o -hdevice PNM $$i 2>/dev/null" ""''', - '']) - -# chk_fontenc may not exist -try: - addToRC(r'\font_encoding "%s"' % chk_fontenc) -except: - pass -addToRC(r'\tex_allows_spaces ' + tex_allows_spaces) - -if use_cygwin_path_fix == 'true': - addToRC(r'\cygwin_path_fix_needed ' + use_cygwin_path_fix) - -# Remove superfluous files if we are not writing in the main lib -# directory -for file in [outfile, 'textclass.lst', 'packages.lst', \ - 'doc/LaTeXConfig.lyx']: - try: - # we rename the file first, so that we avoid comparing a file with itself - os.rename(file, file + '.new') - syscfg = open( os.path.join(srcdir, file) ).read() - mycfg = open( file + '.new').read() - if mycfg == syscfg: - print "removing ", file, " which is identical to the system global version" - removeFiles( [file + '.new'] ) +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... ", + writeToFile('a b.tex', r'\message{working^^J}' ) + # FIXME: the bsh version uses < /dev/null which is not portable. + # Can anyone confirm if this option (-interaction) is available + # at other flavor of latex as well? (MikTex/win, Web2C/linux are fine.) + if ''.join(cmdOutput(LATEX + ' -interaction=nonstopmode "a b"')).find('working') != -1: + print 'yes' + tex_allows_spaces = 'true' else: + print 'no' + tex_allows_spaces = 'false' + addToRC(r'\tex_allows_spaces ' + tex_allows_spaces) + removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) + + +def removeExtraFiles(): + # Remove superfluous files if we are not writing in the main lib + # directory + for file in [outfile, 'textclass.lst', 'packages.lst', \ + 'doc/LaTeXConfig.lyx']: + try: + # we rename the file first, so that we avoid comparing a file with itself + os.rename(file, file + '.new') + syscfg = open( os.path.join(srcdir, file) ).read() + mycfg = open( file + '.new').read() + if mycfg == syscfg: + print "removing ", file, " which is identical to the system global version" + removeFiles( [file + '.new'] ) + else: + os.rename( file + '.new', file ) + except: # use local version if anthing goes wrong. os.rename( file + '.new', file ) - except: # use local version if anthing goes wrong. - os.rename( file + '.new', file ) - pass + pass + # Final clean-up + if not lyx_keep_temps: + removeFiles(['chkconfig.sed', 'chkconfig.vars', \ + 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \ + 'chklayouts.tex', 'missfont.log']) -# Final clean-up -if not lyx_keep_temps: - removeFiles(['chkconfig.sed', 'chkconfig.vars', \ - 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \ - 'chklayouts.tex', 'missfont.log']) +if __name__ == '__main__': + lyx_check_config = True + outfile = 'lyxrc.defaults' + rc_entries = '' + lyx_keep_temps = False + version_suffix = '' + ## Parse the command line + for op in sys.argv[1:]: # default shell/for list is $*, the options + if op in [ '-help', '--help', '-h' ]: + print '''Usage: configure [options] +Options: + --help show this help lines + --keep-temps keep temporary files (for debug. purposes) + --without-latex-config do not run LaTeX to determine configuration + --with-version-suffix=suffix suffix of binary installed files +''' + sys.exit(0) + elif op == '--without-latex-config': + lyx_check_config = False + elif op == '--keep-temps': + lyx_keep_temps = True + elif op[0:22] == '--with-version-suffix=': # never mind if op is not long enough + version_suffix = op[22:] + else: + print "Unknown option", op + sys.exit(1) + # + # 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" + sys.exit(1) + setEnviron() + createDirectories() + checkCygwinPath() + ## 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 +# override the values given here. +''') + # check latex + LATEX = checkLatex() + checkFormatEntries() + checkConverterEntries() + (chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc() + (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook() + checkTeXAllowSpaces() + checkOtherEntries() + # --without-latex-config can disable lyx_check_config + checkLatexConfig( lyx_check_config and LATEX != '') + createLaTeXConfig() + removeExtraFiles()