]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
Move the NoNewLineValidator to Validator.cpp where it fits better.
[lyx.git] / lib / configure.py
index b6d3152ced90f2caa85a7334c20e0bc742bf8418..40977810c71b18a92fc70ba751667189c730aebc 100644 (file)
@@ -170,10 +170,15 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''):
         sys.exit(2)
     logger.info('checking for ' + description + '...')
     ## print '(' + ','.join(progs) + ')',
+    global java, perl
     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]
+        if (ac_word.endswith('.class') or ac_word.endswith('.jar')) and java == '':
+            continue
+        if ac_word.endswith('.pl') and perl == '':
+            continue
         msg = '+checking for "' + ac_word + '"... '
         path = os.environ["PATH"].split(os.pathsep) + path
         extlist = ['']
@@ -183,6 +188,13 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''):
             for ext in extlist:
                 if os.path.isfile( os.path.join(ac_dir, ac_word + ext) ):
                     logger.info(msg + ' yes')
+                    # deal with java and perl
+                    if ac_word.endswith('.class'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s \"%s\"' % (java, os.path.join(ac_dir, ac_word[:-6])))
+                    elif ac_word.endswith('.jar'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word)))
+                    elif ac_word.endswith('.pl'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word)))
                     # write rc entries for this command
                     if len(rc_entry) == 1:
                         addToRC(rc_entry[0].replace('%%', ac_prog))
@@ -211,10 +223,15 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [],
     found_prime = False
     real_ac_dir = ''
     real_ac_word = not_found
+    global java, perl
     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]
+        if (ac_word.endswith('.class') or ac_word.endswith('.jar')) and java == '':
+            continue
+        if ac_word.endswith('.pl') and perl == '':
+            continue
         msg = '+checking for "' + ac_word + '"... '
         path = os.environ["PATH"].split(os.pathsep) + path
         extlist = ['']
@@ -227,6 +244,13 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [],
                     logger.info(msg + ' yes')
                     pr = re.compile(r'(\\\S+)(.*)$')
                     m = None
+                    # deal with java and perl
+                    if ac_word.endswith('.class'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s \"%s\"' % (java, os.path.join(ac_dir, ac_word[:-6])))
+                    elif ac_word.endswith('.jar'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word)))
+                    elif ac_word.endswith('.pl'):
+                        ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word)))
                     # write rc entries for this command
                     if found_prime == False:
                         if len(rc_entry) == 1:
@@ -284,13 +308,13 @@ def addAlternatives(rcs, alt_type):
         if len(rcs) == 1:
             m = r.match(rcs[0])
             if m:
-                alt = '\n'.join([s + m.group(1) + " %%" for s in alt_tokens])
+                alt = '\n'.join([s + m.group(1) + ' "%%"' for s in alt_tokens])
         elif len(rcs) > 1:
             m = r.match(rcs[idxx])
             if m:
                 if idxx > 0:
                     alt += '\n'
-                alt += '\n'.join([s + m.group(1) + " %%" for s in alt_tokens])
+                alt += '\n'.join([s + m.group(1) + ' "%%"' for s in alt_tokens])
     return alt
 
 
@@ -462,7 +486,10 @@ def checkFormatEntries(dtl_tools):
         rc_entry = [r'\Format fig        fig     FIG                    "" "%%"        "%%"    "vector"'])
     #
     checkViewerEditor('a Dia viewer and editor', ['dia'],
-        rc_entry = [r'\Format dia        dia     DIA                    "" "%%"        "%%"    "vector"'])
+        rc_entry = [r'\Format dia        dia     DIA                    "" "%%"        "%%"    "vector,zipped=native"'])
+    #
+    checkViewerEditor('an OpenOffice drawing viewer and editor', ['libreoffice', 'ooffice', 'oodraw', 'soffice'],
+        rc_entry = [r'\Format odg        "odg, sxd" "OpenOffice drawing"   "" "%%"     "%%"    "vector,zipped=native"'])
     #
     checkViewerEditor('a Grace viewer and editor', ['xmgrace'],
         rc_entry = [r'\Format agr        agr     Grace                  "" "%%"        "%%"    "vector"'])
