From owner-freebsd-ports-bugs@FreeBSD.ORG Mon Mar 31 18:50:00 2014 Return-Path: Delivered-To: freebsd-ports-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B4902935 for ; Mon, 31 Mar 2014 18:50:00 +0000 (UTC) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 90DC774D for ; Mon, 31 Mar 2014 18:50:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.8/8.14.8) with ESMTP id s2VIo0f1008642 for ; Mon, 31 Mar 2014 18:50:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.8/8.14.8/Submit) id s2VIo0qH008641; Mon, 31 Mar 2014 18:50:00 GMT (envelope-from gnats) Resent-Date: Mon, 31 Mar 2014 18:50:00 GMT Resent-Message-Id: <201403311850.s2VIo0qH008641@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, David Naylor Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 93D668B8 for ; Mon, 31 Mar 2014 18:44:38 +0000 (UTC) Received: from cgiserv.freebsd.org (cgiserv.freebsd.org [IPv6:2001:1900:2254:206a::50:4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 801836B9 for ; Mon, 31 Mar 2014 18:44:38 +0000 (UTC) Received: from cgiserv.freebsd.org ([127.0.1.6]) by cgiserv.freebsd.org (8.14.8/8.14.8) with ESMTP id s2VIichG094785 for ; Mon, 31 Mar 2014 18:44:38 GMT (envelope-from nobody@cgiserv.freebsd.org) Received: (from nobody@localhost) by cgiserv.freebsd.org (8.14.8/8.14.8/Submit) id s2VIicbp094782; Mon, 31 Mar 2014 18:44:38 GMT (envelope-from nobody) Message-Id: <201403311844.s2VIicbp094782@cgiserv.freebsd.org> Date: Mon, 31 Mar 2014 18:44:38 GMT From: David Naylor To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: ports/188148: [PATCH] emulators/py-virtualenv add support for pypy X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Mar 2014 18:50:00 -0000 >Number: 188148 >Category: ports >Synopsis: [PATCH] emulators/py-virtualenv add support for pypy >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Mar 31 18:50:00 UTC 2014 >Closed-Date: >Last-Modified: >Originator: David Naylor >Release: >Organization: >Environment: >Description: See https://github.com/pypa/virtualenv/pull/588 for more details. The attached patch is compatible with 1.11.2 and 1.11.4. >How-To-Repeat: >Fix: Patch attached with submission follows: diff --git a/virtualenv.py b/virtualenv.py index d3e76a7..cc740dd 100755 --- virtualenv.py +++ virtualenv.py @@ -22,6 +22,7 @@ from distutils.util import strtobool import struct import subprocess import tarfile +import sysconfig if sys.version_info < (2, 6): print('ERROR: %s' % sys.exc_info()[1]) @@ -107,7 +108,7 @@ REQUIRED_MODULES = ['os', 'posix', 'posixpath', 'nt', 'ntpath', 'genericpath', 'fnmatch', 'locale', 'encodings', 'codecs', 'stat', 'UserDict', 'readline', 'copy_reg', 'types', 're', 'sre', 'sre_parse', 'sre_constants', 'sre_compile', - 'zlib'] + 'sysconfig', 'zlib'] REQUIRED_FILES = ['lib-dynload', 'config'] @@ -131,7 +132,6 @@ elif majver == 3: if minver >= 2: REQUIRED_FILES[-1] = 'config-%s' % majver if minver >= 3: - import sysconfig platdir = sysconfig.get_config_var('PLATDIR') REQUIRED_FILES.append(platdir) # The whole list of 3.3 modules is reproduced below - the current @@ -999,8 +999,6 @@ def is_executable_file(fpath): def path_locations(home_dir): """Return the path locations for the environment (where libraries are, where scripts go, etc)""" - # XXX: We'd use distutils.sysconfig.get_python_inc/lib but its - # prefix arg is broken: http://bugs.python.org/issue3386 if is_win: # Windows has lots of problems with executables with spaces in # the name; this function will remove them (using the ~1 @@ -1022,19 +1020,11 @@ def path_locations(home_dir): print('Exiting.') sys.exit(3) home_dir = str(buf.value) - lib_dir = join(home_dir, 'Lib') - inc_dir = join(home_dir, 'Include') - bin_dir = join(home_dir, 'Scripts') - if is_jython: - lib_dir = join(home_dir, 'Lib') - inc_dir = join(home_dir, 'Include') - bin_dir = join(home_dir, 'bin') - elif is_pypy: - lib_dir = home_dir - inc_dir = join(home_dir, 'include') - bin_dir = join(home_dir, 'bin') - elif not is_win: - lib_dir = join(home_dir, 'lib', py_version) + paths = sysconfig.get_paths(vars={'base':home_dir, 'platbase':home_dir}) + lib_dir = paths['stdlib'] + inc_dir = paths['include'] + bin_dir = paths['scripts'] + if not is_win: multiarch_exec = '/usr/bin/multiarch-platform' if is_executable_file(multiarch_exec): # In Mageia (2) and Mandriva distros the include dir must be like: @@ -1044,12 +1034,8 @@ def path_locations(home_dir): stdout, stderr = p.communicate() # stdout.strip is needed to remove newline character inc_dir = join(home_dir, 'include', stdout.strip(), py_version + abiflags) - else: - inc_dir = join(home_dir, 'include', py_version + abiflags) - bin_dir = join(home_dir, 'bin') return home_dir, lib_dir, inc_dir, bin_dir - def change_prefix(filename, dst_prefix): prefixes = [sys.prefix] @@ -1195,10 +1181,7 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear, sy if not site_packages: writefile(site_packages_filename, '') - if is_pypy or is_win: - stdinc_dir = join(prefix, 'include') - else: - stdinc_dir = join(prefix, 'include', py_version + abiflags) + stdinc_dir = sysconfig.get_path('include') if os.path.exists(stdinc_dir): copyfile(stdinc_dir, inc_dir, symlink) else: @@ -1221,12 +1204,7 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear, sy # pypy never uses exec_prefix, just ignore it if sys.exec_prefix != prefix and not is_pypy: - if is_win: - exec_dir = join(sys.exec_prefix, 'lib') - elif is_jython: - exec_dir = join(sys.exec_prefix, 'Lib') - else: - exec_dir = join(sys.exec_prefix, 'lib', py_version) + exec_dir = sysconfig.get_path('stdlib') for fn in os.listdir(exec_dir): copyfile(join(exec_dir, fn), join(lib_dir, fn), symlink) @@ -1522,20 +1500,15 @@ def fix_local_scheme(home_dir, symlink=True): Platforms that use the "posix_local" install scheme (like Ubuntu with Python 2.7) need to be given an additional "local" location, sigh. """ - try: - import sysconfig - except ImportError: - pass - else: - if sysconfig._get_default_scheme() == 'posix_local': - local_path = os.path.join(home_dir, 'local') - if not os.path.exists(local_path): - os.mkdir(local_path) - for subdir_name in os.listdir(home_dir): - if subdir_name == 'local': - continue - copyfile(os.path.abspath(os.path.join(home_dir, subdir_name)), \ - os.path.join(local_path, subdir_name), symlink) + if sysconfig._get_default_scheme() == 'posix_local': + local_path = os.path.join(home_dir, 'local') + if not os.path.exists(local_path): + os.mkdir(local_path) + for subdir_name in os.listdir(home_dir): + if subdir_name == 'local': + continue + copyfile(os.path.abspath(os.path.join(home_dir, subdir_name)), \ + os.path.join(local_path, subdir_name), symlink) def fix_lib64(lib_dir, symlink=True): """ @@ -1844,147 +1817,148 @@ def convert(s): ##file site.py SITE_PY = convert(""" -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 -Qc7sRHsA1igE/wfVIOdx +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 +O9EegDUKwf8CoRMeiQ== """) ##file activate.sh diff --git a/virtualenv_embedded/site.py b/virtualenv_embedded/site.py index 871a11c..fea6f98 100644 --- virtualenv_embedded/site.py +++ virtualenv_embedded/site.py @@ -62,7 +62,7 @@ site-specific customizations. If this import fails with an ImportError exception, it is silently ignored. """ - +import sysconfig import sys import os try: @@ -215,9 +215,9 @@ def addsitepackages(known_paths, sys_prefix=sys.prefix, exec_prefix=sys.exec_pre for prefix in prefixes: if prefix: if sys.platform in ('os2emx', 'riscos') or _is_jython: - sitedirs = [os.path.join(prefix, "Lib", "site-packages")] + sitedirs = [sysconfig.get_path('purelib', vars={'base':prefix})] elif _is_pypy: - sitedirs = [os.path.join(prefix, 'site-packages')] + sitedirs = [sysconfig.get_path('purelib', vars={'base':prefix})] elif sys.platform == 'darwin' and prefix == sys_prefix: if prefix.startswith("/System/Library/Frameworks/"): # Apple's Python @@ -558,7 +558,7 @@ def virtual_install_main_packages(): if sys.path[0] == '': pos += 1 if _is_jython: - paths = [os.path.join(sys.real_prefix, 'Lib')] + paths = [sysconfig.get_path('stdlib', vars={'base': sys.real_prefix})] elif _is_pypy: if sys.version_info > (3, 2): cpyver = '%d' % sys.version_info[0] @@ -566,8 +566,10 @@ def virtual_install_main_packages(): cpyver = '%d.%d' % sys.version_info[:2] else: cpyver = '%d.%d.%d' % sys.version_info[:3] - paths = [os.path.join(sys.real_prefix, 'lib_pypy'), - os.path.join(sys.real_prefix, 'lib-python', cpyver)] + paths = [sysconfig.get_path('stdlib', vars={'base': sys.real_prefix})] + for path in sys.path: + if path.endswith('lib_pypy'): + paths.append(path.replace(sys.prefix, sys.real_prefix)) if sys.pypy_version_info < (1, 9): paths.insert(1, os.path.join(sys.real_prefix, 'lib-python', 'modified-%s' % cpyver)) >Release-Note: >Audit-Trail: >Unformatted: