]> git.lyx.org Git - features.git/commitdiff
Add Bo Peng's experimental Python script to the repository.
authorAngus Leeming <leeming@lyx.org>
Sun, 18 Sep 2005 09:03:11 +0000 (09:03 +0000)
committerAngus Leeming <leeming@lyx.org>
Sun, 18 Sep 2005 09:03:11 +0000 (09:03 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10453 a592a061-630c-0410-9148-cb99ea01b6c8

lib/ChangeLog
lib/configure.py [new file with mode: 0644]

index 6f3b467376ed860d3c6260b199f43a8bc69c0176..41460d829947de0d73c1d638fef9108af2a8ad28 100644 (file)
@@ -1,3 +1,8 @@
+2005-09-18  Angus Leeming  <leeming@lyx.org>
+
+       * configure.py: add Bo Peng's experimental Python script to
+       the repository.
+
 2005-09-08  Angus Leeming  <leeming@lyx.org>
 
        * configure.m4:
diff --git a/lib/configure.py b/lib/configure.py
new file mode 100644 (file)
index 0000000..6e2de47
--- /dev/null
@@ -0,0 +1,664 @@
+#! /usr/bin/env python
+#
+# file configure.py
+# This file is part of LyX, the document processor.
+# Licence details can be found in the file COPYING.
+
+# 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.
+
+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 "
+  if append:
+    file = open(filename, 'a')
+  else:
+    file = open(filename, 'w')
+  file.write(lines)
+  file.close()
+
+def addToRC(lines):
+  ''' utility function: shortcut for appending lines to outfile
+    add newline at the end of 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.
+  '''
+  for file in filenames:
+    try:
+      os.remove(file)
+    except:
+      pass
+
+def cmdOutput(cmd):
+  '''utility function: run a command and get its output as a string
+    cmd: command to run
+  '''
+  fout = os.popen(cmd)
+  output = fout.read()
+  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[23:]
+  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'''
+\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)
+
+## 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 = [] ):
+  '''
+    This function will search a program in $PATH plus given path
+    If found, return directory and program name (not the options).
+
+    description: description of the program
+
+    progs: check programs, for each prog, the first word is used
+      for searching but the whole string is used to replace
+      %% for a rc_entry. So, feel free to add '$$i' etc for programs.
+
+    path: additional path
+
+    rc_entry: entry to outfile, can be emtpy, one pattern (%% for chosen
+       prog or 'none'), or one for each prog and 'none'.
+
+    NOTE: if you do not want 'none' entry to be added to the RC file,
+      specify an entry for each prog and use '' for 'none' entry.
+
+    FIXME: under windows, we should check registry instead of $PATH
+  '''
+  # one rc entry for each progs plus none entry
+  if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1:
+    print "rc entry should have one item or item for each prog and none."
+    sys.exit(2)
+  print 'checking for ' + description + '...'
+  ## print '(' + ','.join(progs) + ')',
+  for idx in range(len(progs)):
+    # ac_prog may have options, ac_word is the command name
+    ac_prog = progs[idx]
+    ac_word = ac_prog.split(' ')[0]
+    print '+checking for "' + ac_word + '"... ',
+    path = os.environ["PATH"].split(os.pathsep) + path
+    for ac_dir in path:
+      # check both ac_word and ac_word.exe (for windows system)
+      if os.path.isfile( os.path.join(ac_dir, ac_word) ) or \
+         os.path.isfile( os.path.join(ac_dir, ac_word + ".exe") ):
+        print ' yes'
+        # write rc entries for this command
+        if len(rc_entry) == 1:
+          addToRC(rc_entry[0].replace('%%', ac_prog))
+        elif len(rc_entry) > 1:
+          addToRC(rc_entry[idx].replace('%%', ac_prog))
+        return [ac_dir, ac_word]
+    # if not successful
+    print ' no'
+  # write rc entries for 'not found'
+  if len(rc_entry) > 0:  # the last one.
+    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', '''
+\\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(['chkltex.ltx', 'chklatex.log'])
+
+checkProg('the pdflatex program', ['pdflatex $$i'],
+  rc_entry = [ r'\converter latex      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"
+\Format gif        gif     GIF                    "" "%s"      "%s"
+\Format jpg        jpg     JPEG                   "" "%s"      "%s"
+\Format pbm        pbm     PBM                    "" "%s"      "%s"
+\Format pgm        pgm     PGM                    "" "%s"      "%s"
+\Format png        png     PNG                    "" "%s"      "%s"
+\Format ppm        ppm     PPM                    "" "%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)"  "" ""   "%%"
+\Format asciiimage asc    "Plain text (image)"         "" ""   "%%"
+\Format asciixfig  asc    "Plain text (Xfig output)"   "" ""   "%%"
+\Format dateout    tmp    "date (output)"         "" ""        "%%"
+\Format docbook    sgml    DocBook                B  ""        "%%"
+\Format docbook-xml xml   "Docbook (XML)"         "" ""        "%%"
+\Format literate   nw      NoWeb                  N  ""        "%%"
+\Format latex      tex     LaTeX                  L  ""        "%%"
+\Format linuxdoc   sgml    LinuxDoc               x  ""        "%%"
+\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' + version_suffix + ' -delay -index $$i > $$o'],
+  path = ['./reLyX'], 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                    "" "%%"      ""
+\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  "%%"   ""
+\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"          "" ""    ""
+\Format fax        ""      Fax                    "" ""        ""
+\Format lyx        lyx     LyX                    "" "lyx"     "lyx"
+\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" ""
+\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('''
+# 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
+      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) )
+  cl = open('chklayouts.tex', 'w')
+  ## 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')
+  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)
+      cl.write( "\\TestDocClass{%s}{%s}\n" % \
+        ( classname, line[1:].strip() ) )
+      break
+  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', '''
+### 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
+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
+print "Checking whether TeX allows spaces in file names... ",
+tex_allows_spaces = 'false'
+if not lyx_check_config:
+  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'] )
+    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'])
+