Freeze assumes that all built-in modules are part of the Python core.
This is not necessarily the case.  It is possible to create a Python
binary which contains built-in extension modules.  Therefore
checkextensions should be used for all unknown and builtin modules.
(Sjoerd Mullender)
diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py
index 0cdacd0..15e9e14 100755
--- a/Tools/freeze/freeze.py
+++ b/Tools/freeze/freeze.py
@@ -338,13 +338,15 @@
     # search for unknown modules in extensions directories (not on Windows)
     addfiles = []
     addmoddefns = [] # Windows list of modules.
-    if unknown:
+    if unknown or (not win and builtins):
         if not win:
             addfiles, addmods = \
-                      checkextensions.checkextensions(unknown, extensions)
+                      checkextensions.checkextensions(unknown+builtins,
+                                                      extensions)
             for mod in addmods:
-                unknown.remove(mod)
-            builtins = builtins + addmods
+                if mod in unknown:
+                    unknown.remove(mod)
+                    builtins.append(mod)
         else:
             # Do the windows thang...
             import checkextensions_win32