Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Sun, 8 May 2005 20:21:26 -0400 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: Solution, possible FAQ entry: make problem: execvp: /bin/sh: Illegal Argument Message-ID: <20050509002126.GH3896@trixie.casa.cgf.cx> Reply-To: cygwin AT cygwin DOT com References: <427BE5FE DOT 7020000 AT fabeljet DOT com> <20050508003215 DOT GA24398 AT trixie DOT casa DOT cgf DOT cx> <20050508230637 DOT GD3896 AT trixie DOT casa DOT cgf DOT cx> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.8i On Sun, May 08, 2005 at 08:02:17PM -0400, Igor Pechtchanski wrote: >On Sun, 8 May 2005, Christopher Faylor wrote: > >> On Sun, May 08, 2005 at 04:11:08PM -0400, Igor Pechtchanski wrote: >> >On Sun, 8 May 2005, Joshua Daniel Franklin wrote: >> > >> >> > >On 5/6/05, J?rgen Havsberg Seland wrote: >> >> > >> This problem is (often) due to the command-line being to long for the >> >> > >> windows execution model. To circumvent this, mount the path of the >> >> > >> executable using the -X switch. For instance, use >> >> > > >> >> > On Sat, May 07, 2005 at 05:11:39PM -0700, Joshua Daniel Franklin wrote: >> >> > >I don't mind adding an FAQ, it looks like it's been asked few times. Any >> >> > >problem with replacing this ancient entry about MAKE_MODE (which is >> >> > >covered in the User's Guide)? >> >> > > >> >> > >http://cygwin.com/faq/faq_3.html#SEC93 >> >> > >> >> On 5/7/05, Christopher Faylor wrote: >> >> > Fine with me. >> >> >> >> Updated with the following text (thanks, J?rgen): >> >> >> >> Errors of `make: execvp: /bin/sh: Illegal Argument' or `make: execvp: >> >> /bin/sh: Argument list too long' are often caused by the command-line >> >> being to long for the Windows execution model. To circumvent this, >> >> mount the path of the executable using the -X switch to enable cygexec >> >> for all executables in that folder; you will also need to exclude >> >> non-cygwin executables with the -x switch. Enabling cygexec causes >> >> cygwin executables to talk directly to one another, which increases >> >> the command-line limit. To enable cygexec for `/bin' and `/usr/bin', >> >> you can use these commands in a batch file: >> >> >> >> mount -X -b -f c:\cygwin\bin /bin >> >> mount -X -b -f c:\cygwin\bin /usr/bin >> >> mount -x -b -f c:\cygwin\bin\strace.exe /usr/bin/strace.exe >> >> mount -x -b -f c:\cygwin\bin\strace.exe /bin/strace.exe >> >> mount -x -b -f c:\cygwin\bin\cygcheck.exe /usr/bin/cygcheck.exe >> >> mount -x -b -f c:\cygwin\bin\cygcheck.exe /bin/cygcheck.exe >> >> >> >> Note that you must specifically exclude strace and cygcheck, which are >> >> not linked to the Cygwin DLL. >> > >> >Unless I'm mistaken, you'll also need to mention that invoking >> >/bin/cygcheck and /bin/strace (and /usr/bin/cygcheck, and /usr/bin/strace) >> >won't work with the above -- you'll need to also add >> > >> >mount -x -b -f c:\cygwin\bin\strace.exe /usr/bin/strace >> >mount -x -b -f c:\cygwin\bin\strace.exe /bin/strace >> >mount -x -b -f c:\cygwin\bin\cygcheck.exe /usr/bin/cygcheck >> >mount -x -b -f c:\cygwin\bin\cygcheck.exe /bin/cygcheck >> > >> >to be able to omit the .exe extension. >> >> Rather than theorize about what's needed, why not actually *try it*? >> >> I don't know which of the above is needed but I doubt that all of >> them are. > >Well, I don't know of an easy way of testing whether the cygexec >functionality works, but I did try mounting /bin/cygcheck under another >name, and referring to it via cygcheck.exe didn't work (and vice versa). >Thus I concluded that mounting both the .exe version and the no-extension >version is needed. Multiply that by all the various paths (/usr/bin vs. >/bin), and that gives 4 mounts for cygcheck (and 4 for strace). >Does the above make sense? Unfortunately, yes. I thought that since exec() always tacks on a .exe to the program name, this might be enough to avoid the necessity of mounting cygcheck/strace in multiple ways. Shouldn't we be able to just mount the */bin variant which is used by default, though? Is that /usr/bin? That would catch the most common cases without using up precious mount table slots. It would not catch the case of someone typing /bin/cygcheck but I don't think that it's common for people to type that. Ultimately, I just have to make strace and cygcheck understand the cygwin arguments and environment variables. Then we won't need this. cgf -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/