@@ -476,7 +503,7 @@ def checkFormatEntries(dtl_tools):
     path, iv = checkViewerNoRC('a raster image viewer', ['xv', 'kview', 'gimp-remote', 'gimp'],
         rc_entry = [r'''\Format bmp        bmp     BMP                    "" "%s"      "%s"    ""
 \Format gif        gif     GIF                    "" "%s"      "%s"    ""
-\Format jpg        jpg     JPEG                   "" "%s"      "%s"    ""
+\Format jpg       "jpg, jpeg" JPEG                "" "%s"      "%s"    ""
 \Format pbm        pbm     PBM                    "" "%s"      "%s"    ""
 \Format pgm        pgm     PGM                    "" "%s"      "%s"    ""
 \Format png        png     PNG                    "" "%s"      "%s"    ""
@@ -487,7 +514,7 @@ def checkFormatEntries(dtl_tools):
     path, ie = checkEditorNoRC('a raster image editor', ['gimp-remote', 'gimp'],
         rc_entry = [r'''\Format bmp        bmp     BMP                    "" "%s"      "%s"    ""
 \Format gif        gif     GIF                    "" "%s"      "%s"    ""
-\Format jpg        jpg     JPEG                   "" "%s"      "%s"    ""
+\Format jpg       "jpg, jpeg" JPEG                "" "%s"      "%s"    ""
 \Format pbm        pbm     PBM                    "" "%s"      "%s"    ""
 \Format pgm        pgm     PGM                    "" "%s"      "%s"    ""
 \Format png        png     PNG                    "" "%s"      "%s"    ""
@@ -497,7 +524,7 @@ def checkFormatEntries(dtl_tools):
 \Format xpm        xpm     XPM                    "" "%s"      "%s"    ""'''])
     addToRC(r'''\Format bmp        bmp     BMP                    "" "%s"      "%s"    ""
 \Format gif        gif     GIF                    "" "%s"      "%s"    ""
-\Format jpg        jpg     JPEG                   "" "%s"      "%s"    ""
+\Format jpg       "jpg, jpeg" JPEG                "" "%s"      "%s"    ""
 \Format pbm        pbm     PBM                    "" "%s"      "%s"    ""
 \Format pgm        pgm     PGM                    "" "%s"      "%s"    ""
 \Format png        png     PNG                    "" "%s"      "%s"    ""
@@ -537,10 +564,8 @@ def checkFormatEntries(dtl_tools):
 \Format excel      xls    "Excel spreadsheet"      "" "" "%%"    "document"
 \Format oocalc     ods    "OpenOffice spreadsheet" "" "" "%%"    "document"'''])
  #
-    path, xhtmlview = checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
+    checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
         rc_entry = [r'\Format xhtml      xhtml   "LyXHTML"              y "%%" ""    "document,menu=export"'])
-    if xhtmlview == "":
-        addToRC(r'\Format xhtml      xhtml   "LyXHTML"              y "" ""  "document,menu=export"')
  #
     checkEditor('a BibTeX editor', ['jabref', 'JabRef', \
         'pybliographic', 'bibdesk', 'gbib', 'kbib', \
@@ -571,7 +596,7 @@ def checkFormatEntries(dtl_tools):
         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,menu=export"'])
+        rc_entry = [r'\Format html      "html, htm" HTML                H  "%%"        ""      "document,menu=export"'])
     #
     checkViewerEditor('Noteedit', ['noteedit'],
         rc_entry = [r'\Format noteedit   not     Noteedit               "" "%%"        "%%"    "vector"'])
@@ -598,18 +623,16 @@ 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-lytex  lyxpreview-lytex  "LyX Preview (LilyPond book)" "" ""        ""      ""
-\Format lyxpreview-platex lyxpreview-platex "LyX Preview (pLaTeX)"       "" "" ""      ""
 \Format pdftex     pdftex_t PDFTEX                "" ""        ""      ""
 \Format program    ""      Program                "" ""        ""      ""
 \Format pstex      pstex_t PSTEX                  "" ""        ""      ""
 \Format wmf        wmf    "Windows Metafile"      "" ""        ""      "vector"
 \Format emf        emf    "Enhanced Metafile"     "" ""        ""      "vector"
-\Format wordhtml   html   "HTML (MS Word)"        "" "" ""     "document"
+\Format wordhtml  "html, htm" "HTML (MS Word)"    "" "" ""     "document"
 ''')
 
 
-def checkConverterEntries(java='', perl=''):
+def checkConverterEntries():
     ''' Check all converters (\converter entries) '''
     checkProg('the pdflatex program', ['pdflatex $$i'],
         rc_entry = [ r'\converter pdflatex   pdf2       "%%"   "latex=pdflatex"' ])
@@ -619,21 +642,20 @@ def checkConverterEntries(java='', perl=''):
 
     checkLuatex()
 
-    ''' If we're running LyX in-place then tex2lyx will be found in
-            ../src/tex2lyx. Add this directory to the PATH temporarily and
-            search for tex2lyx.
-            Use PATH to avoid any problems with paths-with-spaces.
-    '''
-    path_orig = os.environ["PATH"]
-    os.environ["PATH"] = os.path.join('..', 'src', 'tex2lyx') + \
-        os.pathsep + path_orig
+    # Look for tex2lyx in this order (see bugs #3308 and #6986):
+    #   1)  If we're running LyX in-place then tex2lyx will be found
+    #       in ../src/tex2lyx with respect to the srcdir.
+    #   2)  If LyX was configured with a version suffix then tex2lyx
+    #       will also have this version suffix.
+    #   3)  Otherwise always use tex2lyx.
+    in_place = os.path.join(srcdir, '..', 'src', 'tex2lyx', 'tex2lyx')
+    in_place = os.path.abspath(in_place)
 
-# First search for tex2lyx with version suffix (bug 6986)
-    checkProg('a LaTeX/Noweb -> LyX converter', ['tex2lyx' + version_suffix, 'tex2lyx'],
+    path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [in_place, 'tex2lyx' + version_suffix, 'tex2lyx'],
         rc_entry = [r'''\converter latex      lyx        "%% -f $$i $$o"       ""
-\converter literate   lyx        "%% -n -f $$i $$o"    ""'''])
-
-    os.environ["PATH"] = path_orig
+\converter literate   lyx        "%% -n -f $$i $$o"    ""'''], not_found = 'tex2lyx')
+    if path == '':
+        logger.warning("Failed to find tex2lyx on your system.")
 
     #
     checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'],
@@ -649,14 +671,9 @@ def checkConverterEntries(java='', perl=''):
     checkProg('a Sweave -> R/S code converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxstangle.R $$i $$e $$r'], 
         rc_entry = [ r'\converter sweave      r      "%%"    ""' ])
     #
-    path, htmltolatex = checkProg('an HTML -> LaTeX converter', ['html2latex $$i',
-        'gnuhtml2latex $$i', 'htmltolatex -input $$i -output $$o', 'htmltolatex.jar'],
-        rc_entry = [ r'\converter html       latex      "%%"   ""',
-                     r'\converter html       latex      "%%"   ""',
-                     r'\converter html       latex      "%%"   ""', '', ''] )
-    if htmltolatex == 'htmltolatex.jar' and java != '':
-        addToRC(r'\converter html       latex      "%s -jar \"%s\" -input $$i -output $$o"     ""'
-            % (java, os.path.join(path, htmltolatex)))
+    checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i',
+        'htmltolatex -input $$i -output $$o', 'htmltolatex.jar -input $$i -output $$o'],
+        rc_entry = [ r'\converter html       latex      "%%"   ""' ])
     #
     checkProg('an MS Word -> LaTeX converter', ['wvCleanLatex $$i $$o'],
         rc_entry = [ r'\converter word       latex      "%%"   ""' ])
@@ -748,19 +765,6 @@ def checkConverterEntries(java='', perl=''):
     checkProg('a DVI to PDF converter', ['dvipdfmx -o $$o $$i', 'dvipdfm -o $$o $$i'],
         rc_entry = [ r'\converter dvi        pdf3       "%%"   ""' ])
     #
-    path, dvipng = checkProg('dvipng', ['dvipng'])
-    path, dv2dt  = checkProg('DVI to DTL converter', ['dv2dt'])
-    if dvipng == "dvipng" and dv2dt == 'dv2dt':
-        addToRC(r'\converter lyxpreview png        "python -tt $$s/scripts/lyxpreview2bitmap.py"       ""')
-    else:
-        # set empty converter to override the default imagemagick
-        addToRC(r'\converter lyxpreview png        ""  ""')
-    if dv2dt == 'dv2dt':
-        addToRC(r'\converter lyxpreview ppm        "python -tt $$s/scripts/lyxpreview2bitmap.py"       ""')
-    else:
-        # set empty converter to override the default imagemagick
-        addToRC(r'\converter lyxpreview ppm        ""  ""')
-    #
     checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i', 'hylapex $$i'],
         rc_entry = [ r'\converter ps         fax        "%%"   ""'])
     #
@@ -815,6 +819,9 @@ def checkConverterEntries(java='', perl=''):
     checkProg('a Dia -> EPS converter', ['dia -e $$o -t eps $$i'],
         rc_entry = [ r'\converter dia        eps        "%%"   ""'])
     #
+    checkProg('an OpenOffice -> EPS converter', ['libreoffice'],
+        rc_entry = [ r'\converter odg        eps        "python -tt $$s/scripts/libreoffice2eps.py $$i $$o"    ""'])
+    #
     checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
         rc_entry = [ r'\converter svg        pdf        "%%"   ""'])
     #
@@ -828,8 +835,8 @@ def checkConverterEntries(java='', perl=''):
     # gnumeric/xls/ods to tex
     checkProg('a spreadsheet -> latex converter', ['ssconvert'],
        rc_entry = [ r'''\converter gnumeric latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
-\converter ods latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
-\converter xls latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""''',
+\converter oocalc latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
+\converter excel  latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""''',
 ''])
 
     path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
