]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
typo
[lyx.git] / lib / configure.py
index e08032af8104d9d4d7c79c72e4b63ed43222d78c..303539ee3e10d65ca991c2165f25f90c3b975a7a 100644 (file)
@@ -73,7 +73,7 @@ def setEnviron():
         NLS nuisances.
         Only set these to C if already set.  These must not be set unconditionally
         because not all systems understand e.g. LANG=C (notably SCO).
-        Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+        Fixing LC_MESSAGES prevents Solaris sh from translating var values in set!
         Non-C LC_CTYPE values break the ctype check.
     '''
     os.environ['LANG'] = os.getenv('LANG', 'C')
@@ -200,6 +200,23 @@ def checkLatex(dtl_tools):
     ''' Check latex, return lyx_check_config '''
     path, LATEX = checkProg('a Latex2e program', ['latex $$i', 'platex $$i', 'latex2e $$i'])
     path, PPLATEX = checkProg('a DVI postprocessing program', ['pplatex $$i'])
+    #-----------------------------------------------------------------
+    path, PLATEX = checkProg('pLaTeX, the Japanese LaTeX', ['platex $$i'])
+    if PLATEX != '':
+        # check if PLATEX is pLaTeX2e
+        writeToFile('chklatex.ltx', '''
+\\nonstopmode
+\\@@end
+''')
+        # run platex on chklatex.ltx and check result
+        if cmdOutput(PLATEX + ' chklatex.ltx').find('pLaTeX2e') != -1:
+            # We have the Japanese pLaTeX2e
+            addToRC(r'\converter platex   dvi       "%s"   "latex"' % PLATEX)
+            LATEX = PLATEX
+        else:
+            PLATEX = ''
+            removeFiles(['chklatex.ltx', 'chklatex.log'])
+    #-----------------------------------------------------------------
     # use LATEX to convert from latex to dvi if PPLATEX is not available    
     if PPLATEX == '':
         PPLATEX = LATEX
@@ -235,7 +252,7 @@ def checkFormatEntries(dtl_tools):
     checkViewer('a Tgif viewer and editor', ['tgif'],
         rc_entry = [r'\Format tgif       obj     Tgif                   "" "%%"        "%%"    "vector"'])
     #
-    checkViewer('a FIG viewer and editor', ['xfig'],
+    checkViewer('a FIG viewer and editor', ['xfig', 'jfig3-itext.jar', 'jfig3.jar'],
         rc_entry = [r'\Format fig        fig     FIG                    "" "%%"        "%%"    "vector"'])
     #
     checkViewer('a Grace viewer and editor', ['xmgrace'],
@@ -244,7 +261,7 @@ def checkFormatEntries(dtl_tools):
     checkViewer('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'],
         rc_entry = [r'\Format fen        fen     FEN                    "" "%%"        "%%"    ""'])
     #
-    path, iv = checkViewer('a raster image viewer', ['xdg-open', 'xv', 'kview', 'gimp-remote', 'gimp'])
+    path, iv = checkViewer('a raster image viewer', ['xv', 'kview', 'gimp-remote', 'gimp'])
     path, ie = checkViewer('a raster image editor', ['gimp-remote', 'gimp'])
     addToRC(r'''\Format bmp        bmp     BMP                    "" "%s"      "%s"    ""
 \Format gif        gif     GIF                    "" "%s"      "%s"    ""
@@ -266,46 +283,55 @@ def checkFormatEntries(dtl_tools):
 \Format dateout    tmp    "date (output)"         "" ""        "%%"    ""
 \Format docbook    sgml    DocBook                B  ""        "%%"    "document"
 \Format docbook-xml xml   "Docbook (XML)"         "" ""        "%%"    "document"
+\Format dot        dot    "Graphviz Dot"          "" ""        "%%"    "vector"
+\Format platex     tex    "LaTeX (pLaTeX)"        "" "" "%%"    "document"
 \Format literate   nw      NoWeb                  N  ""        "%%"    "document"
 \Format lilypond   ly     "LilyPond music"        "" ""        "%%"    "vector"
 \Format latex      tex    "LaTeX (plain)"         L  ""        "%%"    "document"
