make LyX work better when run from a directory which name contains spaces or other special characters

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8982 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2004-09-14 10:20:38 +00:00
parent 5aecf3bac5
commit 558e849e69
9 changed files with 60 additions and 36 deletions

View File

@ -1,3 +1,16 @@
2004-09-07 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* configure.m4: instead of \input-ing the layout files directly in
latex, grep out the correct command from them; remove need for
\srcdir. This should fix the bug where latex configuration cannot
be done because LyX is installed in a directory which name
contains spaces.
* chkconfig.ltx: remove use of macro \srcdir
(\TestDocClass): change to take two arguments
(\DeclareLaTeXClass, \DeclareLinuxDocClass, \DeclareDocBookClass):
do not exit after execution
2004-09-13 Jean-Marc Lasgouttes <lasgouttes@lyx.org> 2004-09-13 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* languages: add nynorsk * languages: add nynorsk

View File

@ -35,24 +35,16 @@
% we do not want to stop on errors % we do not want to stop on errors
\nonstopmode\makeatletter \nonstopmode\makeatletter
% Have we been called from the configure script?
\@ifundefined{srcdir}
{\message{%
**** WARNING: For proper results, you should not run this script directly.^^J%
**** Please use the `configure' script.^^J}
\newcommand\srcdir{.}}
{\def\input@path{{\srcdir/}}}
%%% Some useful macros. %%% Some useful macros.
% Several commands are defined to test for packages: % Several commands are defined to test for packages:
% \AddLayout{<layout>} adds an entry for <layout> in textclass.lst % \AddLayout{<layout>} adds an entry for <layout> in textclass.lst
% \AddVariable{<name>}{<value>} creates a new variable chk_<name>, % \AddVariable{<name>}{<value>} creates a new variable chk_<name>,
% and gives it the value <value>. % and gives it the value <value>.
% \TestDocClass[<file>]{<name>} tests whether <name>.cls (or <file>, % \TestDocClass{<name>}{<command>} if layout <name> has not already
% if it is provided) exists and creates a new entry with % been tested for, execute <command>. Note that you will
% \AddLayout if this is the case. Note that you will probably not % probably not need to use this directly, since the configure
% need to use this directly, since the configure script generates % script generates the needed macro calls automatically.
% the needed macro calls automatically.
% \TestPackage[<file>]{<name>} tests whether <name>.sty (or <file>, % \TestPackage[<file>]{<name>} tests whether <name>.sty (or <file>,
% if it is provided) exists. % if it is provided) exists.
% Both commands call \AddVariable to give value 'yes' or 'no' to % Both commands call \AddVariable to give value 'yes' or 'no' to
@ -95,13 +87,10 @@
\fi} \fi}
\newcommand{\TestPackage}[2][\default]{ \newcommand{\TestPackage}[2][\default]{
\TestItem[#1]{#2}{package}{sty}{\AddPackage{#2}}{}} \TestItem[#1]{#2}{package}{sty}{\AddPackage{#2}}{}}
\newcommand{\TestDocClass}[1]{ \newcommand{\TestDocClass}[2]{
\def\layoutname{#1} % remember the name of the layout file \def\layoutname{#1} % remember the name of the layout file
\@ifundefined{layout@#1} \@ifundefined{layout@#1}
{\bgroup {#2 % execute the command
\catcode`\#=9 % consider # as a space
\input{layouts/#1.layout} % read the layout file
\egroup
\global\@namedef{layout@#1}{}} \global\@namedef{layout@#1}{}}
{} % we have already tried this one. {} % we have already tried this one.
} }
@ -109,7 +98,6 @@
\TestItem[#1]{\layoutname}{document class}{cls} \TestItem[#1]{\layoutname}{document class}{cls}
{\AddLayout[\firstelement]{\layoutname}{#2}{true}} {\AddLayout[\firstelement]{\layoutname}{#2}{true}}
{\AddLayout[\firstelement]{\layoutname}{#2}{false}} {\AddLayout[\firstelement]{\layoutname}{#2}{false}}
\expandafter\endinput
} }
\newcommand{\DeclareLinuxDocClass}[2][\default]{ \newcommand{\DeclareLinuxDocClass}[2][\default]{
\message{^^J\prefix checking for linuxdoc class \layoutname... } \message{^^J\prefix checking for linuxdoc class \layoutname... }
@ -118,7 +106,6 @@
\AddLayout[#1]{\layoutname}{#2}{false}} \AddLayout[#1]{\layoutname}{#2}{false}}
{\message{yes^^J} {\message{yes^^J}
\AddLayout[#1]{\layoutname}{#2}{true}} \AddLayout[#1]{\layoutname}{#2}{true}}
\expandafter\endinput
} }
% Only for compatibility. Will be removed later. % Only for compatibility. Will be removed later.
\let\DeclareSGMLClass=\DeclareDocBookClass \let\DeclareSGMLClass=\DeclareDocBookClass
@ -130,7 +117,6 @@
\AddLayout[#1]{\layoutname}{#2}{false}} \AddLayout[#1]{\layoutname}{#2}{false}}
{\message{yes^^J} {\message{yes^^J}
\AddLayout[#1]{\layoutname}{#2}{true}} \AddLayout[#1]{\layoutname}{#2}{true}}
\expandafter\endinput
} }
% Stolen from article.cls % Stolen from article.cls

View File

@ -167,8 +167,8 @@ ac_prog=[$]0
changequote(,)dnl changequote(,)dnl
srcdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` srcdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
test "x$srcdir" = "x$ac_prog" && srcdir=. test "x${srcdir}" = "x$ac_prog" && srcdir=.
if test ! -r ${srcdir}/chkconfig.ltx ; then if test ! -r "${srcdir}"/chkconfig.ltx ; then
echo "configure: error: cannot find chkconfig.ltx script" echo "configure: error: cannot find chkconfig.ltx script"
exit 1 exit 1
fi fi
@ -426,9 +426,9 @@ if test ${lyx_check_config} = no ; then
# for some reason. Run ./configure if you need to update it after a # for some reason. Run ./configure if you need to update it after a
# configuration change. # configuration change.
EOF EOF
# build the list of available layout files and convert it to commands # build the list of available layout files and convert it to entries
# for chkconfig.ltx # for the default textclass.lst file
for file in ./layouts/*.layout ${srcdir}/layouts/*.layout ; do for file in ./layouts/*.layout "${srcdir}"/layouts/*.layout ; do
case $file in case $file in
*/\*.layout) ;; */\*.layout) ;;
*) if test -r "$file" ; then *) if test -r "$file" ; then
@ -464,26 +464,34 @@ changequote(,)dnl
else else
MSG_RESULT(auto) MSG_RESULT(auto)
rm -f wrap_chkconfig.ltx chkconfig.vars chkconfig.classes chklayouts.tex rm -f wrap_chkconfig.ltx chkconfig.vars chkconfig.classes chklayouts.tex
if ! test -r "chkconfig.ltx" ; then
ln -s "${srcdir}"/chkconfig.ltx .
rmlink=true
fi
cat >wrap_chkconfig.ltx <<EOF cat >wrap_chkconfig.ltx <<EOF
\\newcommand\\srcdir{${srcdir}}
${linuxdoc_cmd} ${linuxdoc_cmd}
${docbook_cmd} ${docbook_cmd}
\\input{${srcdir}/chkconfig.ltx} \\input{chkconfig.ltx}
EOF EOF
## 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
for file in ./layouts/*.layout ${srcdir}/layouts/*.layout ; do for file in ./layouts/*.layout "${srcdir}"/layouts/*.layout ; do
case $file in case $file in
*/\*.layout) ;; */\*.layout) ;;
*) test -r "$file" && echo $file ;; *) if test -r "$file" ; then
class=`echo $file | sed -e 's%^.*layouts/\(.*\)\.layout$%\1%'`
# Generate the proper TestDocClass command for this layout
grep '\\Declare\(LaTeX\|DocBook\|LinuxDoc\)Class' "$file" \
| sed -e 's/^\# *\(.*\)$/\\TestDocClass{'${class}'}{\1}/'
fi ;;
esac esac
done | sed -e 's%^.*layouts/\(.*\)\.layout$%\\TestDocClass{\1}%'\ done > chklayouts.tex
> chklayouts.tex
changequote([,])dnl changequote([,])dnl
[eval] ${LATEX} wrap_chkconfig.ltx 2>/dev/null | grep '^\+' [eval] ${LATEX} wrap_chkconfig.ltx 2>/dev/null | grep '^\+'
[eval] `cat chkconfig.vars | sed 's/-/_/g'` [eval] `cat chkconfig.vars | sed 's/-/_/g'`
changequote(,)dnl changequote(,)dnl
test -n "${rmlink}" && rm -f chkconfig.ltx
fi fi
# Do we have all the files we need? Useful if latex did not run # Do we have all the files we need? Useful if latex did not run
@ -503,7 +511,7 @@ changequote(,)dnl
echo "creating doc/LaTeXConfig.lyx" echo "creating doc/LaTeXConfig.lyx"
echo "s/@chk_linuxdoc@/$chk_linuxdoc/g" >> chkconfig.sed echo "s/@chk_linuxdoc@/$chk_linuxdoc/g" >> chkconfig.sed
echo "s/@chk_docbook@/$chk_docbook/g" >> chkconfig.sed echo "s/@chk_docbook@/$chk_docbook/g" >> chkconfig.sed
sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in >doc/LaTeXConfig.lyx sed -f chkconfig.sed "${srcdir}"/doc/LaTeXConfig.lyx.in >doc/LaTeXConfig.lyx
echo "creating $outfile" echo "creating $outfile"
cat >$outfile <<EOF cat >$outfile <<EOF
@ -673,7 +681,7 @@ for file in $outfile textclass.lst packages.lst \
doc/LaTeXConfig.lyx xfonts/fonts.dir ; do doc/LaTeXConfig.lyx xfonts/fonts.dir ; do
# we rename the file first, so that we avoid comparing a file with itself # we rename the file first, so that we avoid comparing a file with itself
mv $file $file.new mv $file $file.new
if test -r $srcdir/$file && diff $file.new $srcdir/$file >/dev/null 2>/dev/null ; if test -r "${srcdir}"/$file && diff $file.new "${srcdir}"/$file >/dev/null 2>/dev/null ;
then then
echo "removing $file, which is identical to the system global version" echo "removing $file, which is identical to the system global version"
rm -f $file.new rm -f $file.new

View File

@ -1,3 +1,8 @@
2004-09-09 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* lyx_cb.C (Reconfigure): quote the name of configure script in
case it contains spaces
2004-09-04 Lars Gullik Bjonnes <larsbj@gullik.net> 2004-09-04 Lars Gullik Bjonnes <larsbj@gullik.net>
* client: new dir * client: new dir

View File

@ -1,3 +1,8 @@
2004-09-09 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* qfont_loader.C (addFontPath): quote the name of the font dir in
case it contains a space
2004-08-19 Georg Baum <Georg.Baum@post.rwth-aachen.de> 2004-08-19 Georg Baum <Georg.Baum@post.rwth-aachen.de>
* BulletsModule.C (setBullet): use toqstr() for a string passed to * BulletsModule.C (setBullet): use toqstr() for a string passed to

View File

@ -36,6 +36,7 @@
using lyx::support::contains; using lyx::support::contains;
using lyx::support::LibFileSearch; using lyx::support::LibFileSearch;
using lyx::support::OnlyPath; using lyx::support::OnlyPath;
using lyx::support::QuoteName;
using lyx::support::Systemcall; using lyx::support::Systemcall;
using std::endl; using std::endl;
@ -63,7 +64,7 @@ void addFontPath()
return; return;
lyxerr[Debug::FONT] << "Adding " << dir lyxerr[Debug::FONT] << "Adding " << dir
<< " to the font path." << endl; << " to the font path." << endl;
string const command = "xset fp+ " + dir; string const command = "xset fp+ " + QuoteName(dir);
Systemcall s; Systemcall s;
if (!s.startscript(Systemcall::Wait, command)) if (!s.startscript(Systemcall::Wait, command))
return; return;

View File

@ -62,6 +62,7 @@ using lyx::support::MakeDisplayPath;
using lyx::support::OnlyFilename; using lyx::support::OnlyFilename;
using lyx::support::OnlyPath; using lyx::support::OnlyPath;
using lyx::support::Path; using lyx::support::Path;
using lyx::support::QuoteName;
using lyx::support::removeAutosaveFile; using lyx::support::removeAutosaveFile;
using lyx::support::rename; using lyx::support::rename;
using lyx::support::split; using lyx::support::split;
@ -446,7 +447,7 @@ void Reconfigure(BufferView * bv)
Path p(user_lyxdir()); Path p(user_lyxdir());
Systemcall one; Systemcall one;
one.startscript(Systemcall::Wait, one.startscript(Systemcall::Wait,
AddName(system_lyxdir(), "configure")); QuoteName(AddName(system_lyxdir(), "configure")));
p.pop(); p.pop();
bv->owner()->message(_("Reloading configuration...")); bv->owner()->message(_("Reloading configuration..."));
lyxrc.read(LibFileSearch(string(), "lyxrc.defaults")); lyxrc.read(LibFileSearch(string(), "lyxrc.defaults"));

View File

@ -1,3 +1,8 @@
2004-09-10 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* filetools.C (LibScriptSearch): quote the path of the script, in
case it contains spaces
2004-09-04 Lars Gullik Bjonnes <larsbj@gullik.net> 2004-09-04 Lars Gullik Bjonnes <larsbj@gullik.net>
* tostr.C: reimplement using lexical_cast * tostr.C: reimplement using lexical_cast

View File

@ -372,7 +372,7 @@ string const LibScriptSearch(string const & command_in)
} else { } else {
// Replace "$$s/some_script" with "$LYX_SCRIPT_PATH/some_script" // Replace "$$s/some_script" with "$LYX_SCRIPT_PATH/some_script"
string::size_type const size_replace = size_script + 4; string::size_type const size_replace = size_script + 4;
command.replace(pos1, size_replace, script); command.replace(pos1, size_replace, QuoteName(script));
} }
return command; return command;