@@ -121,10 +121,16 @@ def tmpdir():
121121    # Executables are placed into `<distdir>/build/<package-name>/<binary>`. 
122122    # Libraries are placed into `<distdir>/build/<library>`. I.e. there is an 
123123    # extra subdirectory for libraries. 
124-     if  component .startswith ("exe:" ):
125-         distdir  =  tempfile .mkdtemp (dir = os .path .dirname (os .path .dirname (pkgroot )))
124+     # 
125+     # On Windows we don't do dynamic linking and prefer shorter paths to avoid 
126+     # exceeding `MAX_PATH`. 
127+     if  "%{is_windows}"  ==  "True" :
128+         distdir  =  tempfile .mkdtemp ()
126129    else :
127-         distdir  =  tempfile .mkdtemp (dir = os .path .dirname (pkgroot ))
130+         if  component .startswith ("exe:" ):
131+             distdir  =  tempfile .mkdtemp (dir = os .path .dirname (os .path .dirname (pkgroot )))
132+         else :
133+             distdir  =  tempfile .mkdtemp (dir = os .path .dirname (pkgroot ))
128134    try :
129135        yield  distdir 
130136    finally :
@@ -140,6 +146,7 @@ with tmpdir() as distdir:
140146    # absolute ones before doing so (using $execroot). 
141147    old_cwd  =  os .getcwd ()
142148    os .chdir (srcdir )
149+     os .putenv ("RULES_HASKELL_EXEC_ROOT" , old_cwd )
143150    os .putenv ("HOME" , "/var/empty" )
144151    os .putenv ("TMPDIR" , os .path .join (distdir , "tmp" ))
145152    os .putenv ("TMP" , os .path .join (distdir , "tmp" ))
@@ -165,7 +172,7 @@ with tmpdir() as distdir:
165172        # absolute paths refer the temporary directory that GHC uses for 
166173        # intermediate template Haskell outputs. `cc_wrapper` should improved 
167174        # in that regard. 
168-         "--builddir="  +  os .path .relpath (distdir ), \
175+         "--builddir="  +  ( os .path .relpath (distdir )  if   "%{is_windows}"   !=   "True"   else   distdir ), \
169176        "--prefix="  +  pkgroot , \
170177        "--libdir="  +  libdir , \
171178        "--dynlibdir="  +  dynlibdir , \
0 commit comments