Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com Subject: Re: Running a NT program from cygwin To: cygwin AT sourceware DOT cygnus DOT com From: "Jorg Schaible" Date: Thu, 29 Jun 2000 21:14:51 +0000 Message-ID: X-MIMETrack: Serialize by Router on sdbo1003/DMGUK/DeuBaInt/DeuBa(Release 5.0.4 |June 8, 2000) at 29/06/2000 09:16:04 PM MIME-Version: 1.0 Content-type: text/plain; charset=us-ascii Hi Tom (and Jason), use the following definitions as substitute for the "normal" make variables and constructs wherever you have to use a DOS/Win utility instead of a unix utility. Syntax requires make 3.79. You can write with this definitions rules completely independent like: %.$(OEXT): %.cxx $(CC) -o$(RT) $(RF) %$(APPEXT): $(OBJECTS) $(LD) $(RT) $(call cygwlist,$(OBJECTS)) ... you got the idea ... ================= cygwin.cfg ============== ifndef INC_COM_GFT_CONFIG_CYGWIN_CFG INC_COM_GFT_CONFIG_CYGWIN_CFG := 1 # Special variables to deal with cygwin ifeq ($(OSTYPE),cygwin32) # Cygwin versions B20.x and below CYGWIN := 1 include --please-upgrade-your-Cygwin-Version-- endif ifeq ($(OSTYPE),cygwin) # Cygwin versions V1.1 and above CYGWIN := 2 endif ifneq ($(words $(CYGWIN)),0) # Functions to convert file names cygnus = $(strip $(shell cygpath -$(1) $(2)" ")) cygwfile = $(subst \,\\,$(call cygnus,w,$(1))) cygwpath = $(subst \,\\,$(call cygnus,wp,$(1))) cygwlist = $(subst \,\\,$(subst ;,$(space),$(call cygnus,wp,$(subst $(space),:,$(strip $(1)))))) cygufile = $(call cygnus,u,$(1)) cygupath = $(call cygnus,up,$(1)) cygulist = $(subst $(space),:,$(call cygnus,up,$(subst $(space),\;,$(1)))) # Rule target RT = $(call cygwfile,$@) # First dependend RF = $(call cygwfile,$<) # Newer dependend RN = $(call cygwlist,$?) # All dependend RA = $(call cygwlist,$^) # Stem of rule target RS = $(call cygwfile,$*) # Rule target without extension RTB = $(call cygwfile,$(basename $@)) # First dependend without extension RFB = $(call cygwfile,$(basename $<)) # Rule target directory RTD = $(call cygwfile,$(@D)) # First dependend directory RFD = $(call cygwfile,$( It works if I > place $(cygpath -w $(shell pwd)), but I don't like the platform dependency. > I can add if/else/endif, but... This is exactly what we do -- I don't see anyway around this. It is certainly much better than trying to maintain two makefiles -- one for UNIX (ie, GNU make) and one for Windows (ie, Microsoft nmake). > Any hint, why does the problem, I mentioned, happen? Your "problem" is due to non-Cygwin apps (eg, cl) do not understand Cygwin constructs such as mount points, symlinks, etc. The way to map back and forth is cygpath. > Invoke: e /usr/include/stdio.h -> FAIL, c:\cygwin\usr\usr\include\stdio.h is My guess would be that e is actually trying to open c:\usr\include\stdio.h and not c:\cygwin\usr\usr\include\stdio.h This is because the Win32 CreateFile and open *can* deal with forward slashes but will use the current drive letter for absolute paths if none is supplied. I refer you to the "Mapping path names" section of the Cygwin User's Guide: http://sourceware.cygnus.com/cygwin/cygwin-ug-net/using.html#MOUNT-TABLE for more information. Jason -- Jason Tishler Director, Software Engineering Phone: +1 (732) 264-8770 x235 Dot Hill Systems Corporation Fax: +1 (732) 264-8798 82 Bethany Road, Suite 7 Email: Jason DOT Tishler AT dothill DOT com Hazlet, NJ 07730 USA WWW: http://www.dothill.com -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com