diff --git a/Lib/packaging/command/sdist.py b/Lib/packaging/command/sdist.py
index a19203f..09b26db 100644
--- a/Lib/packaging/command/sdist.py
+++ b/Lib/packaging/command/sdist.py
@@ -201,15 +201,20 @@
         self.filelist.write(self.manifest)
 
     def add_defaults(self):
-        """Add all the default files to self.filelist:
-          - all pure Python modules mentioned in setup script
-          - all files pointed by package_data (build_py)
-          - all files defined in data_files.
-          - all files defined as scripts.
-          - all C sources listed as part of extensions or C libraries
-            in the setup script (doesn't catch C headers!)
-        Everything is optional.
+        """Add all default files to self.filelist.
+
+        In addition to the setup.cfg file, this will include all files returned
+        by the get_source_files of every registered command.  This will find
+        Python modules and packages, data files listed in package_data_,
+        data_files and extra_files, scripts, C sources of extension modules or
+        C libraries (headers are missing).
         """
+        if os.path.exists('setup.cfg'):
+            self.filelist.append('setup.cfg')
+        else:
+            logger.warning("%s: standard 'setup.cfg' file not found",
+                           self.get_command_name())
+
         for cmd_name in get_command_names():
             try:
                 cmd_obj = self.get_finalized_command(cmd_name)
diff --git a/Lib/packaging/tests/test_command_sdist.py b/Lib/packaging/tests/test_command_sdist.py
index 82f4b30..7be349f 100644
--- a/Lib/packaging/tests/test_command_sdist.py
+++ b/Lib/packaging/tests/test_command_sdist.py
@@ -34,6 +34,7 @@
 MANIFEST = """\
 # file GENERATED by packaging, do NOT edit
 inroot.txt
+setup.cfg
 data%(sep)sdata.dt
 scripts%(sep)sscript.py
 some%(sep)sfile.txt
@@ -173,6 +174,7 @@
         # in package_data
         dist.package_data = {'': ['*.cfg', '*.dat'],
                              'somecode': ['*.txt']}
+        self.write_file((self.tmp_dir, 'setup.cfg'), '#')
         self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
         self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#')
 
@@ -212,8 +214,8 @@
             content = zip_file.namelist()
 
         # Making sure everything was added. This includes 8 code and data
-        # files in addition to PKG-INFO.
-        self.assertEqual(len(content), 9)
+        # files in addition to PKG-INFO and setup.cfg
+        self.assertEqual(len(content), 10)
 
         # Checking the MANIFEST
         with open(join(self.tmp_dir, 'MANIFEST')) as fp:
@@ -230,7 +232,7 @@
         cmd.ensure_finalized()
         cmd.run()
         warnings = self.get_logs(logging.WARN)
-        self.assertEqual(len(warnings), 3)
+        self.assertEqual(len(warnings), 4)
 
         # trying with a complete set of metadata
         self.loghandler.flush()
@@ -242,8 +244,9 @@
         # removing manifest generated warnings
         warnings = [warn for warn in warnings if
                     not warn.endswith('-- skipping')]
-        # the remaining warning is about the use of the default file list
-        self.assertEqual(len(warnings), 1)
+        # the remaining warnings are about the use of the default file list and
+        # the absence of setup.cfg
+        self.assertEqual(len(warnings), 2)
 
     def test_show_formats(self):
         __, stdout = captured_stdout(show_formats)
diff --git a/Lib/packaging/tests/test_create.py b/Lib/packaging/tests/test_create.py
index 92a3ea4..a82ab43 100644
--- a/Lib/packaging/tests/test_create.py
+++ b/Lib/packaging/tests/test_create.py
@@ -66,10 +66,15 @@
         # building the structure
         tempdir = self.wdir
         dirs = ['pkg1', 'data', 'pkg2', 'pkg2/sub']
-        files = ['README', 'setup.cfg', 'foo.py',
-                 'pkg1/__init__.py', 'pkg1/bar.py',
-                 'data/data1', 'pkg2/__init__.py',
-                 'pkg2/sub/__init__.py']
+        files = [
+            'README',
+            'data/data1',
+            'foo.py',
+            'pkg1/__init__.py',
+            'pkg1/bar.py',
+            'pkg2/__init__.py',
+            'pkg2/sub/__init__.py',
+        ]
 
         for dir_ in dirs:
             os.mkdir(os.path.join(tempdir, dir_))
@@ -86,8 +91,8 @@
                          ['pkg1', 'pkg2', 'pkg2.sub'])
         self.assertEqual(mainprogram.data['modules'], ['foo'])
         data_fn = os.path.join('data', 'data1')
-        self.assertEqual(set(mainprogram.data['extra_files']),
-                         set(['setup.cfg', 'README', data_fn]))
+        self.assertEqual(mainprogram.data['extra_files'],
+                         ['README', data_fn])
 
     def test_convert_setup_py_to_cfg(self):
         self.write_file((self.wdir, 'setup.py'),
