]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
French Math.lyx: updates by Siegfried
[lyx.git] / lib / configure.py
index ded2ea9f343d6de2964048e728d1e7af6b42a519..1818bf62f038d34c1a99328be85a5ed7801e1619 100644 (file)
@@ -158,17 +158,19 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''):
         ac_word = ac_prog.split(' ')[0]
         print '+checking for "' + ac_word + '"... ',
         path = os.environ["PATH"].split(os.pathsep) + path
+        extlist = ['']
+        if os.environ.has_key("PATHEXT"):
+            extlist = extlist + os.environ["PATHEXT"].split(os.pathsep)
         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]
+            for ext in extlist:
+                if os.path.isfile( os.path.join(ac_dir, ac_word + ext) ):
+                    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'
@@ -196,14 +198,17 @@ def checkDTLtools():
 
 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'])
+    # use LATEX to convert from latex to dvi if PPLATEX is not available    
+    if PPLATEX == '':
+        PPLATEX = LATEX
     if dtl_tools:
         # Windows only: DraftDVI
-        converter_entry = r'''\converter latex      dvi2       "%%"    "latex"
-\converter dvi2       dvi        "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""'''
+        addToRC(r'''\converter latex      dvi2       "%s"      "latex"
+\converter dvi2       dvi        "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""''' % PPLATEX)
     else:
-        converter_entry = r'\converter latex      dvi        "%%"      "latex"'
-    path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'],
-        rc_entry = [converter_entry])
+        addToRC(r'\converter latex      dvi        "%s"        "latex"' % PPLATEX)
     # no latex
     if LATEX != '':
         # Check if latex is usable
@@ -253,7 +258,7 @@ def checkFormatEntries(dtl_tools):
 \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) )
     #
-    checkViewer('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+    checkViewer('a text editor', ['sensible-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)"         "" ""   "%%"    ""
@@ -288,7 +293,7 @@ def checkFormatEntries(dtl_tools):
         rc_entry = [r'\Format dvi        dvi     DVI                    D  "%%"        ""      "document,vector"'])
     if dtl_tools:
         # Windows only: DraftDVI
-        addToRC(r'\Format dvi2       dvi     DraftDVI               "" ""      "document,vector"')
+        addToRC(r'\Format dvi2       dvi     DraftDVI               "" ""      ""      "vector"')
     #
     checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
         rc_entry = [r'\Format html       html    HTML                   H  "%%"        ""      "document"'])
@@ -346,7 +351,8 @@ def checkConverterEntries():
     checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'],
         rc_entry = [ r'\converter literate   latex      "%%"   ""' ])
     #
-    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'],
@@ -376,14 +382,18 @@ def checkConverterEntries():
         rc_entry = [ r'\converter odt        latex      "%%"   ""' ])
     # 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', \
-        'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\''],
+    checkProg('a LaTeX -> Open Document converter', [
+        'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\'', \
+       'oolatex $$i', 'oolatex.sh $$i', \
+        '/usr/share/tex4ht/oolatex $$i'],
         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        "%%"   ""' ])
     #
@@ -393,6 +403,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 $$i $$o'],
+        rc_entry = [ r'\converter pdf         eps        "%%"  ""' ])
+    #
     checkProg('a DVI to TXT converter', ['catdvi $$i > $$o'],
         rc_entry = [ r'\converter dvi        text4      "%%"   ""' ])
     #
@@ -539,6 +558,8 @@ def checkOtherEntries():
             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('a spellchecker', ['ispell'],
         rc_entry = [ r'\spell_command "%%"' ])
     ## FIXME: OCTAVE is not used anywhere
@@ -725,35 +746,73 @@ def checkModulesConfig():
   tx.close()
   print '\tdone'
 
+
 def processModuleFile(file, bool_docbook, bool_linuxdoc):
     ''' process module file and get a line of result
 
-        Declare lines look like this:
-          \DeclareLyXModule[LaTeX Packages]{Description}{ModuleName}...
+        The top of a module file should look like this:
+          #\DeclareLyXModule[LaTeX Packages]{ModuleName}
+          #BeginDescription
+          #...body of description...
+          #EndDescription
+          #Requires: [list of required modules]
+          #Excludes: [list of excluded modules]
+        The last two lines are optional
         We expect output:
-          "ModuleName" "filename" "Description" "Packages"
-        "
+          "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes"
     '''
-    p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*)\])?{(.*)}{(.*)}')
+    p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
+    r = re.compile(r'#+\s*Requires: (.*)')
+    x = re.compile(r'#+\s*Excludes: (.*)')
+    b = re.compile(r'#+\s*DescriptionBegin\s*$')
+    e = re.compile(r'#+\s*DescriptionEnd\s*$')
+
+    modname = desc = pkgs = req = excl = ""
+    readingDescription = False
+    descLines = []
+    filename = file.split(os.sep)[-1]
+    filename = filename[:-7]
+
     for line in open(file).readlines():
-        res = p.search(line)
+      if readingDescription:
+        res = e.search(line)
         if res != None:
-            (packages, desc, modname) = res.groups()
-            #check availability...need to add that
-            if packages == None:
-              packages = ""
-            else:
-              pkgs = [s.strip() for s in packages.split(",")]
-              packages = ",".join(pkgs)
-
-            filename = file.split(os.sep)[-1]
-            return '"%s" "%s" "%s" "%s"\n' % (modname, filename, desc, packages)
+          readingDescription = False
+          desc = " ".join(descLines)
+          continue
+        descLines.append(line[1:].strip())
+        continue
+      res = b.search(line)
+      if res != None:
+        readingDescription = True
+        continue
+      res = p.search(line)
+      if res != None:
+          (pkgs, modname) = res.groups()
+          if pkgs == None:
+            pkgs = ""
+          else:
+            tmp = [s.strip() for s in pkgs.split(",")]
+            pkgs = ",".join(tmp)
+          continue
+      res = r.search(line)
+      if res != None:
+        req = res.group(1)
+        tmp = [s.strip() for s in req.split("|")]
+        req = "|".join(tmp)
+        continue
+      res = x.search(line)
+      if res != None:
+        excl = res.group(1)
+        tmp = [s.strip() for s in excl.split("|")]
+        excl = "|".join(tmp)
+        continue
+    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)
 
 
-
-
 def checkTeXAllowSpaces():
     ''' Let's check whether spaces are allowed in TeX file names '''
     tex_allows_spaces = 'false'
@@ -849,4 +908,7 @@ Options:
         bool_docbook, bool_linuxdoc)
     checkModulesConfig() #lyx_check_config and LATEX != '')
     removeTempFiles()
-    sys.exit(ret)
+    # The return error code can be 256. Because most systems expect an error code
+    # in the range 0-127, 256 can be interpretted as 'success'. Because we expect
+    # a None for success, 'ret is not None' is used to exit.
+    sys.exit(ret is not None)