]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
configure.py : white space only
[lyx.git] / lib / configure.py
index 6265253cd6e1702943dee3aa4661af3b5ca1fa9b..6c35bbfbea68ce56ea82812ccbb786865aece9d1 100644 (file)
@@ -102,7 +102,15 @@ def checkTeXPaths():
         from tempfile import mkstemp
         fd, tmpfname = mkstemp(suffix='.ltx')
         if os.name == 'nt':
-            inpname = tmpfname.replace('\\', '/')
+            from ctypes import windll, create_unicode_buffer
+            GetShortPathName = windll.kernel32.GetShortPathNameW
+            longname = unicode(tmpfname)
+            shortlen = GetShortPathName(longname, 0, 0)
+            shortname = create_unicode_buffer(shortlen)
+            if GetShortPathName(longname, shortname, shortlen):
+                inpname = shortname.value.replace('\\', '/')
+            else:
+                inpname = tmpfname.replace('\\', '/')
         else:
             inpname = cmdOutput('cygpath -m ' + tmpfname)
         logname = os.path.basename(inpname.replace('.ltx', '.log'))
@@ -110,6 +118,8 @@ def checkTeXPaths():
         os.write(fd, r'\relax')
         os.close(fd)
         latex_out = cmdOutput(r'latex "\nonstopmode\input{%s}"' % inpname)
+        if 'Error' in latex_out:
+            latex_out = cmdOutput(r'latex "\nonstopmode\input{\"%s\"}"' % inpname)
         if 'Error' in latex_out:
             logger.warning("configure: TeX engine needs posix-style paths in latex files")
             windows_style_tex_paths = 'false'
@@ -138,9 +148,9 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''):
             1. emtpy: no rc entry will be added
             2. one pattern: %% will be replaced by the first found program,
                 or '' if no program is found.
-            3. several patterns for each prog and not_found. This is used 
-                when different programs have different usages. If you do not 
-                want not_found entry to be added to the RC file, you can specify 
+            3. several patterns for each prog and not_found. This is used
+                when different programs have different usages. If you do not
+                want not_found entry to be added to the RC file, you can specify
                 an entry for each prog and use '' for the not_found entry.
 
         not_found: the value that should be used instead of '' if no program
@@ -181,7 +191,7 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''):
 
 
 def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], path = [], not_found = ''):
-    ''' 
+    '''
         The same as checkProg, but additionally, all found programs will be added
         as alt_rc_entries
     '''
@@ -398,7 +408,7 @@ def checkLatex(dtl_tools):
             PLATEX = ''
             removeFiles(['chklatex.ltx', 'chklatex.log'])
     #-----------------------------------------------------------------
-    # use LATEX to convert from latex to dvi if PPLATEX is not available    
+    # use LATEX to convert from latex to dvi if PPLATEX is not available
     if PPLATEX == '':
         PPLATEX = LATEX
     if dtl_tools:
@@ -456,9 +466,9 @@ def checkLuatex():
             logger.info(msg + ' yes')
             addToRC(r'\converter luatex      pdf5       "%s"   "latex=lualatex"' % LUATEX)
             if DVILUATEX != '':
-                addToRC(r'\converter luatex      dvi3        "%s"      "latex=lualatex"' % DVILUATEX)   
+                addToRC(r'\converter luatex      dvi3        "%s"      "latex=lualatex"' % DVILUATEX)
         # remove temporary files
-        removeFiles(['luatest.tex', 'luatest.log'])
+        removeFiles(['luatest.tex', 'luatest.log', 'luatest.aux', 'luatest.pdf'])
 
 
 def checkModule(module):
@@ -473,7 +483,7 @@ def checkModule(module):
       return False
 
 
-def checkFormatEntries(dtl_tools):  
+def checkFormatEntries(dtl_tools):
     ''' Check all formats (\Format entries) '''
     checkViewerEditor('a Tgif viewer and editor', ['tgif'],
         rc_entry = [r'\Format tgif       obj     Tgif                   "" "%%"        "%%"    "vector"'])
@@ -527,7 +537,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) )
     #
-    checkViewerEditor('a text editor', ['sensible-editor', 'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+    checkViewerEditor('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)"         "" ""   "%%"    ""
@@ -540,7 +550,7 @@ def checkFormatEntries(dtl_tools):
 \Format literate   nw      NoWeb                  N  ""        "%%"    "document,menu=export"
 \Format sweave     Rnw    "Sweave"                S  "" "%%"    "document,menu=export"
 \Format lilypond   ly     "LilyPond music"        "" ""        "%%"    "vector"
-\Format lilypond-book    lytex "LilyPond book (LaTeX)"   "" "" "%%"    "document"
+\Format lilypond-book    lytex "LilyPond book (LaTeX)"   "" "" "%%"    "document,menu=export"
 \Format latex      tex    "LaTeX (plain)"         L  ""        "%%"    "document,menu=export"
 \Format luatex     tex    "LaTeX (LuaTeX)"        "" ""        "%%"    "document,menu=export"
 \Format pdflatex   tex    "LaTeX (pdflatex)"      "" ""        "%%"    "document,menu=export"
@@ -551,17 +561,17 @@ def checkFormatEntries(dtl_tools):
 \Format text4      txt    "Plain text (catdvi)"   "" ""        "%%"    "document"
 \Format textparagraph txt "Plain Text, Join Lines" "" ""       "%%"    "document"''' ])
    #Spreadsheets using ssconvert from gnumeric
-    checkViewer('gnumeric spreadsheet software', ['gnumeric'], 
-      rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" ""    "%%"   "document" 
-\Format excel      xls    "Excel spreadsheet"      "" "" "%%"    "document" 
-\Format oocalc     ods    "OpenOffice spreadsheet" "" "" "%%"    "document"''']) 
+    checkViewer('gnumeric spreadsheet software', ['gnumeric'],
+      rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" ""    "%%"   "document"
+\Format excel      xls    "Excel spreadsheet"      "" "" "%%"    "document"
+\Format oocalc     ods    "OpenOffice spreadsheet" "" "" "%%"    "document"'''])
  #
     path, xhtmlview = 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', ['sensible-editor', 'jabref', 'JabRef', \
+    checkEditor('a BibTeX editor', ['jabref', 'JabRef', \
         'pybliographic', 'bibdesk', 'gbib', 'kbib', \
         'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \
         'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
@@ -598,7 +608,7 @@ def checkFormatEntries(dtl_tools):
     checkViewerEditor('an OpenDocument/OpenOffice viewer', ['swriter', 'oowriter', 'abiword'],
         rc_entry = [r'''\Format odt        odt     OpenDocument           "" "%%"      "%%"    "document,vector,menu=export"
 \Format sxw        sxw    "OpenOffice.Org (sxw)"  "" ""        ""      "document,vector"'''])
-    # 
+    #
     checkViewerEditor('a Rich Text and Word viewer', ['swriter', 'oowriter', 'abiword'],
         rc_entry = [r'''\Format rtf        rtf    "Rich Text Format"      "" "%%"      "%%"    "document,vector,menu=export"
 \Format word       doc    "MS Word"               W  "%%"      "%%"    "document,vector,menu=export"'''])
@@ -636,7 +646,7 @@ def checkConverterEntries():
         rc_entry = [ r'\converter xetex      pdf4       "%%"   "latex=xelatex"' ])
 
     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.
