diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php
index 7ba1ab59a..0a4bda6f0 100644
--- a/src/Composer/Installer.php
+++ b/src/Composer/Installer.php
@@ -340,7 +340,7 @@ class Installer
// force binaries re-generation
$this->io->writeError('Installing binaries files');
foreach ($localRepo->getPackages() as $package) {
- $this->installationManager->installBinary($package);
+ $this->installationManager->installBinary($package);
}
$vendorDir = $this->config->get('vendor-dir');
diff --git a/src/Composer/Installer/InstallationManager.php b/src/Composer/Installer/InstallationManager.php
index 96a194232..6734aa7e3 100644
--- a/src/Composer/Installer/InstallationManager.php
+++ b/src/Composer/Installer/InstallationManager.php
@@ -137,9 +137,14 @@ class InstallationManager
{
try {
$installer = $this->getInstaller($package->getType());
- $installer->installBinary($package);
} catch (\InvalidArgumentException $e) {
- // the given installer doesn't support installing binaries
+ // no installer found for the current package type (@see `getInstaller()`)
+ return;
+ }
+
+ // if the given installer support installing binaries
+ if ($installer instanceof InstallerBinaryInterface) {
+ $installer->installBinary($package);
}
}
diff --git a/src/Composer/Installer/InstallerBinaryInterface.php b/src/Composer/Installer/InstallerBinaryInterface.php
new file mode 100644
index 000000000..e87a62bd3
--- /dev/null
+++ b/src/Composer/Installer/InstallerBinaryInterface.php
@@ -0,0 +1,31 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Installer;
+
+use Composer\Package\PackageInterface;
+
+/**
+ * Interface for the package installation manager that handle binary installation.
+ *
+ * @author Konstantin Kudryashov
+ * @author Jordi Boggiano
+ */
+interface InstallerBinaryInterface
+{
+ /**
+ * Installs binary file for a specific package.
+ *
+ * @param PackageInterface $package package instance
+ */
+ public function installBinary(PackageInterface $package);
+}
diff --git a/src/Composer/Installer/LibraryInstaller.php b/src/Composer/Installer/LibraryInstaller.php
index 0b8444d6a..bd929062f 100644
--- a/src/Composer/Installer/LibraryInstaller.php
+++ b/src/Composer/Installer/LibraryInstaller.php
@@ -25,7 +25,7 @@ use Composer\Util\Silencer;
* @author Jordi Boggiano
* @author Konstantin Kudryashov
*/
-class LibraryInstaller implements InstallerInterface
+class LibraryInstaller implements InstallerInterface, InstallerBinaryInterface
{
protected $composer;
protected $vendorDir;