-\Format linuxdoc   sgml    LinuxDoc               x  ""        "%%"    "document"
 \Format pdflatex   tex    "LaTeX (pdflatex)"      "" ""        "%%"    "document"
 \Format text       txt    "Plain text"            a  ""        "%%"    "document"
 \Format text2      txt    "Plain text (pstotext)" "" ""        "%%"    "document"
 \Format text3      txt    "Plain text (ps2ascii)" "" ""        "%%"    "document"
 \Format text4      txt    "Plain text (catdvi)"   "" ""        "%%"    "document"
 \Format textparagraph txt "Plain Text, Join Lines" "" ""       "%%"    "document"''' ])
+ #
+    checkViewer('a BibTeX editor', ['sensible-editor', 'jabref', 'JabRef', \
+        'pybliographic', 'bibdesk', 'gbib', 'kbib', \
+        'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \
+        'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+        'nedit', 'gedit', 'notepad'],
+        rc_entry = [r'''\Format bibtex bib    "BibTeX"         "" ""   "%%"    ""''' ])
     #
     #checkProg('a Postscript interpreter', ['gs'],
     #  rc_entry = [ r'\ps_command "%%"' ])
-    checkViewer('a Postscript previewer', ['xdg-open', 'kghostview', 'evince', 'gv', 'ghostview -swap'],
+    checkViewer('a Postscript previewer', ['kghostview', 'evince', 'gv', 'ghostview -swap'],
         rc_entry = [r'''\Format eps        eps     EPS                    "" "%%"      ""      "vector"
 \Format ps         ps      Postscript             t  "%%"      ""      "document,vector"'''])
     #
-    checkViewer('a PDF previewer', ['xdg-open', 'kpdf', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \
+    checkViewer('a PDF previewer', ['kpdf', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \
                    'gv', 'ghostview'],
         rc_entry = [r'''\Format pdf        pdf    "PDF (ps2pdf)"          P  "%%"      ""      "document,vector"
 \Format pdf2       pdf    "PDF (pdflatex)"        F  "%%"      ""      "document,vector"
 \Format pdf3       pdf    "PDF (dvipdfm)"         m  "%%"      ""      "document,vector"'''])
     #
-    checkViewer('a DVI previewer', ['xdg-open', 'xdvi', 'kdvi'],
+    checkViewer('a DVI previewer', ['xdvi', 'kdvi'],
         rc_entry = [r'\Format dvi        dvi     DVI                    D  "%%"        ""      "document,vector"'])
     if dtl_tools:
         # Windows only: DraftDVI
         addToRC(r'\Format dvi2       dvi     DraftDVI               "" ""      ""      "vector"')
     #
-    checkViewer('an HTML previewer', ['xdg-open', 'firefox', 'mozilla file://$$p$$i', 'netscape'],
+    checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
         rc_entry = [r'\Format html       html    HTML                   H  "%%"        ""      "document"'])
     #
     checkViewer('Noteedit', ['noteedit'],
         rc_entry = [r'\Format noteedit   not     Noteedit               "" "%%"        "%%"    "vector"'])
     #
-    checkViewer('an OpenDocument viewer', ['oowriter'],
+    checkViewer('an OpenDocument viewer', ['swriter', 'oowriter'],
         rc_entry = [r'\Format odt        odt     OpenDocument           "" "%%"        "%%"    "document,vector"'])
     #
     # entried that do not need checkProg
     addToRC(r'''\Format date       ""     "date command"          "" ""        ""      ""
+\Format csv        csv    "Table (CSV)"  "" "" ""      "document"
 \Format fax        ""      Fax                    "" ""        ""      "document"
 \Format lyx        lyx     LyX                    "" ""        ""      ""
 \Format lyx13x     lyx13  "LyX 1.3.x"             "" ""        ""      "document"
@@ -315,6 +341,7 @@ def checkFormatEntries(dtl_tools):
 \Format jlyx       cjklyx "CJK LyX 1.4.x (euc-jp)" "" ""       ""      "document"
 \Format klyx       cjklyx "CJK LyX 1.4.x (euc-kr)" "" ""       ""      "document"
 \Format lyxpreview lyxpreview "LyX Preview"       "" ""        ""      ""
