Browse Source

Merge remote-tracking branch 'Wirone/unixy-proxy'

Conflicts:
	src/Composer/Installer/LibraryInstaller.php
Jordi Boggiano 9 years ago
parent
commit
90a90e22de
1 changed files with 25 additions and 7 deletions
  1. 25 7
      src/Composer/Installer/LibraryInstaller.php

+ 25 - 7
src/Composer/Installer/LibraryInstaller.php

@@ -310,12 +310,30 @@ class LibraryInstaller implements InstallerInterface
     {
         $binPath = $this->filesystem->findShortestPath($link, $bin);
 
-        return "#!/usr/bin/env sh\n".
-            'SRC_DIR="`pwd`"'."\n".
-            'cd "`dirname "$0"`"'."\n".
-            'cd '.ProcessExecutor::escape(dirname($binPath))."\n".
-            'BIN_TARGET="`pwd`/'.basename($binPath)."\"\n".
-            'cd "$SRC_DIR"'."\n".
-            '"$BIN_TARGET" "$@"'."\n";
+        $binDir = ProcessExecutor::escape(dirname($binPath));
+        $binFile = basename($binPath);
+
+        $proxyCode = <<<PROXY
+#!/usr/bin/env sh
+
+dir=$(d=$(dirname "$0"); cd "\$d"; cd $binDir && pwd)
+
+# See if we are running in Cygwin by checking for cygpath program
+if command -v 'cygpath' >/dev/null 2>&1; then
+	# Cygwin paths start with /cygdrive/ which will break windows PHP,
+	# so we need to translate the dir path to windows format. However
+	# we could be using cygwin PHP which does not require this, so we
+	# test if the path to PHP starts with /cygdrive/ rather than /usr/bin
+	if [[ $(which php) == /cygdrive/* ]]; then
+		dir=$(cygpath -m \$dir);
+	fi
+fi
+
+dir=$(echo \$dir | sed 's/ /\ /g')
+"\${dir}/$binFile" "$@"
+
+PROXY;
+
+        return $proxyCode;
     }
 }