#898654: try to install required modules first.

From: Damien Tournoud <damien@commerceguys.com>


---
 install.core.inc |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git includes/install.core.inc includes/install.core.inc
index b33e3a6..aeca391 100644
--- includes/install.core.inc
+++ includes/install.core.inc
@@ -1354,16 +1354,23 @@ function install_profile_modules(&$install_state) {
   $files = system_rebuild_module_data();
   variable_del('install_profile_modules');
 
-  // Install dependencies first.
-  $modules = array_flip($modules);
+  // Always install required modules first. Respect the dependencies between
+  // the modules.
+  $required = array();
+  $non_required = array();
   foreach ($modules as $module => $weight) {
-    $modules[$module] = $files[$module]->sort;
+    if (!empty($files[$module]->info['required'])) {
+      $required[$module] = $files[$module]->sort;
+    }
+    else {
+      $non_required[$module] = $files[$module]->sort;
+    }
   }
-  arsort($modules);
-  $modules = array_keys($modules);
+  arsort($required);
+  arsort($non_required);
 
   $operations = array();
-  foreach ($modules as $module) {
+  foreach ($required + $non_required as $module => $weight) {
     $operations[] = array('_install_module_batch', array($module, $files[$module]->info['name']));
   }
   $batch = array(