+\Format lyxpreview-platex lyxpreview-platex "LyX Preview (pLaTeX)"       "" "" ""      ""
 \Format pdftex     pdftex_t PDFTEX                "" ""        ""      ""
 \Format program    ""      Program                "" ""        ""      ""
 \Format pstex      pstex_t PSTEX                  "" ""        ""      ""
@@ -349,9 +376,11 @@ def checkConverterEntries():
 
     #
     checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'],
-        rc_entry = [ r'\converter literate   latex      "%%"   ""' ])
+        rc_entry = [r'''\converter literate   latex      "%%"  ""
+\converter literate   pdflatex      "%%"       ""'''])
     #
-    checkProg('an HTML -> LaTeX converter', ['html2latex $$i'],
+    checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i', \
+        'htmltolatex -input $$i -output $$o', 'java -jar htmltolatex.jar -input $$i -output $$o'],
         rc_entry = [ r'\converter html       latex      "%%"   ""' ])
     #
     checkProg('an MS Word -> LaTeX converter', ['wvCleanLatex $$i $$o'],
@@ -379,16 +408,23 @@ def checkConverterEntries():
     #
     checkProg('an OpenDocument -> LaTeX converter', ['w2l -clean $$i'],
         rc_entry = [ r'\converter odt        latex      "%%"   ""' ])
+    # According to http://www.tug.org/applications/tex4ht/mn-commands.html
+    # the command mk4ht oolatex $$i has to be used as default,
+    # but as this would require to have Perl installed, in MiKTeX oolatex is
+    # directly available as application.
     # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/
     # Both SuSE and debian have oolatex
-    checkProg('a LaTeX -> Open Document converter', ['oolatex $$i', 'oolatex.sh $$i', \
-        '/usr/share/tex4ht/oolatex $$i', \
+    checkProg('a LaTeX -> Open Document converter', [
+        'oolatex $$i', 'mk4ht oolatex $$i', 'oolatex.sh $$i', '/usr/share/tex4ht/oolatex $$i',
         'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\''],
         rc_entry = [ r'\converter latex      odt        "%%"   "needaux"' ])
     # On windows it is called latex2rt.exe
     checkProg('a LaTeX -> RTF converter', ['latex2rtf -p -S -o $$o $$i', 'latex2rt -p -S -o $$o $$i'],
         rc_entry = [ r'\converter latex      rtf        "%%"   "needaux"' ])
     #
+    checkProg('a RTF -> HTML converter', ['unrtf --html  $$i > $$o'],
+        rc_entry = [ r'\converter rtf      html        "%%"    ""' ])
+    #
     checkProg('a PS to PDF converter', ['ps2pdf13 $$i $$o'],
         rc_entry = [ r'\converter ps         pdf        "%%"   ""' ])
     #
@@ -398,6 +434,15 @@ def checkConverterEntries():
     checkProg('a PS to TXT converter', ['ps2ascii $$i $$o'],
         rc_entry = [ r'\converter ps         text3      "%%"   ""' ])
     #
+    checkProg('a PS to EPS converter', ['ps2eps $$i'],
+        rc_entry = [ r'\converter ps         eps      "%%"     ""' ])
+    #
+    checkProg('a PDF to PS converter', ['pdf2ps $$i $$o', 'pdftops $$i $$o'],
+        rc_entry = [ r'\converter pdf         ps        "%%"   ""' ])
+    #
+    checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
+        rc_entry = [ r'\converter pdf         eps        "%%"  ""' ])
+    #
     checkProg('a DVI to TXT converter', ['catdvi $$i > $$o'],
         rc_entry = [ r'\converter dvi        text4      "%%"   ""' ])
     #
@@ -428,10 +473,9 @@ def checkConverterEntries():
     #
     checkProg('a TGIF -> EPS/PPM converter', ['tgif'],
         rc_entry = [
-            r'''\converter tgif       eps        "tgif -stdout -print -color -eps $$i > $$o"   ""
-\converter tgif       ppm        "tgif -stdout -print -color -ppm $$i > $$o"   ""
-\converter tgif       png        "tgif -stdout -print -color -png $$i > $$o"   ""
-\converter tgif       pdf        "tgif -stdout -print -color -pdf $$i > $$o"   ""''',
+            r'''\converter tgif       eps        "tgif -print -color -eps -stdout $$i > $$o"   ""
+\converter tgif       png        "tgif -print -color -png -o $$d $$i"  ""
+\converter tgif       pdf        "tgif -print -color -pdf -stdout $$i > $$o"   ""''',
             ''])
     #
     checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'],
@@ -455,6 +499,9 @@ def checkConverterEntries():
 \converter agr        ppm        "gracebat -hardcopy -printfile $$o -hdevice PNM $$i 2>/dev/null"      ""''',
             ''])
     #
+    checkProg('a Dot -> PDF converter', ['dot -Tpdf $$i -o $$o'],
+        rc_entry = [ r'\converter dot        pdf        "%%"   ""'])
+    #
     #
     path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
     if (lilypond != ''):
@@ -482,6 +529,8 @@ def checkConverterEntries():
     #
     # Entries that do not need checkProg
     addToRC(r'''\converter lyxpreview ppm        "python -tt $$s/scripts/lyxpreview2bitmap.py" ""
+\converter lyxpreview-platex ppm        "python -tt $$s/scripts/lyxpreview-platex2bitmap.py"   ""
+\converter csv        lyx        "python -tt $$s/scripts/csv2lyx.py $$i $$o"   ""
 \converter date       dateout    "python -tt $$s/scripts/date.py %d-%m-%Y > $$o"       ""
 \converter docbook    docbook-xml "cp $$i $$o" "xml"
 \converter fen        asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" ""
@@ -499,34 +548,17 @@ def checkConverterEntries():
 ''')
 
 
-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        ""        ""
-\converter linuxdoc   latex      ""    ""
-\converter linuxdoc   dvi        ""    ""
-\converter linuxdoc   html       ""    ""''' ])
-    if LINUXDOC != '':
-        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'],
+    path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook), db2x scripts or xsltproc', ['sgmltools', 'db2dvi', 'xsltproc'],
         rc_entry = [
             r'''\converter docbook    dvi        "sgmltools -b dvi $$i"        ""
 \converter docbook    html       "sgmltools -b html $$i"       ""''',
             r'''\converter docbook    dvi        "db2dvi $$i"  ""
 \converter docbook    html       "db2html $$i" ""''',
             r'''\converter docbook    dvi        ""    ""
+\converter docbook    html       "" ""''',
+            r'''\converter docbook    dvi        ""    ""
 \converter docbook    html       ""    ""'''])
     #
     if DOCBOOK != '':
