On Fri, Apr 14, 2006 at 08:56:51PM +0200, Enrico Forestieri wrote: > On Fri, Apr 14, 2006 at 09:57:21AM +0200, Georg Baum wrote: > > > Am Mittwoch, 12. April 2006 23:39 schrieb Enrico Forestieri: > > > > Is it sufficient adding a comment? Changing that would require more > > > than one line for no good... > > > > If you add a comment with the mount output then it would be OK with me. > > I added a comment and also took into account a fix for the separator > in lib/scripts/TeXFiles.sh. Here SEP is set to ';' or ':' simply based > on the existence or not of the environment variable COMSPEC. > But the cygwin tetex uses ':' and COMSPEC is set, as the Windows > environment in inherited. The fix is quite simple and effective, > I think, as, instead of guessing, it now ascertains what the correct > separator is. > > Log: > * src/support/os_win32.C > (init, latex_path, cygwin_path_fix): Add support for cygwin tetex. > > * lib/scripts/TeXFiles.sh: Fix setting of path separator SEP.
Argh! Someone changed "RunCommand" to "runCommand". Patch with corrected case attached. Sorry for not having checked that before. -- Enrico
Index: src/support/os_win32.C =================================================================== --- src/support/os_win32.C (revision 13679) +++ src/support/os_win32.C (working copy) @@ -17,6 +17,7 @@ #include "support/os.h" #include "support/os_win32.h" #include "support/lstrings.h" +#include "support/filetools.h" #include "debug.h" @@ -62,11 +63,22 @@ using std::endl; using std::string; +using lyx::support::runCommand; +using lyx::support::split; + namespace lyx { namespace support { namespace os { +namespace { + +bool cygwin_path_fix_ = false; + +string cygdrive = "/cygdrive"; + +} // namespace anon + void init(int /* argc */, char * argv[]) { /* Note from Angus, 17 Jan 2005: @@ -146,6 +158,20 @@ void init(int /* argc */, char * argv[]) if (hwndFound != NULL) ShowWindow( hwndFound, SW_HIDE); } + + // If cygwin is detected, query the cygdrive prefix + cmd_ret const c = runCommand("sh -c uname"); + if (c.first != -1 && prefixIs(c.second, "CYGWIN")) { + cmd_ret const p = runCommand("mount --show-cygdrive-prefix"); + // The output of the mount command is as follows: + // Prefix Type Flags + // /cygdrive system binmode + // So, we use the inner split to pass the second line to the + // outer split which sets cygdrive with its contents until + // the first blank, discarding the unneeded return value. + if (p.first != -1 && prefixIs(p.second, "Prefix")) + (void) split(split(p.second, '\n'), cygdrive, ' '); + } } @@ -230,6 +256,20 @@ string internal_path_list(string const & string latex_path(string const & p) { + // We may need a posix style path or a windows style path (depending + // on cygwin_path_fix_), but we use always forward slashes, since it + // gets written into a .tex file. + + if (cygwin_path_fix_ && is_absolute_path(p)) { + string const drive = p.substr(0, 2); + string const cygprefix = cygdrive + "/" + drive.substr(0, 1); + string const cygpath = subst(subst(p, '\\', '/'), drive, cygprefix); + lyxerr[Debug::LATEX] + << "<Cygwin path correction> [" + << p << "]->>[" + << cygpath << ']' << endl; + return cygpath; + } return subst(p, '\\', '/'); } @@ -279,8 +319,10 @@ char path_separator() } -void cygwin_path_fix(bool) -{} +void cygwin_path_fix(bool use_cygwin_paths) +{ + cygwin_path_fix_ = !use_cygwin_paths; +} namespace { Index: lib/scripts/TeXFiles.sh =================================================================== --- lib/scripts/TeXFiles.sh (revision 13679) +++ lib/scripts/TeXFiles.sh (working copy) @@ -42,14 +42,13 @@ test -z "$types" && types="cls sty bst b # # MS-DOS and MS-Windows define $COMSPEC or $ComSpec and use ';' to separate -# directories in path lists whereas Unixes uses ':'. +# directories in path lists whereas Unixes uses ':'. However, on MS-Windows +# we should also take into account Cygwin, which uses ':'. So, instead of +# guessing based on $COMSPEC, we try to directly determine the path separator. # $SEP holds the right character to be used by the scripts. # -#??????????????? -# never used this one with windows and what happens with mac?? -#??????????????? -# -if test -z "$COMSPEC" && test -z "$ComSpec"; then SEP=':'; else SEP=';'; fi +SEP=`kpsewhich --show-path=.tex 2>/dev/null | sed 's/.*\(;\).*/\1/'` +if test "$SEP" != ";"; then SEP=':'; fi # # A copy of some stuff from mktex.opt, so we can run in the presence of