diff -u b/modules/simpletest/tests/module_test.info b/modules/simpletest/tests/module_test.info --- b/modules/simpletest/tests/module_test.info +++ b/modules/simpletest/tests/module_test.info @@ -10 +10 @@ -dependencies[] = list +dependencies[] = list (>=7.x) diff -u b/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module --- b/modules/simpletest/tests/module_test.module +++ b/modules/simpletest/tests/module_test.module @@ -52,7 +52,6 @@ if ($file->name == 'seven' && $type == 'theme') { $info['regions']['test_region'] = t('Test region'); } - if ($file->name == 'module_test' && variable_get('module_test_hook_system_info_alter')) { $info['required'] = TRUE; $info['explanation'] = 'Testing hook_system_info_alter()'; diff -u b/modules/system/system.module b/modules/system/system.module --- b/modules/system/system.module +++ b/modules/system/system.module @@ -2422,12 +2422,6 @@ drupal_alter('system_info', $modules[$key]->info, $modules[$key], $type); } - // It is possible that a module was marked as required by - // hook_system_info_alter() and modules that it depends on are not required. - foreach ($modules as $module) { - _system_rebuild_module_data_ensure_required($module, $modules); - } - if (isset($modules[$profile])) { // The installation profile is required, if it's a valid module. $modules[$profile]->info['required'] = TRUE; @@ -2439,6 +2433,12 @@ drupal_alter('system_info', $modules[$key]->info, $modules[$key], $type); } + // It is possible that a module was marked as required by + // hook_system_info_alter() and modules that it depends on are not required. + foreach ($modules as $module) { + _system_rebuild_module_data_ensure_required($module, $modules); + } + if (isset($modules[$profile])) { // The installation profile is required, if it's a valid module. $modules[$profile]->info['required'] = TRUE; @@ -2462,12 +2462,14 @@ */ function _system_rebuild_module_data_ensure_required($module, &$modules) { if (!empty($module->info['required'])) { - foreach ($module->info['dependencies'] as $dependant) { - if (!isset($modules[$dependant]->info['required'])) { - $modules[$dependant]->info['required'] = TRUE; - $modules[$dependant]->info['explanation'] = t('Dependency of required module @module', array('@module' => $module->name)); + foreach ($module->info['dependencies'] as $dependency) { + $dependency_data = drupal_parse_dependency($dependency); + $dependency_name = $dependency_data['name']; + if (!isset($modules[$dependency_name]->info['required'])) { + $modules[$dependency_name]->info['required'] = TRUE; + $modules[$dependency_name]->info['explanation'] = t('Dependency of required module @module', array('@module' => $module->info['name'])); // Ensure any dependencies it has are required. - _system_rebuild_module_data_ensure_required($modules[$dependant], $modules); + _system_rebuild_module_data_ensure_required($modules[$dependency_name], $modules); } } } diff -u b/modules/system/system.test b/modules/system/system.test --- b/modules/system/system.test +++ b/modules/system/system.test @@ -2145,9 +2145,6 @@ * return freshly altered info. */ function testSystemInfoAlter() { - variable_set('module_test_hook_system_info_alter', TRUE); - $info = system_rebuild_module_data(); - $this->assertFalse(isset($info['list']->info['required']), 'Before the module_test is installed the list module is not required.'); // Enable our test module. Flush all caches, which we assert is the only // thing necessary to use the rebuilt {system}.info. module_enable(array('module_test'), FALSE); @@ -2163,9 +2160,6 @@ $this->assertTrue(isset($info['regions']['test_region']), 'Altered theme info was returned by system_list().'); $list_themes = list_themes(); $this->assertTrue(isset($list_themes['seven']->info['regions']['test_region']), 'Altered theme info was returned by list_themes().'); - $info = system_rebuild_module_data(); - $this->assertTrue($info['list']->info['required'], 'After the module_test is installed the list module is required.'); - variable_set('module_test_hook_system_info_alter', FALSE); // Disable the module and verify that {system}.info is rebuilt without it. module_disable(array('module_test'), FALSE); @@ -2217,6 +2211,9 @@ * return freshly altered info. */ function testSystemInfoAlter() { + variable_set('module_test_hook_system_info_alter', TRUE); + $info = system_rebuild_module_data(); + $this->assertFalse(isset($info['list']->info['required']), 'Before the module_test is installed the list module is not required.'); // Enable our test module. Flush all caches, which we assert is the only // thing necessary to use the rebuilt {system}.info. module_enable(array('module_test'), FALSE); @@ -2232,6 +2229,9 @@ $this->assertTrue(isset($info['regions']['test_region']), 'Altered theme info was returned by system_list().'); $list_themes = list_themes(); $this->assertTrue(isset($list_themes['seven']->info['regions']['test_region']), 'Altered theme info was returned by list_themes().'); + $info = system_rebuild_module_data(); + $this->assertTrue($info['list']->info['required'], 'After the module_test is installed the list module is required.'); + variable_set('module_test_hook_system_info_alter', FALSE); // Disable the module and verify that {system}.info is rebuilt without it. module_disable(array('module_test'), FALSE);