@@ -537,13 +569,14 @@ def checkDocBook():
 
 def checkOtherEntries():
     ''' entries other than Format and Converter '''
-    checkProg('a *roff formatter', ['groff', 'nroff'],
-        rc_entry = [
-            r'\plaintext_roff_command "groff -t -Tlatin1 $$FName"',
-            r'\plaintext_roff_command "tbl $$FName | nroff"',
-            r'\plaintext_roff_command ""' ])
     checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'],
         rc_entry = [ r'\chktex_command "%%"' ])
+    checkProg('BibTeX', ['jbibtex', 'bibtex'],
+        rc_entry = [ r'\bibtex_command "%%"' ])
+    checkProg('an index processor', ['texindy', 'makeindex -c -q'],
+        rc_entry = [ r'\index_command "%%"' ])
+    checkProg('a nomenclature processor', ['makeindex'],
+        rc_entry = [ r'\nomencl_command "makeindex -s nomencl.ist"' ])
     checkProg('a spellchecker', ['ispell'],
         rc_entry = [ r'\spell_command "%%"' ])
     ## FIXME: OCTAVE is not used anywhere
@@ -565,7 +598,7 @@ def checkOtherEntries():
 ''')
 
 
-def processLayoutFile(file, bool_docbook, bool_linuxdoc):
+def processLayoutFile(file, bool_docbook):
     ''' process layout file and get a line of result
         
         Declare lines look like this: (article.layout, scrbook.layout, svjog.layout)
