2008/5/8 Steph Fox <[EMAIL PROTECTED]>: >> If only I could send the sound of my shoulders slumping as yet another >> post is ignored/filtered. http://news.php.net/php.internals/37517 > > I only asked why :) > >> As I said in the original post, if you have cygwin installed (as was >> needed to build the PHP documentation in the bad old days before phd), >> then rmdir.exe would be in your path). > > Wouldn't having /cygwin/bin permanently in your PATH screw up native > executables throughout? Can you use MS rmdir on your system at all? >
No. As in normal windows, shell commands take precedence over programs/scripts, even with the same name. If I want to use a cygwin program in preference to a windows one, then I will either delete or rename the windows one. If I can't do that, then I will put the cygwin version in a tools directory which is in the path before windows, et al. rmdir does not exist as an "executable" in windows/dos. It is part of the shell (command.com/cmd.exe). There is no "program" (or script or anything) called rmdir.anything. Here is some steps I've taken to show the problem. If you don't have cygwin in your path, then this isn't an issue. But I do and I use cygwin tools all day. This patch removes the problem. For the last 20 years of software development, I've always used md/cd/rd rather than mkdir/chdir/rmdir. In windows they are the same thing. Find all rmdir.somethings in the path. 2008/05/09 11:11:07 C:\>whereis rmdir Directory Found (Date and Size) ============= =========================== D:\Cygwin\bin rmdir.EXE 2008-01-24 43,008 Let's see the builtin help for rmdir. 2008/05/09 11:11:22 C:\>rmdir /? Removes (deletes) a directory. RMDIR [/S] [/Q] [drive:]path RD [/S] [/Q] [drive:]path /S Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree. /Q Quiet mode, do not ask if ok to remove a directory tree with /S Let's see cygwin's help for rmdir - notice no support for /s or /q. 2008/05/09 11:11:26 C:\>d:\cygwin\bin\rmdir --help Usage: /usr/bin/rmdir [OPTION]... DIRECTORY... Remove the DIRECTORY(ies), if they are empty. --ignore-fail-on-non-empty ignore each failure that is solely because a directory is non-empty -p, --parents Remove DIRECTORY and its ancestors. E.g., `rmdir -p a/b/c' is similar to `rmdir a/b/c a/b a'. -v, --verbose output a diagnostic for every directory processed --help display this help and exit --version output version information and exit Report bugs to <[EMAIL PROTECTED]>. Create a directory and remove it using /s. 2008/05/09 11:11:30 C:\>md bob 2008/05/09 11:11:34 C:\>rmdir /s bob bob, Are you sure (Y/N)? y Now repeat with cygwin's rmdir.exe 2008/05/09 11:11:41 C:\>md bob 2008/05/09 11:11:43 C:\>d:\cygwin\bin\rmdir.exe /s bob /usr/bin/rmdir: failed to remove `/s': No such file or directory If I run nmake clean-all inside my vcvars32.bat environment, I get the cygwin error. If I run filemon it shows nmake hunting through my path looking for rmdir.xxx where xxx is one of my extensions in PATHEXT (PATHEXT=.COM;.EXE;.BAT;.CMD;.PHP;.PYC;.PY;;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.RB;.RBW). Effectively nmake is not respecting the shell to run internal commands. As you can see (hopefully), rmdir is a SHELL command, even if an executable exists with the same name and that executable is in the path. The issue is that nmake doesn't respect the shell command until after it has done the search via the path. Even with cygwin in the path, I have no problem running windows shell scripts. I even sometimes use cygwin executable as they do things differently or provide facilities windows don't have (tiff tools for example). > Aren't you running vcvars32.bat before you hit nmake? Or do you have MS > headers permanently in your PATH too? Yes I am. But that only adds a few env vars. It doesn't remove cygwin from the path (and why should it). This is an edited diff of my environments (normal vs vccars32.bat) --- out.txt 2008-05-09 11:03:16.616418300 +0100 +++ in.txt 2008-05-09 11:03:22.397668300 +0100 @@ -5,14 +5,21 @@ CommonProgramFiles=C:\Program Files\Common Files COMPUTERNAME=RICHARDQUADLING ComSpec=C:\WINDOWS\system32\cmd.exe +DevEnvDir=C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE DIRCMD=/A /C /4 /OGEN /N, FP_NO_HOST_CHECK=NO +Framework35Version=v3.5 +FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework +FrameworkVersion=v2.0.50727 HOMEDRIVE=C: HOMEPATH=\Documents and Settings\RichardQ +INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;C:\Program Files\Microsoft SDKs\Windows\v6.1\include; +LIB=C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;C:\Program Files\Microsoft SDKs\Windows\v6.1\lib; +LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB; LOGONSERVER=\\xxxxxxxx NUMBER_OF_PROCESSORS=1 OS=Windows_NT -Path=[SNIPPED] +Path=C:\Work\php_build\bin;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;C:\Program Files\Microsoft SDKs\Windows\v6.1\bin;[SNIPPED] PATHEXT=.COM;.EXE;.BAT;.CMD;.PHP;.PYC;.PY;;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.RB;.RBW PATHEXTORIG=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH PHP_PEAR_BIN_DIR=C:\PEAR @@ -40,5 +47,8 @@ USERDOMAIN=xxxxxxxx USERNAME=RichardQ USERPROFILE=C:\Documents and Settings\RichardQ +VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0\VC VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\ +VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0 windir=C:\WINDOWS +WindowsSdkDir=C:\Program Files\Microsoft SDKs\Windows\v6.1\ > > - Steph > -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!" -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php