mirror of
https://github.com/nodejs/node-v0.x-archive.git
synced 2026-04-28 03:01:10 -04:00
Copy Python's shutil.copytree into wscript.
It's broken in Python 2.4.4. One gets this message when trying to run
configure:
[...]
Checking for SYS_clock_gettime : ok
Checking for library rt : ok
Checking for function clock_gettime : ok
Checking for function nanosleep : ok
Checking for function ceil : ok
---- deps/udns ----
Traceback (most recent call last):
File "/path/to/node/tools/waf", line 148, in ?
Scripting.prepare(t, cwd, VERSION, wafdir)
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 102, in prepare
prepare_impl(t,cwd,ver,wafdir)
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 95, in prepare_impl
main()
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 130, in main
fun(ctx)
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 168, in configure
conf.sub_config([''])
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Configure.py", line 100, in sub_config
self.recurse(k,name='configure')
File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Utils.py", line 391, in recurse
f(self)
File "<string>", line 82, in configure
File "<string>", line 48, in conf_subproject
File "/usr/lib/python2.4/shutil.py", line 111, in copytree
os.mkdir(dst)
OSError: [Errno 2] No such file or directory: '/sites/rabidlabs.net/sandboxes/m/public_html/projects/0909.node/node/build/default/deps/udns'
The problem is probably this:
http://mail.python.org/pipermail/python-bugs-list/2005-January/027118.html
As a solution I am copying 2.6's version of the function in.
This commit is contained in:
47
wscript
47
wscript
@@ -37,6 +37,49 @@ def mkdir_p(dir):
|
||||
if not os.path.exists (dir):
|
||||
os.makedirs (dir)
|
||||
|
||||
# Copied from Python 2.6 because 2.4.4 at least is broken by not using
|
||||
# mkdirs
|
||||
# http://mail.python.org/pipermail/python-bugs-list/2005-January/027118.html
|
||||
def copytree(src, dst, symlinks=False, ignore=None):
|
||||
names = os.listdir(src)
|
||||
if ignore is not None:
|
||||
ignored_names = ignore(src, names)
|
||||
else:
|
||||
ignored_names = set()
|
||||
|
||||
os.makedirs(dst)
|
||||
errors = []
|
||||
for name in names:
|
||||
if name in ignored_names:
|
||||
continue
|
||||
srcname = os.path.join(src, name)
|
||||
dstname = os.path.join(dst, name)
|
||||
try:
|
||||
if symlinks and os.path.islink(srcname):
|
||||
linkto = os.readlink(srcname)
|
||||
os.symlink(linkto, dstname)
|
||||
elif os.path.isdir(srcname):
|
||||
copytree(srcname, dstname, symlinks, ignore)
|
||||
else:
|
||||
shutil.copy2(srcname, dstname)
|
||||
# XXX What about devices, sockets etc.?
|
||||
except (IOError, os.error), why:
|
||||
errors.append((srcname, dstname, str(why)))
|
||||
# catch the Error from the recursive copytree so that we can
|
||||
# continue with other files
|
||||
except Error, err:
|
||||
errors.extend(err.args[0])
|
||||
try:
|
||||
shutil.copystat(src, dst)
|
||||
except OSError, why:
|
||||
if WindowsError is not None and isinstance(why, WindowsError):
|
||||
# Copying file access times may fail on Windows
|
||||
pass
|
||||
else:
|
||||
errors.extend((src, dst, str(why)))
|
||||
if errors:
|
||||
raise Error, errors
|
||||
|
||||
def conf_subproject (conf, subdir, command=None):
|
||||
print("---- %s ----" % subdir)
|
||||
src = join(conf.srcdir, subdir)
|
||||
@@ -45,7 +88,7 @@ def conf_subproject (conf, subdir, command=None):
|
||||
default_tgt = join(conf.blddir, "default", subdir)
|
||||
|
||||
if not os.path.exists(default_tgt):
|
||||
shutil.copytree(src, default_tgt)
|
||||
copytree(src, default_tgt, True)
|
||||
|
||||
if command:
|
||||
if os.system("cd %s && %s" % (default_tgt, command)) != 0:
|
||||
@@ -54,7 +97,7 @@ def conf_subproject (conf, subdir, command=None):
|
||||
debug_tgt = join(conf.blddir, "debug", subdir)
|
||||
|
||||
if not os.path.exists(debug_tgt):
|
||||
shutil.copytree(default_tgt, debug_tgt)
|
||||
copytree(default_tgt, debug_tgt, True)
|
||||
|
||||
def configure(conf):
|
||||
conf.check_tool('compiler_cxx')
|
||||
|
||||
Reference in New Issue
Block a user