@@ -660,7 +670,9 @@ def checkConverterEntries():
     #
     checkProg('a Sweave -> LaTeX converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$p$$o $$e $$r'],
         rc_entry = [r'''\converter sweave   latex      "%%"    ""
-\converter sweave   pdflatex      "%%" ""'''])
+\converter sweave   pdflatex   "%%"    ""
+\converter sweave   xetex      "%%"    ""
+\converter sweave   luatex     "%%"    ""'''])
     #
     checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i', \
         'htmltolatex -input $$i -output $$o', 'java -jar htmltolatex.jar -input $$i -output $$o'],
@@ -768,7 +780,7 @@ def checkConverterEntries():
     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        "%%"   ""'])
     #
@@ -823,22 +835,22 @@ def checkConverterEntries():
     checkProg('a Dia -> EPS converter', ['dia -e $$o -t eps $$i'],
         rc_entry = [ r'\converter dia        eps        "%%"   ""'])
     #
-    checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$p/$$i --export-area-drawing --without-gui --export-pdf=$$p/$$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        "%%"   ""'])
     #
-    checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$p/$$i --export-area-drawing --without-gui --export-eps=$$p/$$o'],
+    checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
         rc_entry = [ r'\converter svg        eps        "%%"   ""'])
-    # the PNG export via Inkscape must not have the full path ($$p) for the file
+    #
     checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 'inkscape --without-gui --file=$$i --export-png=$$o'],
         rc_entry = [ r'\converter svg        png        "%%"   ""'])
-    
+
     #
     # 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" ""''', 
-'']) 
+    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" ""''',
+''])
 
     path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
     if (lilypond != ''):
@@ -890,6 +902,8 @@ def checkConverterEntries():
                 #       this, use different output folders for eps and pdf outputs.
                 addToRC(r'\converter lilypond-book latex    "lilypond-book --safe --lily-output-dir=ly-eps $$i"                                ""')
                 addToRC(r'\converter lilypond-book pdflatex "lilypond-book --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$i" ""')
+                addToRC(r'\converter lilypond-book xetex    "lilypond-book --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$i"  ""')
+                addToRC(r'\converter lilypond-book luatex   "lilypond-book --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$i" ""')
                 logger.info('+  found LilyPond-book version %s.' % version_number)
             else:
                 logger.info('+  found LilyPond-book, but version %s is too old.' % version_number)
@@ -909,7 +923,7 @@ def checkConverterEntries():
     else:
         addToRC(r'\Format lyxgz      gz     "LyX Archive (tar.gz)"  "" "" ""  "document,menu=export"')
         addToRC(cmd % "lyxgz")
-        
+
     #
     # FIXME: no rc_entry? comment it out
     # checkProg('Image converter', ['convert $$i $$o'])
@@ -994,15 +1008,15 @@ def checkOtherEntries():
 
 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)
-        
+
         \DeclareLaTeXClass{article}
         \DeclareLaTeXClass[scrbook]{book (koma-script)}
         \DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)}
 
         we expect output:
-        
+
         "article" "article" "article" "false" "article.cls"
         "scrbook" "scrbook" "book (koma-script)" "false" "scrbook.cls"
         "svjog" "svjour" "article (Springer - svjour/jog)" "false" "svjour.cls,svjog.clo"
@@ -1037,11 +1051,11 @@ def processLayoutFile(file, bool_docbook):
 
 
 def checkLatexConfig(check_config, bool_docbook):
-    ''' Explore the LaTeX configuration 
+    ''' Explore the LaTeX configuration
         Return None (will be passed to sys.exit()) for success.
     '''
     msg = 'checking LaTeX configuration... '
-    # if --without-latex-config is forced, or if there is no previous 
+    # if --without-latex-config is forced, or if there is no previous
     # version of textclass.lst, re-generate a default file.
     if not os.path.isfile('textclass.lst') or not check_config:
         # remove the files only if we want to regenerate
@@ -1065,7 +1079,7 @@ def checkLatexConfig(check_config, bool_docbook):
         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): 
+            if not os.path.isfile(file):
                 continue
             # get stuff between /xxxx.layout .
             classname = file.split(os.sep)[-1].split('.')[0]
@@ -1138,7 +1152,7 @@ def checkLatexConfig(check_config, bool_docbook):
         key, val = re.sub('-', '_', line).split('=')
         val = val.strip()
         values[key] = val.strip("'")
-    # chk_fontenc may not exist 
+    # chk_fontenc may not exist
     try:
         addToRC(r'\font_encoding "%s"' % values["chk_fontenc"])
     except:
@@ -1162,25 +1176,35 @@ def checkModulesConfig():
   tx.write('''## This file declares modules and their associated definition files.
 ## It has been automatically generated by configure
 ## Use "Options/Reconfigure" if you need to update it after a
