setup.py
branchstable
changeset 43349 c3e10f705a6c
parent 43076 2372284d9457
child 43632 2e017696181f
equal deleted inserted replaced
43348:daa3b58906d5 43349:c3e10f705a6c
     4 # 'python setup.py install', or
     4 # 'python setup.py install', or
     5 # 'python setup.py --help' for more options
     5 # 'python setup.py --help' for more options
     6 
     6 
     7 import os
     7 import os
     8 
     8 
     9 supportedpy = '~= 2.7'
     9 # Mercurial will never work on Python 3 before 3.5 due to a lack
    10 if os.environ.get('HGALLOWPYTHON3', ''):
    10 # of % formatting on bytestrings, and can't work on 3.6.0 or 3.6.1
    11     # Mercurial will never work on Python 3 before 3.5 due to a lack
    11 # due to a bug in % formatting in bytestrings.
    12     # of % formatting on bytestrings, and can't work on 3.6.0 or 3.6.1
    12 # We cannot support Python 3.5.0, 3.5.1, 3.5.2 because of bug in
    13     # due to a bug in % formatting in bytestrings.
    13 # codecs.escape_encode() where it raises SystemError on empty bytestring
    14     # We cannot support Python 3.5.0, 3.5.1, 3.5.2 because of bug in
    14 # bug link: https://bugs.python.org/issue25270
    15     # codecs.escape_encode() where it raises SystemError on empty bytestring
    15 supportedpy = ','.join(
    16     # bug link: https://bugs.python.org/issue25270
    16     [
    17     #
    17         '>=2.7',
    18     # TODO: when we actually work on Python 3, use this string as the
    18         '!=3.0.*',
    19     # actual supportedpy string.
    19         '!=3.1.*',
    20     supportedpy = ','.join(
    20         '!=3.2.*',
    21         [
    21         '!=3.3.*',
    22             '>=2.7',
    22         '!=3.4.*',
    23             '!=3.0.*',
    23         '!=3.5.0',
    24             '!=3.1.*',
    24         '!=3.5.1',
    25             '!=3.2.*',
    25         '!=3.5.2',
    26             '!=3.3.*',
    26         '!=3.6.0',
    27             '!=3.4.*',
    27         '!=3.6.1',
    28             '!=3.5.0',
    28     ]
    29             '!=3.5.1',
    29 )
    30             '!=3.5.2',
       
    31             '!=3.6.0',
       
    32             '!=3.6.1',
       
    33         ]
       
    34     )
       
    35 
    30 
    36 import sys, platform
    31 import sys, platform
    37 import sysconfig
    32 import sysconfig
    38 
    33 
    39 if sys.version_info[0] >= 3:
    34 if sys.version_info[0] >= 3:
    86 """.format(
    81 """.format(
    87         py=sys.version_info, pip=pip_message
    82         py=sys.version_info, pip=pip_message
    88     )
    83     )
    89     printf(error, file=sys.stderr)
    84     printf(error, file=sys.stderr)
    90     sys.exit(1)
    85     sys.exit(1)
    91 
       
    92 # We don't yet officially support Python 3. But we want to allow developers to
       
    93 # hack on. Detect and disallow running on Python 3 by default. But provide a
       
    94 # backdoor to enable working on Python 3.
       
    95 if sys.version_info[0] != 2:
       
    96     badpython = True
       
    97 
       
    98     # Allow Python 3 from source checkouts.
       
    99     if os.path.isdir('.hg') or 'HGPYTHON3' in os.environ:
       
   100         badpython = False
       
   101 
       
   102     if badpython:
       
   103         error = """
       
   104 Python {py} detected.
       
   105 
       
   106 Mercurial currently has beta support for Python 3 and use of Python 2.7 is
       
   107 recommended for the best experience.
       
   108 
       
   109 Please re-run with Python 2.7 for a faster, less buggy experience.
       
   110 
       
   111 If you would like to beta test Mercurial with Python 3, this error can
       
   112 be suppressed by defining the HGPYTHON3 environment variable when invoking
       
   113 this command. No special environment variables or configuration changes are
       
   114 necessary to run `hg` with Python 3.
       
   115 
       
   116 See https://www.mercurial-scm.org/wiki/Python3 for more on Mercurial's
       
   117 Python 3 support.
       
   118 """.format(
       
   119             py='.'.join('%d' % x for x in sys.version_info[0:2])
       
   120         )
       
   121 
       
   122         printf(error, file=sys.stderr)
       
   123         sys.exit(1)
       
   124 
    86 
   125 if sys.version_info[0] >= 3:
    87 if sys.version_info[0] >= 3:
   126     DYLIB_SUFFIX = sysconfig.get_config_vars()['EXT_SUFFIX']
    88     DYLIB_SUFFIX = sysconfig.get_config_vars()['EXT_SUFFIX']
   127 else:
    89 else:
   128     # deprecated in Python 3
    90     # deprecated in Python 3