@@ -863,16 +870,6 @@ def checkConverterEntries(java='', perl=''):
             version_number = match.groups()[0]
             version = version_number.split('.')
             if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 13):
-                if dv2dt == 'dv2dt':
-                    addToRC(r'\converter lyxpreview-lytex ppm "python -tt $$s/scripts/lyxpreview-lytex2bitmap.py" ""')
-                else:
-                    # set empty converter to override the default imagemagick
-                    addToRC(r'\converter lyxpreview-lytex ppm "" ""')
-                if dvipng == "dvipng" and dv2dt == 'dv2dt':
-                    addToRC(r'\converter lyxpreview-lytex png "python -tt $$s/scripts/lyxpreview-lytex2bitmap.py" ""')
-                else:
-                    # set empty converter to override the default imagemagick
-                    addToRC(r'\converter lyxpreview-lytex png "" ""')
                 # Note: The --lily-output-dir flag is required because lilypond-book
                 #       does not process input again unless the input has changed,
                 #       even if the output format being requested is different. So
@@ -909,7 +906,7 @@ def checkConverterEntries(java='', perl=''):
     # checkProg('Image converter', ['convert $$i $$o'])
     #
     # Entries that do not need checkProg
-    addToRC(r'''\converter lyxpreview-platex ppm        "python -tt $$s/scripts/lyxpreview-platex2bitmap.py"   ""
+    addToRC(r'''
 \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"
@@ -925,6 +922,8 @@ def checkConverterEntries(java='', perl=''):
 \converter clyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c big5 $$i > $$o"    ""
 \converter jlyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp $$i > $$o"  ""
 \converter klyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr $$i > $$o"  ""
+\converter lyxpreview png        "python -tt $$s/scripts/lyxpreview2bitmap.py --png"   ""
+\converter lyxpreview ppm        "python -tt $$s/scripts/lyxpreview2bitmap.py --ppm"   ""
 ''')
 
 
@@ -947,7 +946,7 @@ def checkDocBook():
         return ('no', 'false', '')
 
 
-def checkOtherEntries(java='', perl=''):
+def checkOtherEntries():
     ''' entries other than Format and Converter '''
     checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'],
         rc_entry = [ r'\chktex_command "%%"' ])
@@ -961,12 +960,8 @@ def checkOtherEntries(java='', perl=''):
         alt_rc_entry = [ r'\index_alternatives "%%"' ])
     checkProg('an index processor appropriate to Japanese', ['mendex -c -q', 'jmakeindex -c -q', 'makeindex -c -q'],
         rc_entry = [ r'\jindex_command "%%"' ])
-    path, splitindex = checkProg('the splitindex processor', ['splitindex.pl', 'splitindex',
-        'splitindex.class'], rc_entry = ['', r'\splitindex_command "%%"', '', ''])
-    if splitindex == 'splitindex.pl' and perl != '':
-        addToRC(r'\splitindex_command "%s -w \"%s\""' % (perl, os.path.join(path, splitindex)))
-    elif splitindex == 'splitindex.class' and java != '':
-        addToRC(r'\splitindex_command "%s \"%s\""' % (java, os.path.join(path, 'splitindex')))
+    checkProg('the splitindex processor', ['splitindex.pl', 'splitindex',
+        'splitindex.class'], rc_entry = [ r'\splitindex_command "%%"' ])
     checkProg('a nomenclature processor', ['makeindex'],
         rc_entry = [ r'\nomencl_command "makeindex -s nomencl.ist"' ])
     ## FIXME: OCTAVE is not used anywhere
@@ -1312,7 +1307,7 @@ def removeTempFiles():
 if __name__ == '__main__':
     lyx_check_config = True
     outfile = 'lyxrc.defaults'
-    lyxrc_fileformat = 1
+    lyxrc_fileformat = 3
     rc_entries = ''
     lyx_keep_temps = False
     version_suffix = ''
@@ -1360,16 +1355,17 @@ Format %i
 ''' % lyxrc_fileformat)
     # check latex
     LATEX = checkLatex(dtl_tools)
-    checkFormatEntries(dtl_tools)
+    # check java and perl before any checkProg that may require them
     java = checkProg('a java interpreter', ['java'])[1]
     perl = checkProg('a perl interpreter', ['perl'])[1]
-    checkConverterEntries(java, perl)
+    checkFormatEntries(dtl_tools)
+    checkConverterEntries()
     (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
     checkTeXAllowSpaces()
     windows_style_tex_paths = checkTeXPaths()
     if windows_style_tex_paths != '':
         addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
-    checkOtherEntries(java, perl)
+    checkOtherEntries()
     checkModulesConfig()
     # --without-latex-config can disable lyx_check_config
     ret = checkLatexConfig(lyx_check_config and LATEX != '', bool_docbook)