From 9f4d5e84fe213c546579d0d00db7385b69fa8470 Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Fri, 5 Jun 2015 10:47:51 +0100
Subject: [PATCH] Issue #2460529 by alexpott, chx, phenaproxima: Migrations
 need to use the configuration entity dependency system

---
 .../Drupal/Core/Config/ConfigInstaller.php    |  6 --
 core/modules/migrate/src/Entity/Migration.php | 58 +++++++++++-
 .../src/Plugin/Derivative/MigrateEntity.php   |  1 +
 .../Derivative/MigrateEntityRevision.php      |  1 +
 .../src/Plugin/migrate/destination/Config.php | 14 ++-
 .../src/Plugin/migrate/destination/Entity.php | 14 ++-
 .../tests/src/Unit/MigrateSourceTest.php      |  2 +-
 .../src/Unit/MigrateSqlSourceTestCase.php     |  3 +-
 .../migrate/tests/src/Unit/SqlBaseTest.php    |  7 ++
 .../migrate.migration.d6_action_settings.yml  |  4 +
 .../migrate.migration.d6_aggregator_feed.yml  |  4 +
 .../migrate.migration.d6_aggregator_item.yml  |  6 ++
 ...grate.migration.d6_aggregator_settings.yml |  4 +
 .../migrate.migration.d6_block.yml            |  8 ++
 ....migration.d6_block_content_body_field.yml |  9 +-
 ...igrate.migration.d6_block_content_type.yml |  6 +-
 .../migrate.migration.d6_book.yml             |  7 ++
 .../migrate.migration.d6_book_settings.yml    |  4 +
 ...igrate.migration.d6_cck_field_revision.yml |  7 ++
 .../migrate.migration.d6_cck_field_values.yml |  8 ++
 .../migrate.migration.d6_comment.yml          | 12 +++
 ...te.migration.d6_comment_entity_display.yml |  6 ++
 ...gration.d6_comment_entity_form_display.yml |  6 ++
 ...d6_comment_entity_form_display_subject.yml |  6 ++
 .../migrate.migration.d6_comment_field.yml    | 10 +-
 ...te.migration.d6_comment_field_instance.yml |  8 ++
 .../migrate.migration.d6_comment_type.yml     |  5 +
 .../migrate.migration.d6_contact_category.yml |  4 +
 .../migrate.migration.d6_contact_settings.yml |  6 ++
 .../migrate.migration.d6_custom_block.yml     |  7 ++
 .../migrate.migration.d6_date_formats.yml     |  3 +
 .../migrate.migration.d6_dblog_settings.yml   |  4 +
 .../migrate.migration.d6_field.yml            |  7 +-
 ....migration.d6_field_formatter_settings.yml |  7 ++
 .../migrate.migration.d6_field_instance.yml   |  8 ++
 ...tion.d6_field_instance_widget_settings.yml |  6 ++
 .../migrate.migration.d6_file.yml             |  4 +
 .../migrate.migration.d6_file_settings.yml    |  4 +
 .../migrate.migration.d6_filter_format.yml    |  4 +
 .../migrate.migration.d6_forum_settings.yml   |  6 ++
 .../migrate.migration.d6_locale_settings.yml  |  4 +
 .../migrate.migration.d6_menu.yml             |  4 +
 .../migrate.migration.d6_menu_links.yml       |  6 ++
 .../migrate.migration.d6_menu_settings.yml    |  4 +
 .../migrate.migration.d6_node.yml             |  9 ++
 .../migrate.migration.d6_node_revision.yml    |  6 ++
 ...rate.migration.d6_node_setting_promote.yml |  6 ++
 ...grate.migration.d6_node_setting_status.yml |  6 ++
 ...grate.migration.d6_node_setting_sticky.yml |  6 ++
 .../migrate.migration.d6_node_settings.yml    |  4 +
 .../migrate.migration.d6_node_type.yml        |  4 +
 .../migrate.migration.d6_profile_values.yml   |  9 ++
 .../migrate.migration.d6_search_page.yml      |  4 +
 .../migrate.migration.d6_search_settings.yml  |  4 +
 ...grate.migration.d6_simpletest_settings.yml |  4 +
 ...grate.migration.d6_statistics_settings.yml |  4 +
 .../migrate.migration.d6_syslog_settings.yml  |  4 +
 .../migrate.migration.d6_system_cron.yml      |  4 +
 .../migrate.migration.d6_system_file.yml      |  4 +
 .../migrate.migration.d6_system_filter.yml    |  4 +
 .../migrate.migration.d6_system_image.yml     |  4 +
 .../migrate.migration.d6_system_image_gd.yml  |  4 +
 .../migrate.migration.d6_system_logging.yml   |  4 +
 ...igrate.migration.d6_system_maintenance.yml |  4 +
 ...igrate.migration.d6_system_performance.yml |  4 +
 .../migrate.migration.d6_system_rss.yml       |  4 +
 .../migrate.migration.d6_system_site.yml      |  4 +
 ...migrate.migration.d6_taxonomy_settings.yml |  4 +
 .../migrate.migration.d6_taxonomy_term.yml    |  6 ++
 ...grate.migration.d6_taxonomy_vocabulary.yml |  4 +
 .../migrate.migration.d6_term_node.yml        |  8 ++
 ...igrate.migration.d6_term_node_revision.yml |  7 ++
 .../migrate.migration.d6_text_settings.yml    |  4 +
 .../migrate.migration.d6_update_settings.yml  |  4 +
 .../migrate.migration.d6_upload.yml           |  7 ++
 ...ate.migration.d6_upload_entity_display.yml |  6 ++
 ...igration.d6_upload_entity_form_display.yml |  6 ++
 .../migrate.migration.d6_upload_field.yml     | 10 +-
 ...ate.migration.d6_upload_field_instance.yml |  8 ++
 .../migrate.migration.d6_url_alias.yml        |  3 +
 .../migrate.migration.d6_user.yml             |  6 ++
 ...ate.migration.d6_user_contact_settings.yml |  6 ++
 .../migrate.migration.d6_user_mail.yml        |  4 +
 ...gration.d6_user_picture_entity_display.yml |  6 ++
 ...on.d6_user_picture_entity_form_display.yml |  6 ++
 ...igrate.migration.d6_user_picture_field.yml | 10 +-
 ...gration.d6_user_picture_field_instance.yml |  7 ++
 ...migrate.migration.d6_user_picture_file.yml |  1 +
 ...gration.d6_user_profile_entity_display.yml |  4 +
 ...on.d6_user_profile_entity_form_display.yml |  4 +
 ...igrate.migration.d6_user_profile_field.yml |  7 +-
 ...gration.d6_user_profile_field_instance.yml |  7 ++
 .../migrate.migration.d6_user_role.yml        |  6 ++
 .../migrate.migration.d6_user_settings.yml    |  4 +
 .../migrate.migration.d6_view_modes.yml       |  4 +
 ...migration.d6_vocabulary_entity_display.yml |  6 ++
 ...tion.d6_vocabulary_entity_form_display.yml |  6 ++
 .../migrate.migration.d6_vocabulary_field.yml | 10 +-
 ...migration.d6_vocabulary_field_instance.yml |  7 ++
 .../schema/migrate_drupal.source.schema.yml   |  4 +
 .../destination/EntityFieldStorageConfig.php  | 93 +++++++++++++++++++
 .../Plugin/migrate/source/DrupalSqlBase.php   | 39 +++++++-
 .../src/Plugin/migrate/source/EmptySource.php | 69 ++++++++++++++
 .../src/Plugin/migrate/source/Variable.php    |  5 +-
 .../src/Plugin/migrate/source/d6/ViewMode.php | 16 ++++
 .../src/Tests/MigrateFullDrupalTestBase.php   | 15 +++
 ...ntVariableEntityFormDisplaySubjectTest.php |  2 +-
 .../src/Tests/d6/MigrateDrupal6Test.php       |  1 +
 .../d6/MigrateUserContactSettingsTest.php     |  5 +
 .../dependencies/MigrateDependenciesTest.php  |  2 +-
 .../src/Unit/source/d6/Drupal6SqlBaseTest.php |  3 +-
 111 files changed, 836 insertions(+), 30 deletions(-)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_action_settings.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_aggregator_feed.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_aggregator_item.yml (79%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_aggregator_settings.yml (91%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_block.yml (91%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_block_content_body_field.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_block_content_type.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_book.yml (76%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_book_settings.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_cck_field_revision.yml (69%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_cck_field_values.yml (66%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment.yml (75%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_entity_display.yml (83%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_entity_form_display.yml (83%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_entity_form_display_subject.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_field.yml (70%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_field_instance.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_comment_type.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_contact_category.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_contact_settings.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_custom_block.yml (72%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_date_formats.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_dblog_settings.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_field.yml (96%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_field_formatter_settings.yml (97%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_field_instance.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_field_instance_widget_settings.yml (93%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_file.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_file_settings.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_filter_format.yml (93%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_forum_settings.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_locale_settings.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_menu.yml (76%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_menu_links.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_menu_settings.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_revision.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_setting_promote.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_setting_status.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_setting_sticky.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_settings.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_node_type.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_profile_values.yml (58%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_search_page.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_search_settings.yml (89%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_simpletest_settings.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_statistics_settings.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_syslog_settings.yml (83%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_cron.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_file.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_filter.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_image.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_image_gd.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_logging.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_maintenance.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_performance.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_rss.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_system_site.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_taxonomy_settings.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_taxonomy_term.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_taxonomy_vocabulary.yml (88%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_term_node.yml (66%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_term_node_revision.yml (75%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_text_settings.yml (82%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_update_settings.yml (90%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_upload.yml (77%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_upload_entity_display.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_upload_entity_form_display.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_upload_field.yml (79%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_upload_field_instance.yml (78%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_url_alias.yml (81%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user.yml (87%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_contact_settings.yml (80%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_mail.yml (96%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_picture_entity_display.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_picture_entity_form_display.yml (85%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_picture_field.yml (76%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_picture_field_instance.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_picture_file.yml (96%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_profile_entity_display.yml (94%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_profile_entity_form_display.yml (95%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_profile_field.yml (86%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_profile_field_instance.yml (79%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_role.yml (92%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_user_settings.yml (92%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_view_modes.yml (92%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_vocabulary_entity_display.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_vocabulary_entity_form_display.yml (84%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_vocabulary_field.yml (75%)
 rename core/modules/migrate_drupal/config/{install => optional}/migrate.migration.d6_vocabulary_field_instance.yml (85%)
 create mode 100644 core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
 create mode 100644 core/modules/migrate_drupal/src/Plugin/migrate/source/EmptySource.php

diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php
index 6c0bd7ee3348..0ac79c08578c 100644
--- a/core/lib/Drupal/Core/Config/ConfigInstaller.php
+++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php
@@ -498,12 +498,6 @@ protected function findDefaultConfigWithUnmetDependencies(StorageInterface $stor
    *   TRUE if the dependencies are met, FALSE if not.
    */
   protected function validateDependencies($config_name, array $data, array $enabled_extensions, array $all_config) {
-    // All the migrate tests will fail if we check since they install the
-    // migrate_drupal module but only set up the dependencies for the single
-    // migration they are testing.
-    if (strpos($config_name, 'migrate.migration.') === 0) {
-      return TRUE;
-    }
     if (isset($data['dependencies'])) {
       $all_dependencies = $data['dependencies'];
 
diff --git a/core/modules/migrate/src/Entity/Migration.php b/core/modules/migrate/src/Entity/Migration.php
index cdc22166314a..e3f920cb5d5f 100644
--- a/core/modules/migrate/src/Entity/Migration.php
+++ b/core/modules/migrate/src/Entity/Migration.php
@@ -198,12 +198,41 @@ class Migration extends ConfigEntityBase implements MigrationInterface, Requirem
   protected $requirements = [];
 
   /**
-   * These migrations, if ran at all, must be executed before this migration.
+   * These migrations, if run, must be executed before this migration.
+   *
+   * These are different from the configuration dependencies. Migration
+   * dependencies are only used to store relationships between migrations.
+   *
+   * The migration_dependencies value is structured like this:
+   * @code
+   * array(
+   *   'required' => array(
+   *     // An array of migration IDs that must be run before this migration.
+   *   ),
+   *   'optional' => array(
+   *     // An array of migration IDs that, if they exist, must be run before
+   *     // this migration.
+   *   ),
+   * );
+   * @endcode
    *
    * @var array
    */
   protected $migration_dependencies = [];
 
+  /**
+   * The migration's configuration dependencies.
+   *
+   * These store any dependencies on modules or other configuration (including
+   * other migrations) that must be available before the migration can be
+   * created.
+   *
+   * @see \Drupal\Core\Config\Entity\ConfigDependencyManager
+   *
+   * @var array
+   */
+  protected $dependencies = [];
+
   /**
    * The entity manager.
    *
@@ -478,6 +507,31 @@ public function setTrackLastImported($track_last_imported) {
    * {@inheritdoc}
    */
   public function getMigrationDependencies() {
-    return $this->migration_dependencies;
+    return $this->migration_dependencies + ['required' => [], 'optional' => []];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function trustData() {
+    // Migrations cannot be trusted since they are often written by hand and not
+    // through a UI.
+    $this->trustedData = FALSE;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    parent::calculateDependencies();
+    $this->calculatePluginDependencies($this->getSourcePlugin());
+    $this->calculatePluginDependencies($this->getDestinationPlugin());
+    // Add dependencies on required migration dependencies.
+    foreach ($this->getMigrationDependencies()['required'] as $dependency) {
+      $this->addDependency('config', $this->getEntityType()->getConfigPrefix() . '.' . $dependency);
+    }
+
+    return $this->dependencies;
   }
 }
diff --git a/core/modules/migrate/src/Plugin/Derivative/MigrateEntity.php b/core/modules/migrate/src/Plugin/Derivative/MigrateEntity.php
index 8f4a57313435..76884721457f 100644
--- a/core/modules/migrate/src/Plugin/Derivative/MigrateEntity.php
+++ b/core/modules/migrate/src/Plugin/Derivative/MigrateEntity.php
@@ -68,6 +68,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         'id' => "entity:$entity_type",
         'class' => $class,
         'requirements_met' => 1,
+        'provider' => $entity_info->getProvider(),
       );
     }
     return $this->derivatives;
diff --git a/core/modules/migrate/src/Plugin/Derivative/MigrateEntityRevision.php b/core/modules/migrate/src/Plugin/Derivative/MigrateEntityRevision.php
index 5c9ae1972455..51c98302ca7d 100644
--- a/core/modules/migrate/src/Plugin/Derivative/MigrateEntityRevision.php
+++ b/core/modules/migrate/src/Plugin/Derivative/MigrateEntityRevision.php
@@ -66,6 +66,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
           'id' => "entity_revision:$entity_type",
           'class' => 'Drupal\migrate\Plugin\migrate\destination\EntityRevision',
           'requirements_met' => 1,
+          'provider' => $entity_info->getProvider(),
         );
       }
     }
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Config.php b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
index 7d84813a6c1d..dcb397bfa477 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Config.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
@@ -6,7 +6,9 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\Component\Plugin\DependentPluginInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Entity\DependencyTrait;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\MigrateException;
@@ -24,7 +26,8 @@
  *   id = "config"
  * )
  */
-class Config extends DestinationBase implements ContainerFactoryPluginInterface {
+class Config extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
+  use DependencyTrait;
 
   /**
    * The config object.
@@ -104,4 +107,13 @@ public function getIds() {
     return array();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $provider = explode('.', $this->config->getName(), 2)[0];
+    $this->addDependency('module', $provider);
+    return $this->dependencies;
+  }
+
 }
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 9c44732bf898..69ff3e5198a6 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\migrate\Plugin\migrate\destination;
 
+use Drupal\Component\Plugin\DependentPluginInterface;
+use Drupal\Core\Entity\DependencyTrait;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
@@ -19,7 +21,8 @@
  *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntity"
  * )
  */
-abstract class Entity extends DestinationBase implements ContainerFactoryPluginInterface {
+abstract class Entity extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
+  use DependencyTrait;
 
   /**
    * The entity storage.
@@ -80,7 +83,6 @@ public static function create(ContainerInterface $container, array $configuratio
    *
    * @return string
    *   The entity type.
-   * @throws \Drupal\migrate\MigrateException
    */
   protected static function getEntityTypeId($plugin_id) {
     // Remove "entity:"
@@ -169,4 +171,12 @@ protected function getKey($key) {
     return $this->storage->getEntityType()->getKey($key);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $this->addDependency('module', $this->storage->getEntityType()->getProvider());
+    return $this->dependencies;
+  }
+
 }
diff --git a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
index a2389274869e..366de38e0975 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
@@ -83,7 +83,7 @@ protected function getSource($configuration = [], $migrate_config = [], $status
       ->willReturn($id_map_array);
 
     $constructor_args = [$configuration, 'd6_action', [], $this->migration];
-    $methods = ['getModuleHandler', 'fields', 'getIds', '__toString', 'getIterator', 'prepareRow', 'initializeIterator'];
+    $methods = ['getModuleHandler', 'fields', 'getIds', '__toString', 'getIterator', 'prepareRow', 'initializeIterator', 'calculateDependencies'];
     $source_plugin = $this->getMock('\Drupal\migrate\Plugin\migrate\source\SourcePluginBase', $methods, $constructor_args);
 
     $source_plugin
diff --git a/core/modules/migrate/tests/src/Unit/MigrateSqlSourceTestCase.php b/core/modules/migrate/tests/src/Unit/MigrateSqlSourceTestCase.php
index 22863aa27d89..16d7e0be8030 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateSqlSourceTestCase.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateSqlSourceTestCase.php
@@ -70,6 +70,7 @@ abstract class MigrateSqlSourceTestCase extends MigrateTestCase {
    */
   protected function setUp() {
     $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
+    $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
 
     $migration = $this->getMigration();
     $migration->expects($this->any())
@@ -77,7 +78,7 @@ protected function setUp() {
       ->will($this->returnValue(static::ORIGINAL_HIGH_WATER));
     // Need the test class, not the original because we need a setDatabase method. This is not pretty :/
     $plugin_class  = preg_replace('/^Drupal\\\\(\w+)\\\\Plugin\\\\migrate(\\\\source(\\\\.+)?\\\\)([^\\\\]+)$/', 'Drupal\\Tests\\\$1\\Unit$2Test$4', static::PLUGIN_CLASS);
-    $plugin = new $plugin_class($this->migrationConfiguration['source'], $this->migrationConfiguration['source']['plugin'], array(), $migration);
+    $plugin = new $plugin_class($this->migrationConfiguration['source'], $this->migrationConfiguration['source']['plugin'], array(), $migration, $entity_manager);
     $plugin->setDatabase($this->getDatabase($this->databaseContents + array('test_map' => array())));
     $plugin->setModuleHandler($module_handler);
     $plugin->setStringTranslation($this->getStringTranslationStub());
diff --git a/core/modules/migrate/tests/src/Unit/SqlBaseTest.php b/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
index b526b7c5a094..caa6e3da295a 100644
--- a/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
+++ b/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
@@ -167,4 +167,11 @@ public function fields() {}
    */
   public function query() {}
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    return [];
+  }
+
 }
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_action_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_action_settings.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_action_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_action_settings.yml
index a1b6265618a5..1a518fbff695 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_action_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_action_settings.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: action.settings
+dependencies:
+  module:
+    - action
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_feed.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_feed.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_feed.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_feed.yml
index 7b19afd34486..2daaa8a8dc40 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_feed.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_feed.yml
@@ -19,3 +19,7 @@ process:
 
 destination:
   plugin: entity:aggregator_feed
+dependencies:
+  module:
+    - aggregator
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_item.yml
similarity index 79%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_item.yml
index 615c55013837..aa80302e82bf 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_item.yml
@@ -22,3 +22,9 @@ destination:
 migration_dependencies:
   required:
     - d6_aggregator_feed
+dependencies:
+  config:
+    - migrate.migration.d6_aggregator_feed
+  module:
+    - aggregator
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_settings.yml
similarity index 91%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_settings.yml
index 5b8e6059a27a..9720f6e5a9bf 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_aggregator_settings.yml
@@ -23,3 +23,7 @@ process:
 destination:
   plugin: config
   config_name: aggregator.settings
+dependencies:
+  module:
+    - aggregator
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block.yml
similarity index 91%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_block.yml
index a291ecb73dbf..ef02e6fc5d62 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block.yml
@@ -91,3 +91,11 @@ migration_dependencies:
     - d6_menu
     - d6_custom_block
     - d6_user_role
+dependencies:
+  config:
+    - migrate.migration.d6_custom_block
+    - migrate.migration.d6_menu
+    - migrate.migration.d6_user_role
+  module:
+    - block
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_body_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_body_field.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_body_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_body_field.yml
index 3da5490ee127..08935eed9e68 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_body_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_body_field.yml
@@ -5,7 +5,7 @@ migration_tags:
 source:
   # We do an empty source and a proper destination to have an idmap for
   # migration_dependencies.
-  plugin: empty
+  plugin: md_empty
   constants:
     entity_type: block_content
     bundle: basic
@@ -23,3 +23,10 @@ destination:
 migration_dependencies:
   required:
     - d6_block_content_type
+dependencies:
+  config:
+    - migrate.migration.d6_block_content_type
+  module:
+    - block_content
+    - field
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_type.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_type.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_type.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_type.yml
index 34395560c459..f055a6180858 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block_content_type.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_block_content_type.yml
@@ -5,7 +5,7 @@ migration_tags:
 source:
   # We do an empty source and a proper destination to have an idmap for
   # migration_dependencies.
-  plugin: empty
+  plugin: md_empty
   constants:
     id: basic
     label: Basic
@@ -14,3 +14,7 @@ process:
   label: 'constants/label'
 destination:
   plugin: entity:block_content_type
+dependencies:
+  module:
+    - block_content
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_book.yml
similarity index 76%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_book.yml
index 1467f91e19e5..b6b668d14f30 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_book.yml
@@ -20,3 +20,10 @@ destination:
 migration_dependencies:
   required:
     - d6_node
+dependencies:
+  config:
+    - migrate.migration.d6_node
+  module:
+    - book
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_book_settings.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_book_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_book_settings.yml
index e885d37e9e85..35302d0313e8 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_book_settings.yml
@@ -15,3 +15,7 @@ process:
 destination:
   plugin: config
   config_name: book.settings
+dependencies:
+  module:
+    - book
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_revision.yml
similarity index 69%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_revision.yml
index fa159894c27e..b3203f913261 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_revision.yml
@@ -15,3 +15,10 @@ migration_dependencies:
   required:
     - d6_cck_field_values
     - d6_node_revision
+dependencies:
+  config:
+    - migrate.migration.d6_cck_field_values
+    - migrate.migration.d6_node_revision
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_values.yml
similarity index 66%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_values.yml
index 27027baf7218..0457ecfe7b96 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_cck_field_values.yml
@@ -19,3 +19,11 @@ migration_dependencies:
     - d6_node
     - d6_field_formatter_settings
     - d6_field_instance_widget_settings
+dependencies:
+  config:
+    - migrate.migration.d6_field_formatter_settings
+    - migrate.migration.d6_field_instance_widget_settings
+    - migrate.migration.d6_node
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
similarity index 75%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
index 1a41ec7aecfd..94fb020f0511 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
@@ -43,3 +43,15 @@ migration_dependencies:
     - d6_comment_entity_display
     - d6_comment_entity_form_display
     - d6_filter_format
+dependencies:
+  config:
+    - migrate.migration.d6_comment_entity_display
+    - migrate.migration.d6_comment_entity_form_display
+    - migrate.migration.d6_comment_type
+    - migrate.migration.d6_filter_format
+    - migrate.migration.d6_node
+    - migrate.migration.d6_user
+  module:
+    - comment
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_display.yml
similarity index 83%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_display.yml
index e06c08fcce4d..99e373b40342 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_display.yml
@@ -24,3 +24,9 @@ destination:
 migration_dependencies:
   required:
     - d6_comment_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_comment_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display.yml
similarity index 83%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display.yml
index a05a11baeb6d..059517f2047e 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display.yml
@@ -23,3 +23,9 @@ destination:
 migration_dependencies:
   required:
     - d6_comment_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_comment_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display_subject.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display_subject.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display_subject.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display_subject.yml
index a7e3e6b248ff..8a362728923e 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display_subject.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_entity_form_display_subject.yml
@@ -30,3 +30,9 @@ destination:
 migration_dependencies:
   required:
     - d6_comment_type
+dependencies:
+  config:
+    - migrate.migration.d6_comment_type
+  module:
+    - comment
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field.yml
similarity index 70%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field.yml
index ea5154631183..ab22f23cfbba 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field.yml
@@ -13,7 +13,15 @@ process:
   type: 'constants/type'
   'settings/comment_type': comment_type
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
 migration_dependencies:
   required:
     - d6_comment_type
+dependencies:
+  config:
+    - migrate.migration.d6_comment_type
+  module:
+    - comment
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field_instance.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field_instance.yml
index f00b5278bf3a..669ea9437771 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_field_instance.yml
@@ -32,3 +32,11 @@ migration_dependencies:
   required:
     - d6_comment_field
     - d6_node_type
+dependencies:
+  config:
+    - migrate.migration.d6_comment_field
+    - migrate.migration.d6_node_type
+  module:
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_type.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_type.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_type.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_type.yml
index 54ffec188aff..35dfde0ad5ae 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_type.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment_type.yml
@@ -13,3 +13,8 @@ process:
   description: description
 destination:
   plugin: entity:comment_type
+dependencies:
+  module:
+    - comment
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_category.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_category.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_category.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_category.yml
index d50e4fe751cb..cab9f3be1390 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_category.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_category.yml
@@ -20,3 +20,7 @@ process:
   weight: weight
 destination:
   plugin: entity:contact_form
+dependencies:
+  module:
+    - contact
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_settings.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_settings.yml
index e0897feec333..d0e4a3da8987 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_contact_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_contact_settings.yml
@@ -20,3 +20,9 @@ destination:
 migration_dependencies:
   required:
     - d6_contact_category
+dependencies:
+  config:
+    - migrate.migration.d6_contact_category
+  module:
+    - contact
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_custom_block.yml
similarity index 72%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_custom_block.yml
index 0564f892011e..be6cebfadd93 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_custom_block.yml
@@ -22,3 +22,10 @@ migration_dependencies:
   required:
     - d6_filter_format
     - d6_block_content_body_field
+dependencies:
+  config:
+    - migrate.migration.d6_block_content_body_field
+    - migrate.migration.d6_filter_format
+  module:
+    - block_content
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_date_formats.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_date_formats.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_date_formats.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_date_formats.yml
index c7f3422201d3..44448e671745 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_date_formats.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_date_formats.yml
@@ -19,3 +19,6 @@ process:
   pattern: value
 destination:
   plugin: entity:date_format
+dependencies:
+  module:
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_dblog_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_dblog_settings.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_dblog_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_dblog_settings.yml
index 6c94b1e2eb8e..fb387f57eac6 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_dblog_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_dblog_settings.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: dblog.settings
+dependencies:
+  module:
+    - dblog
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field.yml
similarity index 96%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_field.yml
index 52a082431d7b..191c538f262d 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field.yml
@@ -130,4 +130,9 @@ process:
       - widget_settings
 
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
+dependencies:
+  module:
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_formatter_settings.yml
similarity index 97%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_formatter_settings.yml
index 70d5ecbb9528..c5165b37bbde 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_formatter_settings.yml
@@ -255,3 +255,10 @@ migration_dependencies:
   required:
     - d6_field_instance
     - d6_view_modes
+dependencies:
+  config:
+    - migrate.migration.d6_field_instance
+    - migrate.migration.d6_view_modes
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance.yml
index 21ef66d66ce4..c7dda0699e8e 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance.yml
@@ -49,3 +49,11 @@ migration_dependencies:
   required:
     - d6_node_type
     - d6_field
+dependencies:
+  config:
+    - migrate.migration.d6_field
+    - migrate.migration.d6_node_type
+  module:
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance_widget_settings.yml
similarity index 93%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance_widget_settings.yml
index cecc32943022..4bd3fad0dbd7 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_field_instance_widget_settings.yml
@@ -59,3 +59,9 @@ destination:
 migration_dependencies:
   required:
     - d6_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_file.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_file.yml
index e8ead684bd22..508d0bba6d32 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_file.yml
@@ -23,3 +23,7 @@ process:
   uid: uid
 destination:
   plugin: entity:file
+dependencies:
+  module:
+    - file
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_file_settings.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_file_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_file_settings.yml
index f08d92e64a97..f2ca1707d3eb 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_file_settings.yml
@@ -15,3 +15,7 @@ process:
 destination:
   plugin: config
   config_name: file.settings
+dependencies:
+  module:
+    - file
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_filter_format.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_filter_format.yml
similarity index 93%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_filter_format.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_filter_format.yml
index 16982d39ae2b..9efaf7a6a6ed 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_filter_format.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_filter_format.yml
@@ -43,3 +43,7 @@ process:
 destination:
   plugin: entity:filter_format
   no_stub: true
+dependencies:
+  module:
+    - filter
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_forum_settings.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_forum_settings.yml
index 2df6496d7c65..72e4814f32c6 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_forum_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_forum_settings.yml
@@ -27,3 +27,9 @@ destination:
 migration_dependencies:
   required:
     - d6_taxonomy_vocabulary
+dependencies:
+  config:
+    - migrate.migration.d6_taxonomy_vocabulary
+  module:
+    - forum
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_locale_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_locale_settings.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_locale_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_locale_settings.yml
index e9440cc847d7..a38bd9221fb3 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_locale_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_locale_settings.yml
@@ -13,3 +13,7 @@ process:
 destination:
   plugin: config
   config_name: locale.settings
+dependencies:
+  module:
+    - locale
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu.yml
similarity index 76%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_menu.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu.yml
index 0d353c22ee22..4def0bf37039 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu.yml
@@ -10,3 +10,7 @@ process:
   description: description
 destination:
   plugin: entity:menu
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_links.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_links.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_links.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_links.yml
index 91c093e98b35..2ad803295070 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_links.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_links.yml
@@ -44,3 +44,9 @@ destination:
 migration_dependencies:
   required:
     - d6_menu
+dependencies:
+  config:
+    - migrate.migration.d6_menu
+  module:
+    - menu_link_content
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_settings.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_settings.yml
index 9f332fb67051..8ec039d84122 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_menu_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_menu_settings.yml
@@ -15,3 +15,7 @@ process:
 destination:
   plugin: config
   config_name: menu_ui.settings
+dependencies:
+  module:
+    - menu_ui
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node.yml
index 947a3cf8da9a..4092a25ef877 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node.yml
@@ -53,3 +53,12 @@ migration_dependencies:
   optional:
     - d6_field_instance_widget_settings
     - d6_field_formatter_settings
+dependencies:
+  config:
+    - migrate.migration.d6_filter_format
+    - migrate.migration.d6_node_settings
+    - migrate.migration.d6_node_type
+    - migrate.migration.d6_user
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_revision.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_revision.yml
index 0b1a4789d702..42118b3ab729 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_revision.yml
@@ -40,3 +40,9 @@ destination:
 migration_dependencies:
   required:
     - d6_node
+dependencies:
+  config:
+    - migrate.migration.d6_node
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_promote.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_promote.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_promote.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_promote.yml
index 8f6da3555b2c..c7f6d24eccb5 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_promote.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_promote.yml
@@ -17,3 +17,9 @@ destination:
 migration_dependencies:
   required:
     - d6_node_type
+dependencies:
+  config:
+    - migrate.migration.d6_node_type
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_status.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_status.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_status.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_status.yml
index 5d3e41294c3b..ec7afd6bf154 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_status.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_status.yml
@@ -17,3 +17,9 @@ destination:
 migration_dependencies:
   required:
     - d6_node_type
+dependencies:
+  config:
+    - migrate.migration.d6_node_type
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_sticky.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_sticky.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_sticky.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_sticky.yml
index 8a8f7b7cb09d..4f1b613713c6 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_setting_sticky.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_setting_sticky.yml
@@ -17,3 +17,9 @@ destination:
 migration_dependencies:
   required:
     - d6_node_type
+dependencies:
+  config:
+    - migrate.migration.d6_node_type
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_settings.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_settings.yml
index 3e12dd6ec303..336383a21718 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_settings.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: node.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_type.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_type.yml
index 009c3a0efb0b..7bd24ac6da66 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_node_type.yml
@@ -22,3 +22,7 @@ process:
   create_body_label: body_label
 destination:
   plugin: entity:node_type
+dependencies:
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_profile_values.yml
similarity index 58%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_profile_values.yml
index d2b81a5bfb69..047de4d04cc5 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_profile_values.yml
@@ -16,3 +16,12 @@ migration_dependencies:
     - d6_user_profile_field_instance
     - d6_user_profile_entity_display
     - d6_user_profile_entity_form_display
+dependencies:
+  config:
+    - migrate.migration.d6_user
+    - migrate.migration.d6_user_profile_entity_display
+    - migrate.migration.d6_user_profile_entity_form_display
+    - migrate.migration.d6_user_profile_field_instance
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_search_page.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_page.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_search_page.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_page.yml
index d12aca6760ff..6c05d1f1ed0a 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_search_page.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_page.yml
@@ -23,3 +23,7 @@ process:
     plugin: d6_search_configuration_rankings
 destination:
   plugin: entity:search_page
+dependencies:
+  module:
+    - migrate_drupal
+    - search
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_search_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_settings.yml
similarity index 89%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_search_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_settings.yml
index 36f5447c8d34..8e832e4ef671 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_search_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_search_settings.yml
@@ -20,3 +20,7 @@ process:
 destination:
   plugin: config
   config_name: search.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - search
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_simpletest_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_simpletest_settings.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_simpletest_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_simpletest_settings.yml
index d616a5996327..0791f1144ad5 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_simpletest_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_simpletest_settings.yml
@@ -19,3 +19,7 @@ process:
 destination:
   plugin: config
   config_name: simpletest.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - simpletest
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_statistics_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_statistics_settings.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_statistics_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_statistics_settings.yml
index a8820db2e1e4..b223e36647f8 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_statistics_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_statistics_settings.yml
@@ -15,3 +15,7 @@ process:
 destination:
   plugin: config
   config_name: statistics.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - statistics
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_syslog_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_syslog_settings.yml
similarity index 83%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_syslog_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_syslog_settings.yml
index 4c9fd4969c4f..e962856200fc 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_syslog_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_syslog_settings.yml
@@ -13,3 +13,7 @@ process:
 destination:
   plugin: config
   config_name: syslog.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - syslog
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_cron.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_cron.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_cron.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_cron.yml
index 01970a900a92..47be1354f9c6 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_cron.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_cron.yml
@@ -14,3 +14,7 @@ process:
 destination:
   plugin: config
   config_name: system.cron
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_file.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_file.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_file.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_file.yml
index 1405ff5a2a9f..925b5a9fe129 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_file.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_file.yml
@@ -18,3 +18,7 @@ process:
 destination:
   plugin: config
   config_name: system.file
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_filter.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_filter.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_filter.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_filter.yml
index 739268dd4aaa..8e36db7cc9d0 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_filter.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_filter.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: system.filter
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image.yml
index f19d516ac9a4..9581291e8acc 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: system.image
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image_gd.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image_gd.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image_gd.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image_gd.yml
index 52b90520a8ce..583ca5bea678 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_image_gd.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_image_gd.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: system.image.gd
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_logging.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_logging.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_logging.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_logging.yml
index bca03ec084ff..b75bc7e97880 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_logging.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_logging.yml
@@ -19,3 +19,7 @@ process:
 destination:
   plugin: config
   config_name: system.logging
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_maintenance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_maintenance.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_maintenance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_maintenance.yml
index afee3e8e8ffa..ee4068355e31 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_maintenance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_maintenance.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: system.maintenance
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_performance.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_performance.yml
index edff8115e209..a10edfd271dd 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_performance.yml
@@ -18,3 +18,7 @@ process:
 destination:
   plugin: config
   config_name: system.performance
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_rss.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_rss.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_rss.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_rss.yml
index 7d5fd146d5ec..7f5d3d4a6029 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_rss.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_rss.yml
@@ -13,3 +13,7 @@ process:
 destination:
   plugin: config
   config_name: system.rss
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_site.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_site.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_system_site.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_site.yml
index f940abb018e7..c4920faf257d 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_site.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_system_site.yml
@@ -25,3 +25,7 @@ process:
 destination:
   plugin: config
   config_name: system.site
+dependencies:
+  module:
+    - migrate_drupal
+    - system
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_settings.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_settings.yml
index 3fe9e1fd90c5..094e9d792c99 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_settings.yml
@@ -13,3 +13,7 @@ process:
 destination:
   plugin: config
   config_name: taxonomy.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - taxonomy
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_term.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_term.yml
index c53912f1db4f..826a1fa049e7 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_term.yml
@@ -26,3 +26,9 @@ destination:
 migration_dependencies:
   required:
     - d6_taxonomy_vocabulary
+dependencies:
+  config:
+    - migrate.migration.d6_taxonomy_vocabulary
+  module:
+    - migrate_drupal
+    - taxonomy
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_vocabulary.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_vocabulary.yml
similarity index 88%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_vocabulary.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_vocabulary.yml
index 414d2cb4f226..1a9cb9c908e2 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_vocabulary.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_taxonomy_vocabulary.yml
@@ -21,3 +21,7 @@ process:
   weight: weight
 destination:
   plugin: entity:taxonomy_vocabulary
+dependencies:
+  module:
+    - migrate_drupal
+    - taxonomy
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node.yml
similarity index 66%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node.yml
index 4eaf93572431..6d0befe85bf8 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node.yml
@@ -20,3 +20,11 @@ migration_dependencies:
     - d6_vocabulary_entity_display
     - d6_vocabulary_entity_form_display
     - d6_node
+dependencies:
+  config:
+    - migrate.migration.d6_node
+    - migrate.migration.d6_vocabulary_entity_display
+    - migrate.migration.d6_vocabulary_entity_form_display
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node_revision.yml
similarity index 75%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node_revision.yml
index 319d000595cb..9193738355b7 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_term_node_revision.yml
@@ -20,3 +20,10 @@ migration_dependencies:
   required:
     - d6_term_node
     - d6_node_revision
+dependencies:
+  config:
+    - migrate.migration.d6_node_revision
+    - migrate.migration.d6_term_node
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_text_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_text_settings.yml
similarity index 82%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_text_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_text_settings.yml
index 8f6fff30b550..56d3303aa564 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_text_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_text_settings.yml
@@ -11,3 +11,7 @@ process:
 destination:
   plugin: config
   config_name: text.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - text
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_update_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_update_settings.yml
similarity index 90%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_update_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_update_settings.yml
index 4e873502e5c2..8a61e51cc3c7 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_update_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_update_settings.yml
@@ -19,3 +19,7 @@ process:
 destination:
   plugin: config
   config_name: update.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - update
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload.yml
similarity index 77%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload.yml
index 2d04241aff52..fedda76ed850 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload.yml
@@ -25,3 +25,10 @@ migration_dependencies:
   required:
     - d6_file
     - d6_node
+dependencies:
+  config:
+    - migrate.migration.d6_file
+    - migrate.migration.d6_node
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_display.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_display.yml
index 28e154b0a667..8daf13f1ca00 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_display.yml
@@ -25,3 +25,9 @@ destination:
 migration_dependencies:
   required:
     - d6_upload_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_upload_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_form_display.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_form_display.yml
index 7725659cbece..f248d1d2512b 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_entity_form_display.yml
@@ -26,3 +26,9 @@ destination:
 migration_dependencies:
   required:
     - d6_upload_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_upload_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field.yml
similarity index 79%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field.yml
index 81cfbb936fa5..15df33af5318 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field.yml
@@ -5,7 +5,7 @@ migration_tags:
 source:
   # We do an empty source and a proper destination to have an idmap for
   # migration_dependencies.
-  plugin: empty
+  plugin: md_empty
   provider: upload
   constants:
     entity_type: node
@@ -20,4 +20,10 @@ process:
   cardinality: 'constants/cardinality'
   'settings/display_field': 'constants/display_field'
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
+dependencies:
+  module:
+    - field
+    - file
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field_instance.yml
similarity index 78%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field_instance.yml
index 4410ec011515..701351263765 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_upload_field_instance.yml
@@ -22,3 +22,11 @@ migration_dependencies:
   required:
     - d6_upload_field
     - d6_node_type
+dependencies:
+  config:
+    - migrate.migration.d6_node_type
+    - migrate.migration.d6_upload_field
+  module:
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_url_alias.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_url_alias.yml
similarity index 81%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_url_alias.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_url_alias.yml
index 9fb1053c885b..a8579e9cb83d 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_url_alias.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_url_alias.yml
@@ -12,3 +12,6 @@ process:
 
 destination:
   plugin: url_alias
+dependencies:
+  module:
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user.yml
similarity index 87%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user.yml
index 05ff4a00e5e1..b55e2ec03e5e 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user.yml
@@ -35,3 +35,9 @@ migration_dependencies:
     - d6_user_picture_file
     - d6_user_picture_entity_display
     - d6_user_picture_entity_form_display
+dependencies:
+  config:
+    - migrate.migration.d6_user_role
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_contact_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_contact_settings.yml
similarity index 80%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_contact_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_contact_settings.yml
index 04291550ccac..7da9e52ce7c8 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_contact_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_contact_settings.yml
@@ -21,3 +21,9 @@ destination:
 migration_dependencies:
   required:
     - d6_user
+dependencies:
+  config:
+    - migrate.migration.d6_user
+  module:
+    - contact
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_mail.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_mail.yml
similarity index 96%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_mail.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_mail.yml
index bc3badf6bd3a..15ea0d41cec0 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_mail.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_mail.yml
@@ -37,3 +37,7 @@ process:
 destination:
   plugin: config
   config_name: user.mail
+dependencies:
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_display.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_display.yml
index f38bc36068b7..dd6be798938b 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_display.yml
@@ -28,3 +28,9 @@ destination:
 migration_dependencies:
   required:
     - d6_user_picture_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_user_picture_field_instance
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_form_display.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_form_display.yml
index 4e422287e5bc..9d2182b992b4 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_entity_form_display.yml
@@ -27,3 +27,9 @@ destination:
 migration_dependencies:
   required:
     - d6_user_picture_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_user_picture_field_instance
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field.yml
similarity index 76%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field.yml
index fde05acf6835..eefb62d92692 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field.yml
@@ -5,7 +5,7 @@ migration_tags:
 source:
   # We do an empty source and a proper destination to have an idmap for
   # dependencies.
-  plugin: empty
+  plugin: md_empty
   constants:
     entity_type: user
     type: image
@@ -17,4 +17,10 @@ process:
   type: 'constants/type'
   cardinality: 'constants/cardinality'
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
+dependencies:
+  module:
+    - field
+    - image
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field_instance.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field_instance.yml
index 7dc83b19b68d..14dfc0e9173d 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_field_instance.yml
@@ -28,3 +28,10 @@ destination:
 migration_dependencies:
   required:
     - d6_user_picture_field
+dependencies:
+  config:
+    - migrate.migration.d6_user_picture_field
+  module:
+    - field
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_file.yml
similarity index 96%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_file.yml
index 363df9d615e2..9be01218c992 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_picture_file.yml
@@ -27,3 +27,4 @@ migration_dependencies:
 dependencies:
   module:
     - file
+    - migrate_drupal
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_display.yml
similarity index 94%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_display.yml
index 3e7b46778890..7da0e7ad529f 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_display.yml
@@ -38,3 +38,7 @@ process:
       4: true # PROFILE_HIDDEN
 destination:
   plugin: component_entity_display
+dependencies:
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_form_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_form_display.yml
similarity index 95%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_form_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_form_display.yml
index d1cde0b65a31..18fab1bbec47 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_entity_form_display.yml
@@ -47,3 +47,7 @@ process:
       4: true # PROFILE_HIDDEN
 destination:
   plugin: component_entity_form_display
+dependencies:
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field.yml
similarity index 86%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field.yml
index 2a202773c849..1f84573d7579 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field.yml
@@ -31,4 +31,9 @@ process:
     map:
       list: -1
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
+dependencies:
+  module:
+    - field
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field_instance.yml
similarity index 79%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field_instance.yml
index ec0e526677a0..30c593849804 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_profile_field_instance.yml
@@ -19,3 +19,10 @@ destination:
 migration_dependencies:
   required:
     - d6_user_profile_field
+dependencies:
+  config:
+    - migrate.migration.d6_user_profile_field
+  module:
+    - field
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_role.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_role.yml
similarity index 92%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_role.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_role.yml
index e15058bb6d5e..46edcc807dd9 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_role.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_role.yml
@@ -44,3 +44,9 @@ destination:
 migration_dependencies:
   required:
     - d6_filter_format
+dependencies:
+  config:
+    - migrate.migration.d6_filter_format
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_settings.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_settings.yml
similarity index 92%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_user_settings.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_settings.yml
index 5984d51af324..09e2eb7780ea 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_settings.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_user_settings.yml
@@ -26,3 +26,7 @@ process:
 destination:
   plugin: config
   config_name: user.settings
+dependencies:
+  module:
+    - migrate_drupal
+    - user
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_view_modes.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_view_modes.yml
similarity index 92%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_view_modes.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_view_modes.yml
index 7e3001b3c70a..f8bf6fd23076 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_view_modes.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_view_modes.yml
@@ -38,3 +38,7 @@ process:
 
 destination:
   plugin: entity:entity_view_mode
+dependencies:
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_display.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_display.yml
index 9295acd92996..5c0c9c20016a 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_display.yml
@@ -26,3 +26,9 @@ destination:
 migration_dependencies:
   required:
     - d6_vocabulary_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_vocabulary_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_form_display.yml
similarity index 84%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_form_display.yml
index 3dbc95ba3679..91b540a79a56 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_entity_form_display.yml
@@ -24,3 +24,9 @@ destination:
 migration_dependencies:
   required:
     - d6_vocabulary_field_instance
+dependencies:
+  config:
+    - migrate.migration.d6_vocabulary_field_instance
+  module:
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field.yml
similarity index 75%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field.yml
index f2c28a3953de..e11864f6a1f2 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field.yml
@@ -19,7 +19,15 @@ process:
   'settings/target_type': 'constants/target_entity_type'
   cardinality: 'constants/cardinality'
 destination:
-  plugin: entity:field_storage_config
+  plugin: md_entity:field_storage_config
 migration_dependencies:
   required:
     - d6_taxonomy_vocabulary
+dependencies:
+  config:
+    - migrate.migration.d6_taxonomy_vocabulary
+  module:
+    - entity_reference
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field_instance.yml
similarity index 85%
rename from core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml
rename to core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field_instance.yml
index 3d7ff35b106a..166155fe0b03 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_vocabulary_field_instance.yml
@@ -23,3 +23,10 @@ destination:
 migration_dependencies:
   required:
     - d6_vocabulary_field
+dependencies:
+  config:
+    - migrate.migration.d6_vocabulary_field
+  module:
+    - field
+    - migrate_drupal
+    - node
diff --git a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
index 56ba96010606..2f23e0cbdb4f 100644
--- a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
+++ b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
@@ -369,3 +369,7 @@ migrate_entity_constant:
     auto_create:
       type: boolean
       label: 'Entity reference selection setting: Auto-create new entities'
+
+migrate.source.md_empty:
+  type: migrate.source.empty
+  label: 'Empty source for migrate_drupal migrations'
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
new file mode 100644
index 000000000000..c9b83db19d33
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\destination\EntityFieldEntity.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\destination;
+
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Field\FieldTypePluginManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\migrate_drupal\Entity\MigrationInterface;
+use Drupal\migrate\Plugin\migrate\destination\EntityFieldStorageConfig as BaseEntityFieldStorageConfig;
+
+/**
+ * Destination with Drupal specific config dependencies.
+ *
+ * @MigrateDestination(
+ *   id = "md_entity:field_storage_config"
+ * )
+ */
+class EntityFieldStorageConfig extends BaseEntityFieldStorageConfig {
+
+  /**
+   * The field type plugin manager.
+   *
+   * @var \Drupal\Core\Field\FieldTypePluginManagerInterface
+   */
+  protected $fieldTypePluginManager;
+
+  /**
+   * Construct a new plugin.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param MigrationInterface $migration
+   *   The migration.
+   * @param EntityStorageInterface $storage
+   *   The storage for this entity type.
+   * @param array $bundles
+   *   The list of bundles this entity type has.
+   * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_plugin_manager
+   *   The field type plugin manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, FieldTypePluginManagerInterface $field_type_plugin_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles);
+    $this->fieldTypePluginManager = $field_type_plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    $entity_type_id = static::getEntityTypeId($plugin_id);
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('entity.manager')->getStorage($entity_type_id),
+      array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)),
+      $container->get('plugin.manager.field.field_type')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $this->dependencies = parent::calculateDependencies();
+    // Add a dependency on the module that provides the field type using the
+    // source plugin configuration.
+    $source_configuration = $this->migration->get('source');
+    if (isset($source_configuration['constants']['type'])) {
+      $field_type = $this->fieldTypePluginManager->getDefinition($source_configuration['constants']['type']);
+      $this->addDependency('module', $field_type['provider']);
+    }
+    return $this->dependencies;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static function getEntityTypeId($plugin_id) {
+    return 'field_storage_config';
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
index 044dc61594ee..85020fee9e30 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
@@ -7,7 +7,10 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\source;
 
+use Drupal\Component\Plugin\DependentPluginInterface;
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Entity\DependencyTrait;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\Exception\RequirementsException;
@@ -21,7 +24,9 @@
  * Mainly to let children retrieve information from the origin system in an
  * easier way.
  */
-abstract class DrupalSqlBase extends SqlBase implements ContainerFactoryPluginInterface, RequirementsInterface {
+abstract class DrupalSqlBase extends SqlBase implements ContainerFactoryPluginInterface, RequirementsInterface, DependentPluginInterface {
+
+  use DependencyTrait;
 
    /**
    * The contents of the system table.
@@ -37,6 +42,21 @@ abstract class DrupalSqlBase extends SqlBase implements ContainerFactoryPluginIn
    */
   protected $requirements = TRUE;
 
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
+    $this->entityManager = $entity_manager;
+  }
+
   /**
     * Retrieves all system data information from origin system.
     *
@@ -69,7 +89,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration,
       $plugin_id,
       $plugin_definition,
-      $migration
+      $migration,
+      $container->get('entity.manager')
     );
   }
 
@@ -144,4 +165,18 @@ protected function variableGet($name, $default) {
     return $result !== FALSE ? unserialize($result) : $default;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    // Generic handling for Drupal source plugin constants.
+    if (isset($this->configuration['constants']['entity_type'])) {
+      $this->addDependency('module', $this->entityManager->getDefinition($this->configuration['constants']['entity_type'])->getProvider());
+    }
+    if (isset($this->configuration['constants']['module'])) {
+      $this->addDependency('module', $this->configuration['constants']['module']);
+    }
+    return $this->dependencies;
+  }
+
 }
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/EmptySource.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/EmptySource.php
new file mode 100644
index 000000000000..47e7c8240a9a
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/EmptySource.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\source\EmptySource.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source;
+
+use Drupal\Component\Plugin\DependentPluginInterface;
+use Drupal\Core\Entity\DependencyTrait;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\migrate_drupal\Entity\MigrationInterface;
+use Drupal\migrate\Plugin\migrate\source\EmptySource as BaseEmptySource;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+
+
+/**
+ * Source returning an empty row with Drupal specific config dependencies.
+ *
+ * @MigrateSource(
+ *   id = "md_empty"
+ * )
+ */
+class EmptySource extends BaseEmptySource implements ContainerFactoryPluginInterface, DependentPluginInterface {
+
+  use DependencyTrait;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('entity.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    // The empty source plugin supports the entity_type constant.
+    if (isset($this->configuration['constants']['entity_type'])) {
+      $this->addDependency('module', $this->entityManager->getDefinition($this->configuration['constants']['entity_type'])->getProvider());
+    }
+    return $this->dependencies;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php
index 32819eb2219c..bdaf98164ba9 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\source;
 
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 
 /**
@@ -31,8 +32,8 @@ class Variable extends DrupalSqlBase {
   /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
     $this->variables = $this->configuration['variables'];
   }
 
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ViewMode.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ViewMode.php
index a84a16a15b1e..ea1c505f092c 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ViewMode.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ViewMode.php
@@ -7,6 +7,11 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
 
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Entity\MigrationInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
 /**
  * The view mode source.
  *
@@ -67,4 +72,15 @@ public function getIds() {
     return $ids;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $this->dependencies = parent::calculateDependencies();
+    if (isset($this->configuration['constants']['targetEntityType'])) {
+      $this->addDependency('module', $this->entityManager->getDefinition($this->configuration['constants']['targetEntityType'])->getProvider());
+    }
+    return $this->dependencies;
+  }
+
 }
diff --git a/core/modules/migrate_drupal/src/Tests/MigrateFullDrupalTestBase.php b/core/modules/migrate_drupal/src/Tests/MigrateFullDrupalTestBase.php
index 09dd3cd16589..6b01174b35ee 100644
--- a/core/modules/migrate_drupal/src/Tests/MigrateFullDrupalTestBase.php
+++ b/core/modules/migrate_drupal/src/Tests/MigrateFullDrupalTestBase.php
@@ -7,6 +7,10 @@
 
 namespace Drupal\migrate_drupal\Tests;
 
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Config\ExtensionInstallStorage;
+use Drupal\Core\Config\InstallStorage;
+use Drupal\Core\Config\StorageInterface;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\simpletest\TestBase;
 
@@ -54,6 +58,7 @@ public function testDrupal() {
     $this->loadDumps($dumps);
 
     $classes = $this->getTestClassesList();
+    $extension_install_storage = new ExtensionInstallStorage(\Drupal::service('config.storage'), InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION, TRUE);
     foreach ($classes as $class) {
       if (is_subclass_of($class, '\Drupal\migrate\Tests\MigrateDumpAlterInterface')) {
         $class::migrateDumpAlter($this);
@@ -63,6 +68,16 @@ public function testDrupal() {
     // Run every migration in the order specified by the storage controller.
     foreach (entity_load_multiple('migration', static::$migrations) as $migration) {
       (new MigrateExecutable($migration, $this))->import();
+
+      // Ensure that the default migration has the correct dependencies.
+      list($base_name, ) = explode(':', $migration->id(), 2);
+      $default_configuration = $extension_install_storage->read('migrate.migration.' . $base_name);
+      $default_dependencies = isset($default_configuration['dependencies']) ? $default_configuration['dependencies'] : [];
+      $this->assertEqual($default_dependencies, $migration->getDependencies(), SafeMarkup::format('Dependencies in @id match after installing. Default configuration @first is equal to active configuration @second.', array(
+        '@id' => $migration->id(),
+        '@first' => var_export($default_dependencies, TRUE),
+        '@second' => var_export($migration->getDependencies(), TRUE)
+      )));
     }
     foreach ($classes as $class) {
       $test_object = new $class($this->testId);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentVariableEntityFormDisplaySubjectTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentVariableEntityFormDisplaySubjectTest.php
index 668ae25d55f4..f38201592082 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentVariableEntityFormDisplaySubjectTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentVariableEntityFormDisplaySubjectTest.php
@@ -22,7 +22,7 @@ class MigrateCommentVariableEntityFormDisplaySubjectTest extends MigrateDrupal6T
    *
    * @var array
    */
-  static $modules = array('comment');
+  public static $modules = array('comment', 'node');
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6Test.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6Test.php
index 8a9324099883..697ab2c341f0 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6Test.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateDrupal6Test.php
@@ -33,6 +33,7 @@ class MigrateDrupal6Test extends MigrateFullDrupalTestBase {
     'datetime',
     'dblog',
     'entity_reference',
+    'field',
     'file',
     'filter',
     'forum',
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateUserContactSettingsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateUserContactSettingsTest.php
index d03d8fa12678..a4a0a18fe4fd 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateUserContactSettingsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateUserContactSettingsTest.php
@@ -18,6 +18,11 @@
  */
 class MigrateUserContactSettingsTest extends MigrateDrupal6TestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['contact'];
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/migrate_drupal/src/Tests/dependencies/MigrateDependenciesTest.php b/core/modules/migrate_drupal/src/Tests/dependencies/MigrateDependenciesTest.php
index a3d24e2a9925..f75a7017504c 100644
--- a/core/modules/migrate_drupal/src/Tests/dependencies/MigrateDependenciesTest.php
+++ b/core/modules/migrate_drupal/src/Tests/dependencies/MigrateDependenciesTest.php
@@ -20,7 +20,7 @@
  */
 class MigrateDependenciesTest extends MigrateDrupal6TestBase {
 
-  static $modules = array('aggregator');
+  static $modules = array('aggregator', 'node', 'comment', 'filter');
 
   /**
    * Tests that the order is correct when loading several migrations.
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
index 707d2efda915..2e1ea51fbf23 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
@@ -68,7 +68,8 @@ class Drupal6SqlBaseTest extends MigrateTestCase {
    */
   protected function setUp() {
     $plugin = 'placeholder_id';
-    $this->base = new TestDrupal6SqlBase($this->migrationConfiguration, $plugin, array(), $this->getMigration());
+    $entity_manager = $this->getmock('Drupal\Core\Entity\EntityManagerInterface');
+    $this->base = new TestDrupal6SqlBase($this->migrationConfiguration, $plugin, array(), $this->getMigration(), $entity_manager);
     $this->base->setDatabase($this->getDatabase($this->databaseContents));
   }
 
-- 
GitLab