sync cleanup of lib/configure.py with 1.5 (no functional changes)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_4_X@13739 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Georg Baum 2006-04-25 13:56:20 +00:00
parent 735707cc5e
commit 333c7161b1

View File

@ -4,7 +4,7 @@
# This file is part of LyX, the document processor. # This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING. # Licence details can be found in the file COPYING.
# author Bo Peng # \author Bo Peng
# Full author contact details are available in file CREDITS. # Full author contact details are available in file CREDITS.
# This is an experimental version of the configure script, written # This is an experimental version of the configure script, written
@ -15,12 +15,6 @@
import sys, os, re, shutil, glob 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): def writeToFile(filename, lines, append = False):
" utility function: write or append lines to filename " " utility function: write or append lines to filename "
@ -31,6 +25,7 @@ def writeToFile(filename, lines, append = False):
file.write(lines) file.write(lines)
file.close() file.close()
def addToRC(lines): def addToRC(lines):
''' utility function: shortcut for appending lines to outfile ''' utility function: shortcut for appending lines to outfile
add newline at the end of lines. add newline at the end of lines.
@ -38,9 +33,10 @@ def addToRC(lines):
if lines.strip() != '': if lines.strip() != '':
writeToFile(outfile, lines + '\n', append = True) writeToFile(outfile, lines + '\n', append = True)
def removeFiles(filenames): def removeFiles(filenames):
'''utility function: 'rm -f' '''utility function: 'rm -f'
ignore erroes when file does not exist, or is a directory. ignore errors when file does not exist, or is a directory.
''' '''
for file in filenames: for file in filenames:
try: try:
@ -48,6 +44,7 @@ def removeFiles(filenames):
except: except:
pass pass
def cmdOutput(cmd): def cmdOutput(cmd):
'''utility function: run a command and get its output as a string '''utility function: run a command and get its output as a string
cmd: command to run cmd: command to run
@ -57,79 +54,23 @@ def cmdOutput(cmd):
fout.close() fout.close()
return output.strip() return output.strip()
## Parse the command line
for op in sys.argv[1:]: # default shell/for list is $*, the options def setEnviron():
if op in [ '-help', '--help', '-h' ]: ''' I do not really know why this is useful, but we might as well keep it.
print '''Usage: configure [options] NLS nuisances.
Options: Only set these to C if already set. These must not be set unconditionally
--help show this help lines because not all systems understand e.g. LANG=C (notably SCO).
--keep-temps keep temporary files (for debug. purposes) Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
--without-latex-config do not run LaTeX to determine configuration Non-C LC_CTYPE values break the ctype check.
--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[22:]
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['LANG'] = os.getenv('LANG', 'C')
os.environ['LC'] = os.getenv('LC_ALL', 'C') os.environ['LC'] = os.getenv('LC_ALL', 'C')
os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C') os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C')
os.environ['LC_CTYPE'] = os.getenv('LC_CTYPE', '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) def createDirectories():
# ''' Create the build directories if necessary '''
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', \ for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \
'layouts', 'scripts', 'templates', 'ui' ]: 'layouts', 'scripts', 'templates', 'ui' ]:
if not os.path.isdir( dir ): if not os.path.isdir( dir ):
@ -139,14 +80,35 @@ for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \
print "Failed to create directory ", dir print "Failed to create directory ", dir
sys.exit(1) sys.exit(1)
## Write the first part of outfile
writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure def checkCygwinPath(srcdir):
# script. It contains default settings that have been determined by ''' Adjust PATH for Win32 (Cygwin) '''
# examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you if sys.platform == 'cygwin':
# want to customize LyX, make a copy of the file LYXDIR/lyxrc as from tempfile import mkstemp
# ~/.lyx/lyxrc and edit this file instead. Any setting in lyxrc will fd, tmpfname = mkstemp(suffix='.ltx')
# override the values given here. os.write(fd, r'''
\documentstyle{article}
\begin{document}\end{document}
''') ''')
os.close(fd)
inpname = cmdOutput('cygpath -m ' + tmpfname)
# a wrapper file
wfd, wtmpfname = mkstemp(suffix='.ltx')
wtmpfname = cmdOutput('cygpath -m ' + wtmpfname)
os.write(wfd, r'\input{' + inpname + '}' )
os.close(wfd)
if cmdOutput('latex ' + wtmpfname).find('Error') != -1:
print "configure: cygwin detected; path correction is not needed"
else:
print "configure: cygwin detected; path correction"
srcdir = cmdOutput('cygpath -m ' + srcdir)
print "srcdir = ", srcdir
addToRC(r'\cygwin_path_fix_needed true')
tmpbname,ext = os.path.splitext(os.path.basename(tmpfname))
wtmpbname,ext = os.path.splitext(os.path.basename(wtmpfname))
removeFiles( [ tmpfname, wtmpfname, tmpbname + '.log', \
tmpbname + '.aux', wtmpbname + '.log', wtmpbname + '.aux' ] )
## Searching some useful programs ## Searching some useful programs
def checkProg(description, progs, rc_entry = [], path = [] ): def checkProg(description, progs, rc_entry = [], path = [] ):
@ -200,12 +162,13 @@ def checkProg(description, progs, rc_entry = [], path = [] ):
addToRC(rc_entry[-1].replace('%%', 'none')) addToRC(rc_entry[-1].replace('%%', 'none'))
return ['', 'none'] return ['', 'none']
def checkLatex():
''' Check latex, return lyx_check_config '''
# Find programs! Returned path is not used now # Find programs! Returned path is not used now
path, LATEX = checkProg( 'a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'], path, LATEX = checkProg( 'a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'],
rc_entry = [ r'\converter latex dvi "%%" "latex"' ] ) rc_entry = [ r'\converter latex dvi "%%" "latex"' ] )
# no latex # no latex
lyx_check_config = False
if LATEX != 'none': if LATEX != 'none':
# Check if latex is usable # Check if latex is usable
writeToFile('chklatex.ltx', ''' writeToFile('chklatex.ltx', '''
@ -217,27 +180,29 @@ if LATEX != 'none':
''') ''')
# run latex on chklatex.ltx and check result # run latex on chklatex.ltx and check result
if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1: if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1:
lyx_check_config = True # valid latex2e
return LATEX
else: else:
print "Latex not usable (not LaTeX2e) " print "Latex not usable (not LaTeX2e) "
# remove temporary files # remove temporary files
removeFiles(['chklatex.ltx', 'chklatex.log']) removeFiles(['chklatex.ltx', 'chklatex.log'])
return ''
checkProg('the pdflatex program', ['pdflatex $$i'],
rc_entry = [ r'\converter latex pdf2 "%%" "latex"' ])
def checkFormatEntries():
''' Check all formats (\Format entries) '''
checkProg('a Tgif viewer and editor', ['tgif'], checkProg('a Tgif viewer and editor', ['tgif'],
rc_entry = [ r'\Format tgif obj Tgif "" "%%" "%%"']) rc_entry = [ r'\Format tgif obj Tgif "" "%%" "%%"'])
#
checkProg('a FIG viewer and editor', ['xfig'], checkProg('a FIG viewer and editor', ['xfig'],
rc_entry = [ r'\Format fig fig FIG "" "%%" "%%"'] ) rc_entry = [ r'\Format fig fig FIG "" "%%" "%%"'] )
#
checkProg('a Grace viewer and editor', ['xmgrace'], checkProg('a Grace viewer and editor', ['xmgrace'],
rc_entry = [ r'\Format agr agr Grace "" "%%" "%%"'] ) rc_entry = [ r'\Format agr agr Grace "" "%%" "%%"'] )
#
checkProg('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], checkProg('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'],
rc_entry = [ r'\Format fen fen FEN "" "%%" "%%"' ]) rc_entry = [ r'\Format fen fen FEN "" "%%" "%%"' ])
#
path, iv = checkProg('a raster image viewer', ['xv', 'kview', 'gimp']) path, iv = checkProg('a raster image viewer', ['xv', 'kview', 'gimp'])
path, ie = checkProg('a raster image editor', ['gimp']) path, ie = checkProg('a raster image editor', ['gimp'])
addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" addToRC(r'''\Format bmp bmp BMP "" "%s" "%s"
@ -251,11 +216,10 @@ addToRC(r'''\Format bmp bmp BMP "" "%s" "%s"
\Format xbm xbm XBM "" "%s" "%s" \Format xbm xbm XBM "" "%s" "%s"
\Format xpm xpm XPM "" "%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) ) (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', \ checkProg('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
'nedit', 'gedit', 'notepad'], 'nedit', 'gedit', 'notepad'],
rc_entry = [ rc_entry = [ r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%"
r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%"
\Format asciiimage asc "Plain text (image)" "" "" "%%" \Format asciiimage asc "Plain text (image)" "" "" "%%"
\Format asciixfig asc "Plain text (Xfig output)" "" "" "%%" \Format asciixfig asc "Plain text (Xfig output)" "" "" "%%"
\Format dateout tmp "date (output)" "" "" "%%" \Format dateout tmp "date (output)" "" "" "%%"
@ -266,145 +230,26 @@ checkProg('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
\Format linuxdoc sgml LinuxDoc x "" "%%" \Format linuxdoc sgml LinuxDoc x "" "%%"
\Format text txt "Plain text" a "" "%%" \Format text txt "Plain text" a "" "%%"
\Format textparagraph txt "Plain text (paragraphs)" "" "" "%%"''' ]) \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 -delay -index $$i > $$o'],
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'], #checkProg('a Postscript interpreter', ['gs'],
# rc_entry = [ r'\ps_command "%%"' ]) # rc_entry = [ r'\ps_command "%%"' ])
checkProg('a Postscript previewer', ['gsview32', 'gv', 'ghostview -swap', 'kghostview'], checkProg('a Postscript previewer', ['gsview32', 'gv', 'ghostview -swap', 'kghostview'],
rc_entry = [ rc_entry = [ r'''\Format eps eps EPS "" "%%" ""
r'''\Format eps eps EPS "" "%%" ""
\Format ps ps Postscript t "%%" ""''' ]) \Format ps ps Postscript t "%%" ""''' ])
#
checkProg('a PDF previewer', ['acrobat', 'acrord32', 'gsview32', \ checkProg('a PDF previewer', ['acrobat', 'acrord32', 'gsview32', \
'acroread', 'gv', 'ghostview', 'xpdf', 'kpdf', 'kghostview'], 'acroread', 'gv', 'ghostview', 'xpdf', 'kpdf', 'kghostview'],
rc_entry = [ r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" rc_entry = [ r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" ""
\Format pdf2 pdf "PDF (pdflatex)" F "%%" "" \Format pdf2 pdf "PDF (pdflatex)" F "%%" ""
\Format pdf3 pdf "PDF (dvipdfm)" m "%%" ""''' ]) \Format pdf3 pdf "PDF (dvipdfm)" m "%%" ""''' ])
#
checkProg('a DVI previewer', ['xdvi', 'windvi', 'yap', 'kdvi'], checkProg('a DVI previewer', ['xdvi', 'windvi', 'yap', 'kdvi'],
rc_entry = [ r'\Format dvi dvi DVI D "%%" ""' ]) rc_entry = [ r'\Format dvi dvi DVI D "%%" ""' ])
#
checkProg('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], checkProg('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'],
rc_entry = [ r'\Format html html HTML H "%%" ""' ]) rc_entry = [ r'\Format html html HTML H "%%" ""' ])
#
checkProg('a PS to PDF converter', ['ps2pdf13 $$i'], # entried that do not need checkProg
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" "" "" "" addToRC(r'''\Format date "" "date command" "" "" ""
\Format fax "" Fax "" "" "" \Format fax "" Fax "" "" ""
\Format lyx lyx LyX "" "" "" \Format lyx lyx LyX "" "" ""
@ -416,23 +261,204 @@ addToRC(r'''\Format date "" "date command" "" "" ""
\Format sxw sxw "OpenOffice.Org Writer" O "" "" \Format sxw sxw "OpenOffice.Org Writer" O "" ""
\Format word doc "MS Word" W "" "" \Format word doc "MS Word" W "" ""
\Format wordhtml html "MS Word (HTML)" "" "" "" \Format wordhtml html "MS Word (HTML)" "" "" ""
''')
def checkConverterEntries():
''' Check all converters (\converter entries) '''
checkProg('the pdflatex program', ['pdflatex $$i'],
rc_entry = [ r'\converter latex pdf2 "%%" "latex"' ])
#
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 -delay -index $$i > $$o'],
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 "%%" ""' ])
#
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 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 "%%" ""' ])
#
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 fax program', ['kdeprintfax $$i', 'ksendfax $$i'],
rc_entry = [ r'\converter ps fax "%%" ""'])
#
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" ""', ''])
#
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" ""''',
''])
#
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"' ])
#
# FIXME: no rc_entry? comment it out
# checkProg('Image converter', ['convert $$i $$o'])
#
# Entried that do not need checkProg
addToRC(r'''\converter lyxpreview ppm "python $$s/scripts/lyxpreview2bitmap.py" ""
\converter date dateout "date +%d-%m-%Y > $$o" "" \converter date dateout "date +%d-%m-%Y > $$o" ""
\converter docbook docbook-xml "cp $$i $$o" "xml" \converter docbook docbook-xml "cp $$i $$o" "xml"
\converter fen asciichess "python $$s/scripts/fen2ascii.py $$i $$o" "" \converter fen asciichess "python $$s/scripts/fen2ascii.py $$i $$o" ""
\converter fig pdftex "sh $$s/scripts/fig2pdftex.sh $$i $$o" "" \converter fig pdftex "sh $$s/scripts/fig2pdftex.sh $$i $$o" ""
\converter fig pstex "sh $$s/scripts/fig2pstex.sh $$i $$o" "" \converter fig pstex "sh $$s/scripts/fig2pstex.sh $$i $$o" ""
\converter lyx lyx13x "python $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o" "" \converter lyx lyx13x "python $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o" ""
\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o" ''')
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 "none" ""
\converter linuxdoc latex "none" ""
\converter linuxdoc dvi "none" ""
\converter linuxdoc html "none" ""''' ])
if LINUXDOC != 'none':
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'],
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':
return ('yes', 'true', '\\def\\hasdocbook{yes}')
else:
return ('no', 'false', '')
def checkOtherEntries():
''' entries other than Format and Converter '''
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 spool command', ['lp', 'lpr'],
rc_entry = [
r'''\print_spool_printerprefix "-d "
\print_spool_command "lp"''',
r'''\print_spool_printerprefix "-P",
\print_spool_command "lpr"''',
''])
# Add the rest of the entries (no checkProg is required)
addToRC(r'''\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o"
\copier pstex "python $$s/scripts/tex_copy.py $$i $$o $$l" \copier pstex "python $$s/scripts/tex_copy.py $$i $$o $$l"
\copier pdftex "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: def processLayoutFile(file, bool_docbook, bool_linuxdoc):
''' process layout file and get a line of result
Declear line are 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"
"scrbook" "scrbook" "book (koma-script)" "false"
"svjog" "svjour" "article (Springer - svjour/jog)" "false"
'''
classname = file.split(os.sep)[-1].split('.')[0]
# return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclearLaTeXClass[a,b,c]{article}
p = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)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]
if opt == None:
opt = classname
return '"%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai)
print "Layout file without \DeclearXXClass line. "
sys.exit(2)
def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
''' 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 check_config:
print ' default values' print ' default values'
print '+checking list of textclasses... ' print '+checking list of textclasses... '
tx = open('textclass.lst', 'w') tx = open('textclass.lst', 'w')
@ -446,20 +472,11 @@ if not lyx_check_config:
# build the list of available layout files and convert it to commands # build the list of available layout files and convert it to commands
# for chkconfig.ltx # for chkconfig.ltx
foundClasses = [] 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') ) + \ for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) :
# valid file? # valid file?
if not os.path.isfile(file): continue if not os.path.isfile(file):
continue
# get stuff between /xxxx.layout . # get stuff between /xxxx.layout .
classname = file.split(os.sep)[-1].split('.')[0] classname = file.split(os.sep)[-1].split('.')[0]
# tr ' -' '__'` # tr ' -' '__'`
@ -468,34 +485,7 @@ if not lyx_check_config:
# make sure the same class is not considered twice # make sure the same class is not considered twice
if foundClasses.count(cleanclass) == 0: # not found before if foundClasses.count(cleanclass) == 0: # not found before
foundClasses.append(cleanclass) foundClasses.append(cleanclass)
# The sed commands below are a bit scary. Here is what they do: tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc))
# 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() tx.close()
print '\tdone' print '\tdone'
else: else:
@ -508,14 +498,15 @@ else:
rmcopy = True rmcopy = True
writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \ writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \
% (linuxdoc_cmd, docbook_cmd) ) % (linuxdoc_cmd, docbook_cmd) )
## Construct the list of classes to test for. # Construct the list of classes to test for.
# build the list of available layout files and convert it to commands # build the list of available layout files and convert it to commands
# for chkconfig.ltx # for chkconfig.ltx
p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class')
testclasses = list() testclasses = list()
for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) :
if not os.path.isfile(file): continue if not os.path.isfile(file):
continue
classname = file.split(os.sep)[-1].split('.')[0] classname = file.split(os.sep)[-1].split('.')[0]
for line in open(file).readlines(): for line in open(file).readlines():
if p1.search(line) == None: if p1.search(line) == None:
@ -536,23 +527,30 @@ else:
if re.match('^\+', line): if re.match('^\+', line):
print line print line
# #
# evalulate lines in chkconfig.vars? # currently, values in chhkconfig are only used to set
# is it really necessary? # \font_encoding
values = {}
for line in open('chkconfig.vars').readlines(): for line in open('chkconfig.vars').readlines():
exec( re.sub('-', '_', line) ) key, val = re.sub('-', '_', line).split('=')
values[key] = val.strip("'\n")
# chk_fontenc may not exist
try:
addToRC(r'\font_encoding "%s"' % values["chk_fontenc"])
except:
pass
if rmcopy: # remove the copied file if rmcopy: # remove the copied file
removeFiles( [ 'chkconfig.ltx' ] ) 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), def createLaTeXConfig():
### then provide a standard version. ''' create LaTeXConfig.lyx '''
# if chkconfig.sed does not exist (because LaTeX did not run),
# then provide a standard version.
if not os.path.isfile('chkconfig.sed'): if not os.path.isfile('chkconfig.sed'):
writeToFile('chkconfig.sed', '##s/@.*@/???/g\n') writeToFile('chkconfig.sed', 's!@.*@!???!g\n')
print "creating packages.lst" print "creating packages.lst"
### if packages.lst does not exist (because LaTeX did not run), # if packages.lst does not exist (because LaTeX did not run),
### then provide a standard version. # then provide a standard version.
if not os.path.isfile('packages.lst'): if not os.path.isfile('packages.lst'):
writeToFile('packages.lst', ''' writeToFile('packages.lst', '''
### This file should contain the list of LaTeX packages that have been ### This file should contain the list of LaTeX packages that have been
@ -560,7 +558,6 @@ if not os.path.isfile('packages.lst'):
### your LaTeX2e program, the tests have not been run. Run ./configure ### your LaTeX2e program, the tests have not been run. Run ./configure
### if you need to update it after a configuration change. ### if you need to update it after a configuration change.
''') ''')
print 'creating doc/LaTeXConfig.lyx' print 'creating doc/LaTeXConfig.lyx'
# #
# This is originally done by sed, using a # This is originally done by sed, using a
@ -579,18 +576,27 @@ lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines()
p = re.compile(r's!(.*)!(.*)!g') p = re.compile(r's!(.*)!(.*)!g')
# process each sed replace. # process each sed replace.
for sed in open('chkconfig.sed').readlines(): for sed in open('chkconfig.sed').readlines():
if sed.strip() == '':
continue
try: try:
fr, to = p.match(sed).groups() fr, to = p.match(sed).groups()
# if latex did not run, change all @name@ to '???'
if fr == '@.*@':
for line in range(len(lyxin)):
lyxin[line] = re.sub('@.*@', to, lyxin[line])
else:
for line in range(len(lyxin)): for line in range(len(lyxin)):
lyxin[line] = lyxin[line].replace(fr, to) lyxin[line] = lyxin[line].replace(fr, to)
except: # wrong sed entry? except: # wrong sed entry?
print "Wrong sed entry in chkconfig.sed:", sed print "Wrong sed entry in chkconfig.sed: '" + sed + "'"
sys.exit(4) sys.exit(4)
#
writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'), writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'),
''.join(lyxin)) ''.join(lyxin))
### Let's check whether spaces are allowed in TeX file names
def checkTeXAllowSpaces():
''' Let's check whether spaces are allowed in TeX file names '''
tex_allows_spaces = 'false' tex_allows_spaces = 'false'
if lyx_check_config: if lyx_check_config:
print "Checking whether TeX allows spaces in file names... ", print "Checking whether TeX allows spaces in file names... ",
@ -604,45 +610,11 @@ if lyx_check_config:
else: else:
print 'no' print 'no'
tex_allows_spaces = 'false' tex_allows_spaces = 'false'
addToRC(r'\tex_allows_spaces ' + tex_allows_spaces)
removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) 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)
def removeExtraFiles():
# Remove superfluous files if we are not writing in the main lib # Remove superfluous files if we are not writing in the main lib
# directory # directory
for file in [outfile, 'textclass.lst', 'packages.lst', \ for file in [outfile, 'textclass.lst', 'packages.lst', \
@ -660,10 +632,67 @@ for file in [outfile, 'textclass.lst', 'packages.lst', \
except: # use local version if anthing goes wrong. except: # use local version if anthing goes wrong.
os.rename( file + '.new', file ) os.rename( file + '.new', file )
pass pass
# Final clean-up # Final clean-up
if not lyx_keep_temps: if not lyx_keep_temps:
removeFiles(['chkconfig.sed', 'chkconfig.vars', \ removeFiles(['chkconfig.sed', 'chkconfig.vars', \
'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \ 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \
'chklayouts.tex', 'missfont.log']) 'chklayouts.tex', 'missfont.log'])
if __name__ == '__main__':
lyx_check_config = True
outfile = 'lyxrc.defaults'
rc_entries = ''
lyx_keep_temps = False
version_suffix = ''
## 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[22:]
else:
print "Unknown option", op
sys.exit(1)
#
# check if we run from the right directory
srcdir = os.path.dirname(sys.argv[0])
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)
setEnviron()
createDirectories()
checkCygwinPath(srcdir)
## Write the first part of outfile
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, 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.
''')
# check latex
LATEX = checkLatex()
checkFormatEntries()
checkConverterEntries()
(chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc()
(chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
checkTeXAllowSpaces()
checkOtherEntries()
# --without-latex-config can disable lyx_check_config
checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc)
createLaTeXConfig()
removeExtraFiles()