Index: modules/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum.module,v
retrieving revision 1.267
diff -u -F^f -r1.267 forum.module
--- modules/forum.module	6 Sep 2005 19:38:56 -0000	1.267
+++ modules/forum.module	7 Sep 2005 04:24:15 -0000
@@ -34,6 +34,14 @@ function forum_node_info() {
 }
 
 /**
+ * Implementation of hook_info().
+ */
+function forum_info($key) {
+  $info['depends'] = array('comment', 'node');
+  return $info[$key];
+}
+
+/**
  * Implementation of hook_access().
  */
 function forum_access($op, $node) {
Index: modules/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system.module,v
retrieving revision 1.229
diff -u -F^f -r1.229 system.module
--- modules/system.module	28 Aug 2005 18:17:47 -0000	1.229
+++ modules/system.module	7 Sep 2005 04:24:16 -0000
@@ -550,11 +550,46 @@ function system_module_listing() {
   return $output;
 }
 
+/**
+ * Resolve dependencies between modules.
+ */
+function system_module_dependencies(&$edit) {
+  $new_module = FALSE;
+  foreach ($edit['status'] as $module => $status) {
+    if ($status) {
+      drupal_load('module', $module);
+      $enabled = array();
+      foreach ((array) module_invoke($module, 'info', 'depends') as $required) {
+        if (!$edit['status'][$required]) {
+          $edit['status'][$required] = 1;
+          $enabled[] = $required;
+        }
+      }
+      if (!empty($enabled)) {
+        $new_module = TRUE;
+        if (count($enabled) == 1) {
+          drupal_set_message(t('%enabled module has been enabled for you because %module needs it to work properly. Please read the documentation of %enabled module about its proper installation (for eg. database tables, permissions and settings).', array ('%module' => theme('placeholder', $module), '%enabled' => theme ('placeholder', $enabled))));
+        }
+        else {
+          drupal_set_message(t('%enabled modules has been enabled for you because %module needs them to work properly. Please read the appropriate documentation of %enabled modules for proper installation (for eg. database tables, permissions and settings).', array ('%module' => theme('placeholder', $module), '%enabled' => theme('placeholder', $enabled))));
+        }
+      }
+    }
+  }
+  // New modules have been enabled, also check their dependencies.
+  if ($new_module) {
+    system_module_dependencies($edit);
+  }
+}
+
 function system_listing_save($edit = array()) {
   $op = $_POST['op'];
   $edit = $_POST['edit'];
 
   if ($op == t('Save configuration')) {
+    if ($edit['type'] == 'module') {
+      system_module_dependencies($edit);
+    }
     db_query("UPDATE {system} SET status = 0 WHERE type = '%s'", $edit['type']);
     foreach ($edit['status'] as $name => $status) {
       // Make certain that the default theme is enabled to avoid user error
