Index: install.php
===================================================================
RCS file: /cvs/drupal/drupal/install.php,v
retrieving revision 1.142
diff -u -p -r1.142 install.php
--- install.php	10 Nov 2008 05:22:56 -0000	1.142
+++ install.php	13 Nov 2008 17:45:57 -0000
@@ -179,7 +179,7 @@ function install_verify_settings() {
   global $db_prefix, $databases;
 
   // Verify existing settings (if any).
-  if (!empty($databases)) {
+  if (!empty($databases) && install_verify_pdo()) {
     // We need this because we want to run form_get_errors.
     include_once DRUPAL_ROOT . '/includes/form.inc';
 
@@ -196,6 +196,13 @@ function install_verify_settings() {
 }
 
 /**
+ * Verify PDO library.
+ */
+function install_verify_pdo() {
+  return extension_loaded('pdo');
+}
+
+/**
  * Configure and rewrite settings.php.
  */
 function install_change_settings($profile = 'default', $install_locale = '') {
Index: includes/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/install.inc,v
retrieving revision 1.75
diff -u -p -r1.75 install.inc
--- includes/install.inc	11 Nov 2008 16:49:37 -0000	1.75
+++ includes/install.inc	13 Nov 2008 17:45:57 -0000
@@ -205,6 +205,11 @@ function drupal_detect_baseurl($file = '
  */
 function drupal_detect_database_types() {
   $databases = array();
+  
+  // Initialize the database system if it has not been
+  // initialized yet. We do not initialize it earlier to make
+  // requirements check during the installation.
+  require_once DRUPAL_ROOT . '/includes/database/database.inc'; 
 
   // We define a driver as a directory in /includes/database that in turn
   // contains a database.inc file.  That allows us to drop in additional drivers
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.450
diff -u -p -r1.450 theme.inc
--- includes/theme.inc	10 Nov 2008 15:40:03 -0000	1.450
+++ includes/theme.inc	13 Nov 2008 17:45:58 -0000
@@ -456,7 +456,7 @@ function list_themes($refresh = FALSE) {
     $themes = array();
     // Extract from the database only when it is available.
     // Also check that the site is not in the middle of an install or update.
-    if (db_is_active() && !defined('MAINTENANCE_MODE')) {
+    if (!defined('MAINTENANCE_MODE') && db_is_active()) {
       $result = db_query("SELECT * FROM {system} WHERE type = '%s'", 'theme');
       while ($theme = db_fetch_object($result)) {
         if (file_exists($theme->filename)) {
Index: includes/theme.maintenance.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.maintenance.inc,v
retrieving revision 1.20
diff -u -p -r1.20 theme.maintenance.inc
--- includes/theme.maintenance.inc	26 Oct 2008 18:06:38 -0000	1.20
+++ includes/theme.maintenance.inc	13 Nov 2008 17:45:58 -0000
@@ -28,7 +28,6 @@ function _drupal_maintenance_theme() {
   require_once DRUPAL_ROOT . '/includes/unicode.inc';
   require_once DRUPAL_ROOT . '/includes/file.inc';
   require_once DRUPAL_ROOT . '/includes/module.inc';
-  require_once DRUPAL_ROOT . '/includes/database/database.inc';
   unicode_check();
 
   // Install and update pages are treated differently to prevent theming overrides.
@@ -36,6 +35,7 @@ function _drupal_maintenance_theme() {
     $theme = 'minnelli';
   }
   else {
+    require_once DRUPAL_ROOT . '/includes/database/database.inc';
     // Load module basics (needed for hook invokes).
     $module_list['system']['filename'] = 'modules/system/system.module';
     $module_list['filter']['filename'] = 'modules/filter/filter.module';
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.278
diff -u -p -r1.278 system.install
--- modules/system/system.install	5 Nov 2008 14:28:04 -0000	1.278
+++ modules/system/system.install	13 Nov 2008 17:45:58 -0000
@@ -92,6 +92,19 @@ function system_requirements($phase) {
       $requirements['php_memory_limit']['severity'] = REQUIREMENT_WARNING;
     }
   }
+  
+  // Test PDO library availablility.
+  $requirements['pdo'] = array(
+    'title' => $t('PDO library'),
+  );
+  if (extension_loaded('pdo')) {
+    $requirements['pdo']['value'] = $t('Enabled');
+  }
+  else {
+    $requirements['pdo']['value'] = $t('Disabled');
+    $requirements['pdo']['severity'] = REQUIREMENT_ERROR;
+    $requirements['pdo']['description'] = $t('Drupal requires the PDO library for database access. See the <a href="@pdo">PHP PDO installation page</a> for instructions on how to enable PDO.', array('@pdo' => 'http://php.net/manual/en/pdo.installation.php'));
+  }
 
   // Test DB version
   global $db_type;
