Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.455
diff -u -p -r1.455 system.install
--- modules/system/system.install	8 Mar 2010 15:44:36 -0000	1.455
+++ modules/system/system.install	15 Mar 2010 14:38:43 -0000
@@ -60,6 +60,9 @@ function system_requirements($phase) {
     $requirements['php'] = array(
       'title' => $t('PHP'),
       'value' => ($phase == 'runtime') ? $phpversion .' ('. l($t('more information'), 'admin/reports/status/php') .')' : $phpversion,
+      // We need to add an empty description here to potentially fill it when
+      // checking PHP versions of updated modules (see below).
+      'description' => '',
     );
   }
   else {
@@ -70,7 +73,6 @@ function system_requirements($phase) {
       'severity' => REQUIREMENT_INFO,
     );
   }
-
   if (version_compare($phpversion, DRUPAL_MINIMUM_PHP) < 0) {
     $requirements['php']['description'] = $t('Your PHP installation is too old. Drupal requires at least PHP %version.', array('%version' => DRUPAL_MINIMUM_PHP));
     $requirements['php']['severity'] = REQUIREMENT_ERROR;
@@ -353,6 +355,63 @@ function system_requirements($phase) {
     $requirements['update access']['title'] = $t('Access to update.php');
   }
 
+  // Display an error if a newly introduced dependency in a module is not resolved.
+  // During installation we cannot access the database so we need to use the
+  // internal helper function.
+  $files = drupal_installation_attempted() ? _module_build_dependencies(ksort(_system_rebuild_module_data())) : system_rebuild_module_data();
+  foreach ($files as $module => $file) {
+    if (!$file->status) {
+      continue;
+    }
+    $name = $file->info['name'];
+    // Check the module's PHP version.
+    $php = $file->info['php'];
+    if (version_compare($php, PHP_VERSION, '>')) {
+      $requirements['php']['description'] .= $t('@name requires at least PHP @version.', array('@name' => $name, '@version' => $php));
+      $requirements['php']['severity'] = REQUIREMENT_ERROR;
+    }
+    // Check the module's required modules.
+    foreach ($file->requires as $requirement) {
+      $required_module = $requirement['name'];
+
+      // Check if the module exists.
+      if (!isset($files[$required_module])) {
+        $requirements["$module-$required_module"] = array(
+          'title' => $t('Unresolved dependency'),
+          'description' => $t('@name requires this module.', array('@name' => $name)),
+          'value' => t('@required_name (Missing)', array('@required_name' => $required_module)),
+          'severity' => REQUIREMENT_ERROR,
+        );
+        continue;
+      }
+      // Check the module's status.
+      $required_module_data = $files[$required_module];
+      $required_name = $required_module_data->info['name'];
+      // Check the module's version.
+      $version = str_replace(DRUPAL_CORE_COMPATIBILITY . '-', '', $required_module_data->info['version']);
+      $compatibility = drupal_check_incompatibility($requirement, $version);
+      if (!$required_module_data->status && !$compatibility) {
+        $requirements["$module-$required_module"] = array(
+          'title' => $t('Unresolved dependency'),
+          'description' => $t('@name requires this module.', array('@name' => $name)),
+          'value' => $t('@required_name (Disabled)', array('@required_name' => $required_name)),
+          'severity' => REQUIREMENT_ERROR,
+        );
+      }
+      if ($compatibility) {
+        $compatibility = substr($compatibility, 2);
+        $compatibility = rtrim($compatibility, ")");
+        print_r($compatibility);
+        $requirements["$module-$required_module-version"] = array(
+          'title' => $t('Unresolved dependency'),
+          'description' => $t('@name requires this module and version. Currently using @required_name version @version', array('@name' => $name, '@required_name' => $required_name, '@version' => $version)),
+          'value' => t('@required_name (Version @compatibility required)', array('@required_name' => $required_name, '@version' => $version, '@compatibility' => $compatibility)),
+          'severity' => REQUIREMENT_ERROR,
+        );
+      }
+    }
+  }
+
   // Test Unicode library
   include_once DRUPAL_ROOT . '/includes/unicode.inc';
   $requirements = array_merge($requirements, unicode_requirements());
