Hello ntg-context,
I have a copy of texexec.pl dated 2002/05/04 which has a bug in it. I
use tetex under cygwin in Windows, and was having a lot of trouble
getting texexec working. The problem is as follows. There is a line in
texexec.pl:
my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i);
The purpose of this is to find out if we are in a "dosish" environment.
This is used later:
unless ($dosish)
~ { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" }
~ if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
This breaks badly (and very confusingly) later when we do system() calls
if $SHELL=bash. I don't know if the rest of cygwin's environment
qualifies as "dosish" or not for the rest of the program, although mine
works fine if it's turned off.
Is this a known bug?
G.
- --
Gregory D. Collins
At 12:11 PM 11/3/2002 -0500, Gregory D. Collins wrote:
Hello ntg-context,
I have a copy of texexec.pl dated 2002/05/04 which has a bug in it. I use tetex under cygwin in Windows, and was having a lot of trouble getting texexec working. The problem is as follows. There is a line in texexec.pl:
my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i);
The purpose of this is to find out if we are in a "dosish" environment. This is used later:
unless ($dosish) ~ { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } ~ if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
This breaks badly (and very confusingly) later when we do system() calls if $SHELL=bash. I don't know if the rest of cygwin's environment qualifies as "dosish" or not for the rest of the program, although mine works fine if it's turned off.
Is this a known bug?
So you suggest to remove the cyg from the regexp? Hans ------------------------------------------------------------------------- Hans Hagen | PRAGMA ADE | pragma@wxs.nl Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com ------------------------------------------------------------------------- information: http://www.pragma-ade.com/roadmap.pdf documentation: http://www.pragma-ade.com/showcase.pdf -------------------------------------------------------------------------
Hans Hagen wrote:
At 12:11 PM 11/3/2002 -0500, Gregory D. Collins wrote:
Hello ntg-context,
I have a copy of texexec.pl dated 2002/05/04 which has a bug in it. I use tetex under cygwin in Windows, and was having a lot of trouble getting texexec working. The problem is as follows. There is a line in texexec.pl:
my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i);
The purpose of this is to find out if we are in a "dosish" environment. This is used later:
unless ($dosish) ~ { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } ~ if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
This breaks badly (and very confusingly) later when we do system() calls if $SHELL=bash. I don't know if the rest of cygwin's environment qualifies as "dosish" or not for the rest of the program, although mine works fine if it's turned off.
Is this a known bug?
So you suggest to remove the cyg from the regexp?
The part which is causing the problem is the system() call, when we need
to escape the "&" under sh, but not when using the Windows shell. So
perhaps the following:
# If $SHELL contains "sh", it is probably UNIXish
my $escapeshell = ($ENV{"SHELL"} =~ m/sh/i);
...
# Then later, instead of:
unless ($dosish)
{ if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" }
if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
# We do:
unless ($dosish && !$escapeshell)
{ if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" }
if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
What do you think?
--
Gregory D. Collins
Another (and probably better) option is to use the multi-part (array) interface to system(). That call doesn't use the shell at all, so the problem never arises. Differences between shells tend to give problems, even under Unix, but under windows the situation is definately worse. Side note: Cygwin's file system is too broken to be considered Unix, but it's not DOS either. If you want bash as shell, try using then minw version instead. -- groeten, Taco
At 04:10 AM 11/5/2002 -0500, Gregory D. Collins wrote:
The part which is causing the problem is the system() call, when we need to escape the "&" under sh, but not when using the Windows shell. So perhaps the following:
# If $SHELL contains "sh", it is probably UNIXish my $escapeshell = ($ENV{"SHELL"} =~ m/sh/i);
...
# Then later, instead of: unless ($dosish) { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
# We do: unless ($dosish && !$escapeshell) { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
What do you think?
Did you test it? If it works we can do this (i don't have cygwin installed) Hans ------------------------------------------------------------------------- Hans Hagen | PRAGMA ADE | pragma@wxs.nl Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com ------------------------------------------------------------------------- information: http://www.pragma-ade.com/roadmap.pdf documentation: http://www.pragma-ade.com/showcase.pdf -------------------------------------------------------------------------
Hans Hagen wrote:
At 04:10 AM 11/5/2002 -0500, Gregory D. Collins wrote:
The part which is causing the problem is the system() call, when we need to escape the "&" under sh, but not when using the Windows shell. So perhaps the following:
# If $SHELL contains "sh", it is probably UNIXish my $escapeshell = ($ENV{"SHELL"} =~ m/sh/i);
...
# Then later, instead of: unless ($dosish) { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
# We do: unless ($dosish && !$escapeshell) { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
What do you think?
Did you test it? If it works we can do this (i don't have cygwin installed)
I just tested it, it works on my system.
--
Gregory D. Collins
participants (4)
-
Fabrice Popineau
-
Gregory D. Collins
-
Hans Hagen
-
Taco Hoekwater