]> git.lyx.org Git - features.git/commitdiff
Major cleanup of lib/configure.py from Bo Peng
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Fri, 31 Mar 2006 13:31:16 +0000 (13:31 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Fri, 31 Mar 2006 13:31:16 +0000 (13:31 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13537 a592a061-630c-0410-9148-cb99ea01b6c8

lib/configure.py

index 6e71430229334068eb960a41509825169fb0e7c1..416e9a3b8c0f3e86bf88bf685a1b56c37c9c092c 100644 (file)
@@ -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.
-
-## 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)
-
-## 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 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')
+
+
+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)
+
+
+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 ])
-
-#### 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)
+  ''')
+    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 ])
 
-## 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'])
-
-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                  "" "%%"     "%%"'] )
+    # 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('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,96 +224,138 @@ 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  "%%"   ""' ])
+  #
+  # 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"             "" ""        ""
+\Format lyxpreview lyxpreview "LyX Preview"       "" ""        ""
+\Format pdftex     pdftex_t PDFTEX                "" ""        ""
+\Format program    ""      Program                "" ""        ""
+\Format pstex      pstex_t PSTEX                  "" ""        ""
+\Format sxw        sxw    "OpenOffice.Org Writer" O  ""        ""
+\Format word       doc    "MS Word"               W  ""        ""
+\Format wordhtml   html   "MS Word (HTML)"        "" ""        ""
+''')
 
-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'])
+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" ""
+''')
 
-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 = [
+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"       ""
@@ -365,306 +364,332 @@ path, LINUXDOC = checkProg('SGML-tools 1.x (LinuxDoc)', ['sgml2lyx'],
 \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', '')
+
 
-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"        ""
+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"  ""
+      r'''\converter docbook    dvi        "db2dvi $$i"        ""
 \converter docbook    html       "db2html $$i" ""''',
-    r'''\converter docbook    dvi        "none"        ""
+      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 "
+  #
+  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",
+      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"          "" ""    ""
-\Format fax        ""      Fax                    "" ""        ""
-\Format lyx        lyx     LyX                    "" ""        ""
-\Format lyx13x     lyx13  "LyX 1.3.x"             "" ""        ""
-\Format lyxpreview lyxpreview "LyX Preview"       "" ""        ""
-\Format pdftex     pdftex_t PDFTEX                "" ""        ""
-\Format program    ""      Program                "" ""        ""
-\Format pstex      pstex_t PSTEX                  "" ""        ""
-\Format sxw        sxw    "OpenOffice.Org Writer" O  ""        ""
-\Format word       doc    "MS Word"               W  ""        ""
-\Format wordhtml   html   "MS Word (HTML)"        "" ""        ""
-\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"
+      ''])
+  # 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' ] )
-
-### 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', '''
+        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' ] )
+
+
+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)
-
-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'] )
+  ''' % (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))
+
+
+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:
-      os.rename( file + '.new', file )
-  except:  # use local version if anthing goes wrong.
-    os.rename( file + '.new', file )
-    pass
+      print 'no'
+      tex_allows_spaces = 'false'
+    addToRC(r'\tex_allows_spaces ' + tex_allows_spaces)
+    removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ])
 
-# Final clean-up
-if not lyx_keep_temps:
-  removeFiles(['chkconfig.sed', 'chkconfig.vars',  \
-    'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \
-    'chklayouts.tex', 'missfont.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 )
+      pass
+  # 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()