@@ -582,20 +615,20 @@ def processLayoutFile(file, bool_docbook, bool_linuxdoc):
     '''
     classname = file.split(os.sep)[-1].split('.')[0]
     # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article}
-    p = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}')
+    p = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}')
     for line in open(file).readlines():
         res = p.search(line)
         if res != None:
             (classtype, optAll, opt, opt1, desc) = res.groups()
-            avai = {'LaTeX':'false', 'DocBook':bool_docbook, 'LinuxDoc':bool_linuxdoc}[classtype]
+            avai = {'LaTeX':'false', 'DocBook':bool_docbook}[classtype]
             if opt == None:
                 opt = classname
             return '"%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai)
-    print "Layout file without \DeclareXXClass line. "
-    sys.exit(2)
+    print "Layout file " + file + " has no \DeclareXXClass line. "
+    return ""
 
-    
-def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
+
+def checkLatexConfig(check_config, bool_docbook):
     ''' Explore the LaTeX configuration 
         Return None (will be passed to sys.exit()) for success.
     '''
@@ -634,7 +667,9 @@ def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
             # make sure the same class is not considered twice
             if foundClasses.count(cleanclass) == 0: # not found before
                 foundClasses.append(cleanclass)
-                tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc))
+                retval = processLayoutFile(file, bool_docbook)
+                if retval != "":
+                    tx.write(retval)
         tx.close()
         print '\tdone'
     if not check_config:
@@ -648,8 +683,7 @@ def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
         if not os.path.isfile( 'chkconfig.ltx' ):
             shutil.copyfile( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' )
             rmcopy = True
-        writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \
-            % (linuxdoc_cmd, docbook_cmd) )
+        writeToFile('wrap_chkconfig.ltx', '%s\n\\input{chkconfig.ltx}\n' % docbook_cmd)
         # Construct the list of classes to test for.
         # build the list of available layout files and convert it to commands
         # for chkconfig.ltx
@@ -726,12 +760,14 @@ def checkModulesConfig():
       print file
       if not os.path.isfile(file): 
           continue
-      tx.write(processModuleFile(file, bool_docbook, bool_linuxdoc))
+      retval = processModuleFile(file, bool_docbook)
+      if retval != "":
+          tx.write(retval)
   tx.close()
   print '\tdone'
 
 
-def processModuleFile(file, bool_docbook, bool_linuxdoc):
+def processModuleFile(file, bool_docbook):
     ''' process module file and get a line of result
 
         The top of a module file should look like this:
@@ -754,6 +790,8 @@ def processModuleFile(file, bool_docbook, bool_linuxdoc):
     modname = desc = pkgs = req = excl = ""
     readingDescription = False
     descLines = []
+    filename = file.split(os.sep)[-1]
+    filename = filename[:-7]
 
     for line in open(file).readlines():
       if readingDescription:
@@ -776,8 +814,6 @@ def processModuleFile(file, bool_docbook, bool_linuxdoc):
           else:
             tmp = [s.strip() for s in pkgs.split(",")]
             pkgs = ",".join(tmp)
-
-          filename = file.split(os.sep)[-1]
           continue
       res = r.search(line)
       if res != None:
@@ -794,7 +830,7 @@ def processModuleFile(file, bool_docbook, bool_linuxdoc):
     if modname != "":
         return '"%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl)
     print "Module file without \DeclareLyXModule line. "
-    sys.exit(2)
+    return ""
 
 
 def checkTeXAllowSpaces():
@@ -881,15 +917,13 @@ Options:
     LATEX = checkLatex(dtl_tools)
     checkFormatEntries(dtl_tools)
     checkConverterEntries()
-    (chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc()
     (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
     checkTeXAllowSpaces()
     if windows_style_tex_paths != '':
         addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
     checkOtherEntries()
     # --without-latex-config can disable lyx_check_config
-    ret = checkLatexConfig(lyx_check_config and LATEX != '',
-        bool_docbook, bool_linuxdoc)
+    ret = checkLatexConfig(lyx_check_config and LATEX != '', bool_docbook)
     checkModulesConfig() #lyx_check_config and LATEX != '')
     removeTempFiles()
     # The return error code can be 256. Because most systems expect an error code