Index: includes/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/install.inc,v
retrieving revision 1.50
diff -u -r1.50 install.inc
--- includes/install.inc	30 Nov 2007 12:19:10 -0000	1.50
+++ includes/install.inc	6 Dec 2007 17:39:40 -0000
@@ -275,10 +275,23 @@
   $function = $profile .'_profile_modules';
   $module_list = array_merge(drupal_required_modules(), $function(), ($locale != 'en' ? array('locale') : array()));
 
+  // Read available and used memory.
+  $memory = array(
+    'limit' => floatval(ini_get('memory_limit'));,
+    'required' => 0,
+  }
+
   // Get a list of modules that exist in Drupal's assorted subdirectories.
   $present_modules = array();
-  foreach (drupal_system_listing('\.module$', 'modules', 'name', 0) as $present_module) {
-    $present_modules[] = $present_module->name;
+  foreach (drupal_system_listing('\.module$', 'modules', 'name', 0) as $file) {
+    $present_modules[] = $file->name;
+    // If this is one of the modules to be installed, load its memory requirement.
+    if (in_array($file->name, $module_list)) {
+      $info = drupal_parse_info_file(dirname($file->filename) .'/'. $file->name .'.info');
+      if (isset($info['memory']) {
+        $memory['required'] += $info['memory'];
+      }
+    }
   }
 
   // Verify that all of the profile's required modules are present.
@@ -288,9 +301,11 @@
       drupal_set_message(st('The %module module is required but was not found. Please move it into the <em>modules</em> subdirectory.', array('%module' => $module)), 'error');
     }
   }
-  else {
-    return $module_list;
+  // Verify that the required memory usage is present.
+  if (($memory['required']) < $memory['limit']) {
+    drupal_set_message(st('This Drupal install would require @required MB of memory but you have only @limit MB available. Before installing, you would need to increase the memory limit available to PHP.', array('@required' => $memory['required'], '@limit' => $memory['limit']));
   }
+  return $module_list;
 }
 
 /**