-## configuration change. 
+## configuration change.
 ## "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
 ''')
+
   # build the list of available modules
-  foundClasses = []
+  seen = []
+  # note that this searches the local directory first, then the
+  # system directory. that way, we pick up the user's version first.
   for file in glob.glob( os.path.join('layouts', '*.module') ) + \
       glob.glob( os.path.join(srcdir, 'layouts', '*.module' ) ) :
       # valid file?
       logger.info(file)
-      if not os.path.isfile(file): 
+      if not os.path.isfile(file):
+          continue
+
+      filename = file.split(os.sep)[-1]
+      filename = filename[:-7]
+      if seen.count(filename):
           continue
-      retval = processModuleFile(file, bool_docbook)
+
+      seen.append(filename)
+      retval = processModuleFile(file, filename, bool_docbook)
       if retval != "":
           tx.write(retval)
   tx.close()
   logger.info('\tdone')
 
 
-def processModuleFile(file, bool_docbook):
+def processModuleFile(file, filename, bool_docbook):
     ''' process module file and get a line of result
 
         The top of a module file should look like this:
@@ -1205,8 +1229,6 @@ def processModuleFile(file, bool_docbook):
     modname = desc = pkgs = req = excl = catgy = ""
     readingDescription = False
     descLines = []
-    filename = file.split(os.sep)[-1]
-    filename = filename[:-7]
 
     for line in open(file).readlines():
       if readingDescription:
@@ -1271,7 +1293,6 @@ def processModuleFile(file, bool_docbook):
         cm.close()
 
     return '"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl, catgy)
-    
 
 
 def checkTeXAllowSpaces():
@@ -1281,7 +1302,7 @@ def checkTeXAllowSpaces():
         msg = "Checking whether TeX allows spaces in file names... "
         writeToFile('a b.tex', r'\message{working^^J}' )
         if LATEX != '':
-            if os.name == 'nt':
+            if os.name == 'nt' or sys.platform == 'cygwin':
                 latex_out = cmdOutput(LATEX + r""" "\nonstopmode\input{\"a b\"}" """)
             else:
                 latex_out = cmdOutput(LATEX + r""" '\nonstopmode\input{"a b"}' """)
@@ -1300,15 +1321,16 @@ def checkTeXAllowSpaces():
 def removeTempFiles():
     # Final clean-up
     if not lyx_keep_temps:
-        removeFiles(['chkconfig.vars',  \
+        removeFiles(['chkconfig.vars', \
             'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \
-            'chklayouts.tex', 'chkmodules.tex', 'missfont.log', 
+            'chklayouts.tex', 'chkmodules.tex', 'missfont.log',
             'chklatex.ltx', 'chklatex.log'])
 
 
 if __name__ == '__main__':
     lyx_check_config = True
     outfile = 'lyxrc.defaults'
+    lyxrc_fileformat = 1
     rc_entries = ''
     lyx_keep_temps = False
     version_suffix = ''
@@ -1347,10 +1369,13 @@ Options:
     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, use LyX' Preferences dialog or modify directly 
+# want to customize LyX, use LyX' Preferences dialog or modify directly
 # the "preferences" file instead. Any setting in that file will
 # override the values given here.
-''')
+
+Format %i
+
+''' % lyxrc_fileformat)
     # check latex
     LATEX = checkLatex(dtl_tools)
     checkFormatEntries(dtl_tools)