Started on version 0.4: better scheme for finding correct database:
- Try not only "darwin-7.X.Y" but also "darwin-7.X" and "darwin-7",
  so far we've never had to create anew database for a minor release.
- Distinguish between the various different installs (user-installed
  MacPython, apple-installed MacPython, other).
diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py
index 375e99d..fc97ea3 100644
--- a/Lib/plat-mac/pimp.py
+++ b/Lib/plat-mac/pimp.py
@@ -35,7 +35,7 @@
 
 NO_EXECUTE=0
 
-PIMP_VERSION="0.3"
+PIMP_VERSION="0.4"
 
 # Flavors:
 # source: setup-based package
@@ -44,7 +44,7 @@
 DEFAULT_DOWNLOADDIR='/tmp'
 DEFAULT_BUILDDIR='/tmp'
 DEFAULT_INSTALLDIR=distutils.sysconfig.get_python_lib()
-DEFAULT_PIMPDATABASE="http://www.python.org/packman/version-0.3/24a0-%s.plist" % distutils.util.get_platform()
+DEFAULT_PIMPDATABASE_FMT="http://www.python.org/packman/version-%s/%s-%s-%s-%s-%s.plist"
 
 def _cmd(output, dir, *cmditems):
     """Internal routine to run a shell command in a given directory."""
@@ -163,7 +163,7 @@
         if not buildDir:
             buildDir = DEFAULT_BUILDDIR
         if not pimpDatabase:
-            pimpDatabase = DEFAULT_PIMPDATABASE
+            pimpDatabase = self.getDefaultDatabase()
         self.setInstallDir(installDir)
         self.flavorOrder = flavorOrder
         self.downloadDir = downloadDir
@@ -185,6 +185,53 @@
         
     def isUserInstall(self):
         return self.installDir != DEFAULT_INSTALLDIR
+        
+    def getDefaultDatabase(self, experimental=False):
+        if experimental:
+            status = "exp"
+        else:
+            status = "prod"
+            
+        major, minor, micro, state, extra = sys.version_info
+        pyvers = '%d.%d' % (major, minor)
+        if state != 'final':
+            pyvers = pyvers + '%s%d' % (state, extra)
+            
+        longplatform = distutils.util.get_platform()
+        osname, release, machine = longplatform.split('-')
+        # For some platforms we may want to differentiate between
+        # installation types
+        if osname == 'darwin':
+            if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
+                osname = 'darwin_apple'
+            elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
+                osname = 'darwin_macpython'
+            # Otherwise we don't know...
+        # Now we try various URLs by playing with the release string.
+        # We remove numbers off the end until we find a match.
+        rel = release
+        while True:
+            url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
+            try:
+                urllib2.urlopen(url)
+            except urllib2.HTTPError, arg:
+            	print 'getDefaultDatabase: cannot open', url
+            	print 'error', arg
+                pass
+            else:
+                break
+            if not rel:
+                # We're out of version numbers to try. Use the
+                # full release number, this will give a reasonable
+                # error message later
+                url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
+                break
+            idx = rel.rfind('.')
+            if idx < 0:
+                rel = ''
+            else:
+                rel = rel[:idx]
+        return url
 
     def check(self):
         """Check that the preferences make sense: directories exist and are
@@ -932,7 +979,6 @@
         print "       -D dir Set destination directory"
         print "              (default: %s)" % DEFAULT_INSTALLDIR
         print "       -u url URL for database"
-        print "              (default: %s)" % DEFAULT_PIMPDATABASE
         sys.exit(1)
         
     try: