From b68e8ef17d15686e85eb46cf1b7117f868953246 Mon Sep 17 00:00:00 2001 From: David Dollar Date: Fri, 16 Sep 2011 12:24:29 -0400 Subject: [PATCH] first pass at vendoring on s3 --- bin/compile | 28 +- support/download_npm | 19 - support/hmac | 79 + support/package_node | 51 + support/package_npm | 36 + support/s3 | 223 + support/s3-bash/s3-common-functions | 334 ++ support/s3-bash/s3-put | 119 + vendor/node/node-0.4.7/include/config.h | 29 - vendor/node/node-0.4.7/include/eio.h | 356 -- vendor/node/node-0.4.7/include/ev.h | 829 ---- vendor/node/node-0.4.7/include/node.h | 172 - vendor/node/node-0.4.7/include/node_buffer.h | 134 - vendor/node/node-0.4.7/include/node_config.h | 28 - vendor/node/node-0.4.7/include/node_events.h | 44 - .../node-0.4.7/include/node_object_wrap.h | 113 - vendor/node/node-0.4.7/include/node_version.h | 56 - vendor/node/node-0.4.7/include/v8-debug.h | 384 -- vendor/node/node-0.4.7/include/v8-preparser.h | 116 - vendor/node/node-0.4.7/include/v8-profiler.h | 426 -- vendor/node/node-0.4.7/include/v8-testing.h | 99 - vendor/node/node-0.4.7/include/v8.h | 3846 ----------------- vendor/node/node-0.4.7/include/v8stdint.h | 53 - vendor/node/node-0.4.7/node | Bin 9051499 -> 0 bytes vendor/node/node-0.4.7/node-waf | 15 - vendor/node/node-0.4.7/wafadmin/Build.py | 1021 ----- vendor/node/node-0.4.7/wafadmin/Build.pyc | Bin 30063 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Configure.py | 387 -- vendor/node/node-0.4.7/wafadmin/Configure.pyc | Bin 14180 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Constants.py | 76 - vendor/node/node-0.4.7/wafadmin/Constants.pyc | Bin 1630 -> 0 bytes .../node/node-0.4.7/wafadmin/Environment.py | 210 - .../node/node-0.4.7/wafadmin/Environment.pyc | Bin 7924 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Logs.py | 134 - vendor/node/node-0.4.7/wafadmin/Logs.pyc | Bin 4981 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Node.py | 693 --- vendor/node/node-0.4.7/wafadmin/Node.pyc | Bin 22139 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Options.py | 279 -- vendor/node/node-0.4.7/wafadmin/Options.pyc | Bin 8425 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Runner.py | 229 - vendor/node/node-0.4.7/wafadmin/Runner.pyc | Bin 6305 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Scripting.py | 586 --- vendor/node/node-0.4.7/wafadmin/Scripting.pyc | Bin 15134 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Task.py | 1171 ----- vendor/node/node-0.4.7/wafadmin/Task.pyc | Bin 38450 -> 0 bytes vendor/node/node-0.4.7/wafadmin/TaskGen.py | 588 --- vendor/node/node-0.4.7/wafadmin/TaskGen.pyc | Bin 18873 -> 0 bytes .../node-0.4.7/wafadmin/Tools/__init__.py | 4 - vendor/node/node-0.4.7/wafadmin/Tools/ar.py | 36 - vendor/node/node-0.4.7/wafadmin/Tools/ar.pyc | Bin 1556 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/cc.py | 100 - vendor/node/node-0.4.7/wafadmin/Tools/cc.pyc | Bin 3908 -> 0 bytes .../node/node-0.4.7/wafadmin/Tools/ccroot.py | 625 --- .../node/node-0.4.7/wafadmin/Tools/ccroot.pyc | Bin 19563 -> 0 bytes .../node-0.4.7/wafadmin/Tools/compiler_cc.py | 66 - .../node-0.4.7/wafadmin/Tools/compiler_cc.pyc | Bin 2684 -> 0 bytes .../node-0.4.7/wafadmin/Tools/compiler_cxx.py | 61 - .../wafadmin/Tools/compiler_cxx.pyc | Bin 2484 -> 0 bytes .../node-0.4.7/wafadmin/Tools/compiler_d.py | 33 - .../node-0.4.7/wafadmin/Tools/config_c.py | 729 ---- .../node-0.4.7/wafadmin/Tools/config_c.pyc | Bin 20325 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/cxx.py | 104 - vendor/node/node-0.4.7/wafadmin/Tools/cxx.pyc | Bin 4094 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/d.py | 540 --- vendor/node/node-0.4.7/wafadmin/Tools/dmd.py | 64 - vendor/node/node-0.4.7/wafadmin/Tools/gas.py | 38 - vendor/node/node-0.4.7/wafadmin/Tools/gcc.py | 137 - vendor/node/node-0.4.7/wafadmin/Tools/gcc.pyc | Bin 4314 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/gdc.py | 52 - .../node-0.4.7/wafadmin/Tools/gnu_dirs.py | 111 - vendor/node/node-0.4.7/wafadmin/Tools/gob2.py | 18 - vendor/node/node-0.4.7/wafadmin/Tools/gxx.py | 134 - vendor/node/node-0.4.7/wafadmin/Tools/gxx.pyc | Bin 4308 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/icc.py | 37 - vendor/node/node-0.4.7/wafadmin/Tools/icpc.py | 34 - .../node-0.4.7/wafadmin/Tools/intltool.py | 139 - .../node/node-0.4.7/wafadmin/Tools/libtool.py | 330 -- vendor/node/node-0.4.7/wafadmin/Tools/misc.py | 430 -- .../node/node-0.4.7/wafadmin/Tools/misc.pyc | Bin 15276 -> 0 bytes vendor/node/node-0.4.7/wafadmin/Tools/nasm.py | 49 - .../node-0.4.7/wafadmin/Tools/node_addon.py | 80 - vendor/node/node-0.4.7/wafadmin/Tools/osx.py | 187 - .../node/node-0.4.7/wafadmin/Tools/preproc.py | 813 ---- .../node-0.4.7/wafadmin/Tools/preproc.pyc | Bin 22744 -> 0 bytes .../node/node-0.4.7/wafadmin/Tools/python.py | 401 -- .../node/node-0.4.7/wafadmin/Tools/suncc.py | 77 - .../node/node-0.4.7/wafadmin/Tools/suncxx.py | 75 - .../node-0.4.7/wafadmin/Tools/unittestw.py | 305 -- .../node/node-0.4.7/wafadmin/Tools/winres.py | 45 - vendor/node/node-0.4.7/wafadmin/Tools/xlc.py | 77 - .../node/node-0.4.7/wafadmin/Tools/xlcxx.py | 77 - vendor/node/node-0.4.7/wafadmin/Utils.py | 707 --- vendor/node/node-0.4.7/wafadmin/Utils.pyc | Bin 24849 -> 0 bytes vendor/node/node-0.4.7/wafadmin/__init__.py | 3 - vendor/node/node-0.4.7/wafadmin/ansiterm.py | 221 - vendor/node/node-0.4.7/wafadmin/ansiterm.pyc | Bin 9849 -> 0 bytes vendor/node/node-0.4.7/wafadmin/pproc.py | 620 --- vendor/node/node-0.4.7/wafadmin/py3kfixes.py | 122 - vendor/npm/npm-1.0.27/.gitignore | 10 - vendor/npm/npm-1.0.27/.gitmodules | 33 - vendor/npm/npm-1.0.27/AUTHORS | 43 - vendor/npm/npm-1.0.27/CHANGES | 1 - vendor/npm/npm-1.0.27/LICENSE | 35 - vendor/npm/npm-1.0.27/Makefile | 64 - vendor/npm/npm-1.0.27/README.md | 219 - vendor/npm/npm-1.0.27/bin/npm-get-uid-gid.js | 16 - vendor/npm/npm-1.0.27/bin/npm.js | 62 - .../npm/npm-1.0.27/bin/read-package-json.js | 22 - vendor/npm/npm-1.0.27/cli.js | 2 - vendor/npm/npm-1.0.27/configure | 39 - vendor/npm/npm-1.0.27/doc/adduser.md | 29 - vendor/npm/npm-1.0.27/doc/author.md | 1 - vendor/npm/npm-1.0.27/doc/bin.md | 10 - vendor/npm/npm-1.0.27/doc/build.md | 22 - vendor/npm/npm-1.0.27/doc/bundle.md | 10 - vendor/npm/npm-1.0.27/doc/cache.md | 60 - vendor/npm/npm-1.0.27/doc/changelog.md | 31 - vendor/npm/npm-1.0.27/doc/coding-style.md | 184 - vendor/npm/npm-1.0.27/doc/completion.md | 21 - vendor/npm/npm-1.0.27/doc/config.md | 587 --- vendor/npm/npm-1.0.27/doc/deprecate.md | 19 - vendor/npm/npm-1.0.27/doc/developers.md | 167 - vendor/npm/npm-1.0.27/doc/docs.md | 14 - vendor/npm/npm-1.0.27/doc/edit.md | 18 - vendor/npm/npm-1.0.27/doc/explore.md | 16 - vendor/npm/npm-1.0.27/doc/faq.md | 200 - vendor/npm/npm-1.0.27/doc/find.md | 1 - vendor/npm/npm-1.0.27/doc/folders.md | 185 - vendor/npm/npm-1.0.27/doc/get.md | 1 - vendor/npm/npm-1.0.27/doc/global.md | 1 - vendor/npm/npm-1.0.27/doc/help-search.md | 29 - vendor/npm/npm-1.0.27/doc/home.md | 1 - vendor/npm/npm-1.0.27/doc/init.md | 23 - vendor/npm/npm-1.0.27/doc/install.md | 129 - vendor/npm/npm-1.0.27/doc/json.md | 448 -- vendor/npm/npm-1.0.27/doc/link.md | 49 - vendor/npm/npm-1.0.27/doc/list.md | 45 - vendor/npm/npm-1.0.27/doc/ln.md | 1 - vendor/npm/npm-1.0.27/doc/ls.md | 1 - vendor/npm/npm-1.0.27/doc/npm.md | 137 - vendor/npm/npm-1.0.27/doc/outdated.md | 11 - vendor/npm/npm-1.0.27/doc/owner.md | 29 - vendor/npm/npm-1.0.27/doc/pack.md | 19 - vendor/npm/npm-1.0.27/doc/prefix.md | 10 - vendor/npm/npm-1.0.27/doc/prune.md | 15 - vendor/npm/npm-1.0.27/doc/publish.md | 28 - vendor/npm/npm-1.0.27/doc/rebuild.md | 19 - vendor/npm/npm-1.0.27/doc/registry.md | 87 - vendor/npm/npm-1.0.27/doc/removing-npm.md | 41 - vendor/npm/npm-1.0.27/doc/restart.md | 19 - vendor/npm/npm-1.0.27/doc/rm.md | 1 - vendor/npm/npm-1.0.27/doc/root.md | 10 - vendor/npm/npm-1.0.27/doc/run-script.md | 21 - vendor/npm/npm-1.0.27/doc/scripts.md | 176 - vendor/npm/npm-1.0.27/doc/search.md | 10 - vendor/npm/npm-1.0.27/doc/semver.md | 122 - vendor/npm/npm-1.0.27/doc/set.md | 1 - vendor/npm/npm-1.0.27/doc/start.md | 10 - vendor/npm/npm-1.0.27/doc/stop.md | 10 - vendor/npm/npm-1.0.27/doc/submodule.md | 28 - vendor/npm/npm-1.0.27/doc/tag.md | 11 - vendor/npm/npm-1.0.27/doc/test.md | 13 - vendor/npm/npm-1.0.27/doc/uninstall.md | 11 - vendor/npm/npm-1.0.27/doc/unpublish.md | 14 - vendor/npm/npm-1.0.27/doc/update.md | 13 - vendor/npm/npm-1.0.27/doc/version.md | 14 - vendor/npm/npm-1.0.27/doc/view.md | 78 - vendor/npm/npm-1.0.27/doc/whoami.md | 10 - vendor/npm/npm-1.0.27/html/favicon.ico | Bin 7094 -> 0 bytes vendor/npm/npm-1.0.27/html/index.html | 85 - vendor/npm/npm-1.0.27/html/n-64.png | Bin 679 -> 0 bytes vendor/npm/npm-1.0.27/html/n-large.png | Bin 699 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-16.png | Bin 145 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-256-square.png | Bin 3290 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-256w.png | Bin 3169 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-64-square.png | Bin 2908 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-fin.png | Bin 47789 -> 0 bytes vendor/npm/npm-1.0.27/html/npm-large.png | Bin 483909 -> 0 bytes vendor/npm/npm-1.0.27/html/npm.png | Bin 1164 -> 0 bytes vendor/npm/npm-1.0.27/lib/adduser.js | 50 - vendor/npm/npm-1.0.27/lib/bin.js | 20 - vendor/npm/npm-1.0.27/lib/build.js | 167 - vendor/npm/npm-1.0.27/lib/cache.js | 696 --- vendor/npm/npm-1.0.27/lib/completion.js | 239 - vendor/npm/npm-1.0.27/lib/config.js | 258 -- vendor/npm/npm-1.0.27/lib/deprecate.js | 48 - vendor/npm/npm-1.0.27/lib/docs.js | 46 - vendor/npm/npm-1.0.27/lib/edit.js | 31 - vendor/npm/npm-1.0.27/lib/explore.js | 34 - vendor/npm/npm-1.0.27/lib/faq.js | 8 - vendor/npm/npm-1.0.27/lib/get.js | 12 - vendor/npm/npm-1.0.27/lib/help-search.js | 173 - vendor/npm/npm-1.0.27/lib/help.js | 117 - vendor/npm/npm-1.0.27/lib/init.js | 233 - vendor/npm/npm-1.0.27/lib/install.js | 690 --- vendor/npm/npm-1.0.27/lib/link.js | 153 - vendor/npm/npm-1.0.27/lib/ls.js | 170 - vendor/npm/npm-1.0.27/lib/outdated.js | 147 - vendor/npm/npm-1.0.27/lib/owner.js | 188 - vendor/npm/npm-1.0.27/lib/pack.js | 66 - vendor/npm/npm-1.0.27/lib/prefix.js | 10 - vendor/npm/npm-1.0.27/lib/prune.js | 40 - vendor/npm/npm-1.0.27/lib/publish.js | 157 - vendor/npm/npm-1.0.27/lib/rebuild.js | 68 - vendor/npm/npm-1.0.27/lib/restart.js | 1 - vendor/npm/npm-1.0.27/lib/root.js | 11 - vendor/npm/npm-1.0.27/lib/run-script.js | 100 - vendor/npm/npm-1.0.27/lib/search.js | 221 - vendor/npm/npm-1.0.27/lib/set.js | 12 - vendor/npm/npm-1.0.27/lib/start.js | 1 - vendor/npm/npm-1.0.27/lib/stop.js | 1 - vendor/npm/npm-1.0.27/lib/submodule.js | 93 - vendor/npm/npm-1.0.27/lib/tag.js | 17 - vendor/npm/npm-1.0.27/lib/test.js | 1 - vendor/npm/npm-1.0.27/lib/unbuild.js | 82 - vendor/npm/npm-1.0.27/lib/uninstall.js | 57 - vendor/npm/npm-1.0.27/lib/unpublish.js | 63 - vendor/npm/npm-1.0.27/lib/update.js | 34 - vendor/npm/npm-1.0.27/lib/utils/completion.sh | 43 - .../lib/utils/completion/file-completion.js | 29 - .../lib/utils/completion/installed-deep.js | 46 - .../lib/utils/completion/installed-shallow.js | 79 - .../lib/utils/completion/remote-packages.js | 57 - .../npm-1.0.27/lib/utils/completion/users.js | 22 - .../npm/npm-1.0.27/lib/utils/config-defs.js | 220 - .../npm/npm-1.0.27/lib/utils/error-handler.js | 211 - vendor/npm/npm-1.0.27/lib/utils/excludes.js | 145 - vendor/npm/npm-1.0.27/lib/utils/exec.js | 105 - vendor/npm/npm-1.0.27/lib/utils/fetch.js | 151 - .../npm/npm-1.0.27/lib/utils/find-prefix.js | 41 - vendor/npm/npm-1.0.27/lib/utils/find.js | 53 - vendor/npm/npm-1.0.27/lib/utils/get.js | 6 - vendor/npm/npm-1.0.27/lib/utils/ini.js | 282 -- vendor/npm/npm-1.0.27/lib/utils/lifecycle.js | 253 -- vendor/npm/npm-1.0.27/lib/utils/link.js | 30 - .../lib/utils/load-package-defaults.js | 75 - vendor/npm/npm-1.0.27/lib/utils/log.js | 174 - vendor/npm/npm-1.0.27/lib/utils/mkdir-p.js | 175 - .../lib/utils/npm-registry-client/adduser.js | 100 - .../lib/utils/npm-registry-client/get.js | 171 - .../lib/utils/npm-registry-client/index.js | 16 - .../lib/utils/npm-registry-client/publish.js | 161 - .../lib/utils/npm-registry-client/request.js | 328 -- .../lib/utils/npm-registry-client/tag.js | 8 - .../utils/npm-registry-client/unpublish.js | 98 - vendor/npm/npm-1.0.27/lib/utils/output.js | 138 - .../npm/npm-1.0.27/lib/utils/promise-chain.js | 39 - vendor/npm/npm-1.0.27/lib/utils/prompt.js | 70 - vendor/npm/npm-1.0.27/lib/utils/proxyify.js | 54 - .../npm-1.0.27/lib/utils/read-installed.js | 295 -- vendor/npm/npm-1.0.27/lib/utils/read-json.js | 416 -- vendor/npm/npm-1.0.27/lib/utils/relativize.js | 63 - vendor/npm/npm-1.0.27/lib/utils/set.js | 25 - vendor/npm/npm-1.0.27/lib/utils/sha.js | 51 - vendor/npm/npm-1.0.27/lib/utils/tar.js | 542 --- vendor/npm/npm-1.0.27/lib/utils/uid-number.js | 55 - vendor/npm/npm-1.0.27/lib/version.js | 62 - vendor/npm/npm-1.0.27/lib/view.js | 217 - vendor/npm/npm-1.0.27/lib/whoami.js | 13 - vendor/npm/npm-1.0.27/lib/xmas.js | 53 - vendor/npm/npm-1.0.27/man1/adduser.1 | 40 - vendor/npm/npm-1.0.27/man1/author.1 | 51 - vendor/npm/npm-1.0.27/man1/bin.1 | 17 - vendor/npm/npm-1.0.27/man1/build.1 | 43 - vendor/npm/npm-1.0.27/man1/bundle.1 | 15 - vendor/npm/npm-1.0.27/man1/cache.1 | 76 - vendor/npm/npm-1.0.27/man1/changelog.1 | 81 - vendor/npm/npm-1.0.27/man1/coding-style.1 | 255 -- vendor/npm/npm-1.0.27/man1/completion.1 | 30 - vendor/npm/npm-1.0.27/man1/config.1 | 1054 ----- vendor/npm/npm-1.0.27/man1/deprecate.1 | 34 - vendor/npm/npm-1.0.27/man1/developers.1 | 247 -- vendor/npm/npm-1.0.27/man1/docs.1 | 20 - vendor/npm/npm-1.0.27/man1/edit.1 | 27 - vendor/npm/npm-1.0.27/man1/explore.1 | 25 - vendor/npm/npm-1.0.27/man1/faq.1 | 246 -- vendor/npm/npm-1.0.27/man1/find.1 | 73 - vendor/npm/npm-1.0.27/man1/folders.1 | 218 - vendor/npm/npm-1.0.27/man1/get.1 | 1054 ----- vendor/npm/npm-1.0.27/man1/global.1 | 218 - vendor/npm/npm-1.0.27/man1/help-search.1 | 40 - vendor/npm/npm-1.0.27/man1/home.1 | 20 - vendor/npm/npm-1.0.27/man1/init.1 | 32 - vendor/npm/npm-1.0.27/man1/install.1 | 210 - vendor/npm/npm-1.0.27/man1/json.1 | 626 --- vendor/npm/npm-1.0.27/man1/link.1 | 85 - vendor/npm/npm-1.0.27/man1/list.1 | 73 - vendor/npm/npm-1.0.27/man1/ln.1 | 85 - vendor/npm/npm-1.0.27/man1/ls.1 | 73 - vendor/npm/npm-1.0.27/man1/npm.1 | 195 - vendor/npm/npm-1.0.27/man1/outdated.1 | 18 - vendor/npm/npm-1.0.27/man1/owner.1 | 51 - vendor/npm/npm-1.0.27/man1/pack.1 | 28 - vendor/npm/npm-1.0.27/man1/prefix.1 | 17 - vendor/npm/npm-1.0.27/man1/prune.1 | 23 - vendor/npm/npm-1.0.27/man1/publish.1 | 47 - vendor/npm/npm-1.0.27/man1/rebuild.1 | 28 - vendor/npm/npm-1.0.27/man1/registry.1 | 96 - vendor/npm/npm-1.0.27/man1/removing-npm.1 | 66 - vendor/npm/npm-1.0.27/man1/restart.1 | 33 - vendor/npm/npm-1.0.27/man1/rm.1 | 18 - vendor/npm/npm-1.0.27/man1/root.1 | 17 - vendor/npm/npm-1.0.27/man1/run-script.1 | 41 - vendor/npm/npm-1.0.27/man1/scripts.1 | 251 -- vendor/npm/npm-1.0.27/man1/search.1 | 17 - vendor/npm/npm-1.0.27/man1/semver.1 | 211 - vendor/npm/npm-1.0.27/man1/set.1 | 1054 ----- vendor/npm/npm-1.0.27/man1/start.1 | 17 - vendor/npm/npm-1.0.27/man1/stop.1 | 17 - vendor/npm/npm-1.0.27/man1/submodule.1 | 42 - vendor/npm/npm-1.0.27/man1/tag.1 | 17 - vendor/npm/npm-1.0.27/man1/test.1 | 21 - vendor/npm/npm-1.0.27/man1/uninstall.1 | 18 - vendor/npm/npm-1.0.27/man1/unpublish.1 | 22 - vendor/npm/npm-1.0.27/man1/update.1 | 21 - vendor/npm/npm-1.0.27/man1/version.1 | 22 - vendor/npm/npm-1.0.27/man1/view.1 | 159 - vendor/npm/npm-1.0.27/man1/whoami.1 | 17 - .../npm-1.0.27/node_modules/abbrev/README.md | 23 - .../node_modules/abbrev/lib/abbrev.js | 106 - .../node_modules/abbrev/package.json | 8 - .../node_modules/graceful-fs/README.md | 5 - .../node_modules/graceful-fs/graceful-fs.js | 34 - .../node_modules/graceful-fs/package.json | 16 - .../npm/npm-1.0.27/node_modules/ini/README.md | 4 - vendor/npm/npm-1.0.27/node_modules/ini/ini.js | 95 - .../npm-1.0.27/node_modules/ini/package.json | 24 - .../node_modules/ini/test/fixtures/foo.ini | 18 - .../npm-1.0.27/node_modules/ini/test/foo.js | 40 - .../node_modules/minimatch/.gitmodules | 3 - .../node_modules/minimatch/README.md | 107 - .../node_modules/minimatch/minimatch.js | 399 -- .../node_modules/lru-cache/README.md | 12 - .../node_modules/lru-cache/lib/lru-cache.js | 151 - .../node_modules/lru-cache/package.json | 8 - .../node_modules/minimatch/package.json | 26 - .../node_modules/minimatch/test/basic.js | 141 - .../node_modules/node-uuid/LICENSE.md | 3 - .../node_modules/node-uuid/README.md | 100 - .../node_modules/node-uuid/package.json | 12 - .../node-uuid/test/benchmark-native.c | 34 - .../node_modules/node-uuid/test/benchmark.js | 27 - .../node_modules/node-uuid/test/test.html | 14 - .../node_modules/node-uuid/test/test.js | 83 - .../npm-1.0.27/node_modules/node-uuid/uuid.js | 80 - .../npm-1.0.27/node_modules/nopt/.gitignore | 0 .../npm/npm-1.0.27/node_modules/nopt/LICENSE | 23 - .../npm-1.0.27/node_modules/nopt/README.md | 182 - .../node_modules/nopt/examples/my-program.js | 30 - .../npm-1.0.27/node_modules/nopt/lib/nopt.js | 395 -- .../npm-1.0.27/node_modules/nopt/package.json | 11 - .../node_modules/proto-list/LICENSE | 23 - .../node_modules/proto-list/README.md | 3 - .../node_modules/proto-list/package.json | 9 - .../node_modules/proto-list/proto-list.js | 94 - .../npm-1.0.27/node_modules/rimraf/AUTHORS | 4 - .../npm-1.0.27/node_modules/rimraf/LICENSE | 23 - .../npm-1.0.27/node_modules/rimraf/README.md | 32 - .../node_modules/rimraf/package.json | 9 - .../npm-1.0.27/node_modules/rimraf/rimraf.js | 127 - .../node_modules/rimraf/test/run.sh | 10 - .../node_modules/rimraf/test/setup.sh | 47 - .../node_modules/rimraf/test/test-async.js | 5 - .../node_modules/rimraf/test/test-sync.js | 3 - .../npm-1.0.27/node_modules/semver/LICENSE | 23 - .../npm-1.0.27/node_modules/semver/README.md | 119 - .../npm-1.0.27/node_modules/semver/bin/semver | 71 - .../node_modules/semver/package.json | 11 - .../npm-1.0.27/node_modules/semver/semver.js | 518 --- .../npm-1.0.27/node_modules/slide/README.md | 27 - .../npm-1.0.27/node_modules/slide/index.js | 1 - .../slide/lib/async-map-ordered.js | 65 - .../node_modules/slide/lib/async-map.js | 56 - .../node_modules/slide/lib/bind-actor.js | 16 - .../node_modules/slide/lib/chain.js | 20 - .../node_modules/slide/lib/slide.js | 3 - .../slide/nodejs-controlling-flow.pdf | Bin 167502 -> 0 bytes .../node_modules/slide/package.json | 19 - .../npm-1.0.27/node_modules/which/README.md | 5 - .../npm-1.0.27/node_modules/which/bin/which | 14 - .../node_modules/which/package.json | 17 - .../npm-1.0.27/node_modules/which/which.js | 50 - vendor/npm/npm-1.0.27/npm.js | 334 -- vendor/npm/npm-1.0.27/package.json | 60 - vendor/npm/npm-1.0.27/scripts/clean-old.sh | 144 - vendor/npm/npm-1.0.27/scripts/install.sh | 159 - vendor/npm/npm-1.0.27/test/common.js | 7 - .../test/disabled/bundlerecurs/package.json | 4 - .../test/disabled/failer/package.json | 5 - .../test/disabled/fast/package.json | 12 - .../test/disabled/package-config/package.json | 4 - .../test/disabled/package-config/test.js | 17 - .../test/disabled/slow/package.json | 12 - .../test/disabled/startstop/package.json | 3 - .../test/packages/npm-test-blerg/package.json | 4 - .../test/packages/npm-test-blerg/test.js | 5 - .../packages/npm-test-env-reader/package.json | 18 - .../test/packages/npm-test-env-reader/test.sh | 3 - .../npm-test-missing-bindir/package.json | 4 - .../packages/npm-test-missing-bindir/test.js | 5 - .../packages/npm-test-private/package.json | 4 - .../npm-test-test-package/package.json | 5 - .../packages/npm-test-url-dep/package.json | 6 - vendor/npm/npm-1.0.27/test/run.sh | 133 - vendor/npm/npm-1.0.27/test/update-test.sh | 59 - vendor/npm/npm-1.0.3/.gitignore | 11 - vendor/npm/npm-1.0.3/.gitmodules | 9 - vendor/npm/npm-1.0.3/AUTHORS | 31 - vendor/npm/npm-1.0.3/CHANGES | 1 - vendor/npm/npm-1.0.3/LICENSE | 32 - vendor/npm/npm-1.0.3/Makefile | 64 - vendor/npm/npm-1.0.3/README.md | 172 - vendor/npm/npm-1.0.3/bin/npm-get-uid-gid.js | 16 - vendor/npm/npm-1.0.3/bin/npm.js | 58 - vendor/npm/npm-1.0.3/bin/read-package-json.js | 22 - vendor/npm/npm-1.0.3/cli.js | 2 - vendor/npm/npm-1.0.3/config | 34 - vendor/npm/npm-1.0.3/doc/adduser.md | 29 - vendor/npm/npm-1.0.3/doc/author.md | 1 - vendor/npm/npm-1.0.3/doc/bin.md | 10 - vendor/npm/npm-1.0.3/doc/build.md | 22 - vendor/npm/npm-1.0.3/doc/cache.md | 60 - vendor/npm/npm-1.0.3/doc/changelog.md | 31 - vendor/npm/npm-1.0.3/doc/coding-style.md | 184 - vendor/npm/npm-1.0.3/doc/completion.md | 19 - vendor/npm/npm-1.0.3/doc/config.md | 491 --- vendor/npm/npm-1.0.3/doc/deprecate.md | 19 - vendor/npm/npm-1.0.3/doc/developers.md | 167 - vendor/npm/npm-1.0.3/doc/docs.md | 12 - vendor/npm/npm-1.0.3/doc/edit.md | 18 - vendor/npm/npm-1.0.3/doc/explore.md | 16 - vendor/npm/npm-1.0.3/doc/faq.md | 174 - vendor/npm/npm-1.0.3/doc/find.md | 1 - vendor/npm/npm-1.0.3/doc/folders.md | 175 - vendor/npm/npm-1.0.3/doc/get.md | 1 - vendor/npm/npm-1.0.3/doc/global.md | 1 - vendor/npm/npm-1.0.3/doc/init.md | 23 - vendor/npm/npm-1.0.3/doc/install.md | 99 - vendor/npm/npm-1.0.3/doc/json.md | 407 -- vendor/npm/npm-1.0.3/doc/link.md | 49 - vendor/npm/npm-1.0.3/doc/list.md | 36 - vendor/npm/npm-1.0.3/doc/ln.md | 1 - vendor/npm/npm-1.0.3/doc/ls.md | 1 - vendor/npm/npm-1.0.3/doc/npm.md | 120 - vendor/npm/npm-1.0.3/doc/outdated.md | 11 - vendor/npm/npm-1.0.3/doc/owner.md | 29 - vendor/npm/npm-1.0.3/doc/prefix.md | 10 - vendor/npm/npm-1.0.3/doc/prune.md | 15 - vendor/npm/npm-1.0.3/doc/publish.md | 28 - vendor/npm/npm-1.0.3/doc/rebuild.md | 19 - vendor/npm/npm-1.0.3/doc/registry.md | 78 - vendor/npm/npm-1.0.3/doc/removing-npm.md | 39 - vendor/npm/npm-1.0.3/doc/restart.md | 19 - vendor/npm/npm-1.0.3/doc/rm.md | 1 - vendor/npm/npm-1.0.3/doc/root.md | 10 - vendor/npm/npm-1.0.3/doc/run-script.md | 21 - vendor/npm/npm-1.0.3/doc/scripts.md | 155 - vendor/npm/npm-1.0.3/doc/search.md | 10 - vendor/npm/npm-1.0.3/doc/set.md | 1 - vendor/npm/npm-1.0.3/doc/start.md | 10 - vendor/npm/npm-1.0.3/doc/stop.md | 10 - vendor/npm/npm-1.0.3/doc/tag.md | 11 - vendor/npm/npm-1.0.3/doc/test.md | 13 - vendor/npm/npm-1.0.3/doc/uninstall.md | 11 - vendor/npm/npm-1.0.3/doc/unpublish.md | 14 - vendor/npm/npm-1.0.3/doc/update.md | 13 - vendor/npm/npm-1.0.3/doc/version.md | 14 - vendor/npm/npm-1.0.3/doc/view.md | 78 - vendor/npm/npm-1.0.3/doc/whoami.md | 10 - vendor/npm/npm-1.0.3/html/favicon.ico | Bin 7094 -> 0 bytes vendor/npm/npm-1.0.3/html/index.html | 85 - vendor/npm/npm-1.0.3/html/npm-16.png | Bin 145 -> 0 bytes vendor/npm/npm-1.0.3/html/npm-256-square.png | Bin 3290 -> 0 bytes vendor/npm/npm-1.0.3/html/npm-256w.png | Bin 3169 -> 0 bytes vendor/npm/npm-1.0.3/html/npm-64-square.png | Bin 2908 -> 0 bytes vendor/npm/npm-1.0.3/html/npm-fin.png | Bin 47789 -> 0 bytes vendor/npm/npm-1.0.3/html/npm-large.png | Bin 483909 -> 0 bytes vendor/npm/npm-1.0.3/html/npm.png | Bin 1164 -> 0 bytes vendor/npm/npm-1.0.3/lib/adduser.js | 50 - vendor/npm/npm-1.0.3/lib/bin.js | 18 - vendor/npm/npm-1.0.3/lib/build.js | 162 - vendor/npm/npm-1.0.3/lib/cache.js | 565 --- vendor/npm/npm-1.0.3/lib/completion.js | 220 - vendor/npm/npm-1.0.3/lib/config.js | 258 -- vendor/npm/npm-1.0.3/lib/deprecate.js | 49 - vendor/npm/npm-1.0.3/lib/docs.js | 47 - vendor/npm/npm-1.0.3/lib/edit.js | 28 - vendor/npm/npm-1.0.3/lib/explore.js | 34 - vendor/npm/npm-1.0.3/lib/faq.js | 8 - vendor/npm/npm-1.0.3/lib/get.js | 12 - vendor/npm/npm-1.0.3/lib/help.js | 98 - vendor/npm/npm-1.0.3/lib/init.js | 220 - vendor/npm/npm-1.0.3/lib/install.js | 495 --- vendor/npm/npm-1.0.3/lib/link.js | 139 - vendor/npm/npm-1.0.3/lib/ls.js | 165 - vendor/npm/npm-1.0.3/lib/outdated.js | 147 - vendor/npm/npm-1.0.3/lib/owner.js | 181 - vendor/npm/npm-1.0.3/lib/prefix.js | 8 - vendor/npm/npm-1.0.3/lib/prune.js | 40 - vendor/npm/npm-1.0.3/lib/publish.js | 142 - vendor/npm/npm-1.0.3/lib/rebuild.js | 69 - vendor/npm/npm-1.0.3/lib/restart.js | 1 - vendor/npm/npm-1.0.3/lib/root.js | 17 - vendor/npm/npm-1.0.3/lib/run-script.js | 96 - vendor/npm/npm-1.0.3/lib/search.js | 203 - vendor/npm/npm-1.0.3/lib/set.js | 12 - vendor/npm/npm-1.0.3/lib/start.js | 1 - vendor/npm/npm-1.0.3/lib/stop.js | 1 - vendor/npm/npm-1.0.3/lib/tag.js | 17 - vendor/npm/npm-1.0.3/lib/test.js | 1 - vendor/npm/npm-1.0.3/lib/unbuild.js | 77 - vendor/npm/npm-1.0.3/lib/uninstall.js | 58 - vendor/npm/npm-1.0.3/lib/unpublish.js | 61 - vendor/npm/npm-1.0.3/lib/update.js | 34 - vendor/npm/npm-1.0.3/lib/utils/async-map.js | 59 - vendor/npm/npm-1.0.3/lib/utils/base64.js | 3 - vendor/npm/npm-1.0.3/lib/utils/chain.js | 56 - vendor/npm/npm-1.0.3/lib/utils/completion.sh | 43 - .../lib/utils/completion/file-completion.js | 29 - .../lib/utils/completion/installed-deep.js | 46 - .../lib/utils/completion/installed-shallow.js | 79 - .../lib/utils/completion/remote-packages.js | 57 - .../npm-1.0.3/lib/utils/completion/users.js | 22 - vendor/npm/npm-1.0.3/lib/utils/config-defs.js | 173 - .../npm/npm-1.0.3/lib/utils/error-handler.js | 191 - vendor/npm/npm-1.0.3/lib/utils/exec.js | 105 - vendor/npm/npm-1.0.3/lib/utils/fetch.js | 151 - vendor/npm/npm-1.0.3/lib/utils/find-prefix.js | 41 - vendor/npm/npm-1.0.3/lib/utils/find.js | 53 - vendor/npm/npm-1.0.3/lib/utils/get.js | 6 - vendor/npm/npm-1.0.3/lib/utils/graceful-fs.js | 34 - vendor/npm/npm-1.0.3/lib/utils/ini-parser.js | 64 - vendor/npm/npm-1.0.3/lib/utils/ini.js | 311 -- vendor/npm/npm-1.0.3/lib/utils/lifecycle.js | 238 - vendor/npm/npm-1.0.3/lib/utils/link.js | 30 - .../lib/utils/load-package-defaults.js | 75 - vendor/npm/npm-1.0.3/lib/utils/log.js | 172 - vendor/npm/npm-1.0.3/lib/utils/minimatch.js | 240 - vendor/npm/npm-1.0.3/lib/utils/mkdir-p.js | 121 - .../lib/utils/npm-registry-client/adduser.js | 80 - .../lib/utils/npm-registry-client/get.js | 102 - .../lib/utils/npm-registry-client/index.js | 16 - .../lib/utils/npm-registry-client/publish.js | 161 - .../lib/utils/npm-registry-client/request.js | 290 -- .../lib/utils/npm-registry-client/tag.js | 8 - .../utils/npm-registry-client/unpublish.js | 98 - vendor/npm/npm-1.0.3/lib/utils/output.js | 91 - .../npm/npm-1.0.3/lib/utils/promise-chain.js | 39 - vendor/npm/npm-1.0.3/lib/utils/prompt.js | 70 - vendor/npm/npm-1.0.3/lib/utils/proto-list.js | 92 - vendor/npm/npm-1.0.3/lib/utils/proxyify.js | 54 - .../npm/npm-1.0.3/lib/utils/read-installed.js | 277 -- vendor/npm/npm-1.0.3/lib/utils/read-json.js | 397 -- vendor/npm/npm-1.0.3/lib/utils/relativize.js | 63 - vendor/npm/npm-1.0.3/lib/utils/rm-rf.js | 100 - vendor/npm/npm-1.0.3/lib/utils/set.js | 25 - vendor/npm/npm-1.0.3/lib/utils/sha.js | 51 - vendor/npm/npm-1.0.3/lib/utils/sys.js | 2 - vendor/npm/npm-1.0.3/lib/utils/tar.js | 530 --- vendor/npm/npm-1.0.3/lib/utils/uid-number.js | 41 - vendor/npm/npm-1.0.3/lib/utils/which.js | 43 - vendor/npm/npm-1.0.3/lib/version.js | 60 - vendor/npm/npm-1.0.3/lib/view.js | 217 - vendor/npm/npm-1.0.3/lib/whoami.js | 13 - vendor/npm/npm-1.0.3/lib/xmas.js | 52 - vendor/npm/npm-1.0.3/man1/adduser.1 | 40 - vendor/npm/npm-1.0.3/man1/author.1 | 51 - vendor/npm/npm-1.0.3/man1/bin.1 | 17 - vendor/npm/npm-1.0.3/man1/build.1 | 43 - vendor/npm/npm-1.0.3/man1/cache.1 | 76 - vendor/npm/npm-1.0.3/man1/changelog.1 | 78 - vendor/npm/npm-1.0.3/man1/coding-style.1 | 255 -- vendor/npm/npm-1.0.3/man1/completion.1 | 27 - vendor/npm/npm-1.0.3/man1/config.1 | 882 ---- vendor/npm/npm-1.0.3/man1/deprecate.1 | 34 - vendor/npm/npm-1.0.3/man1/developers.1 | 247 -- vendor/npm/npm-1.0.3/man1/docs.1 | 19 - vendor/npm/npm-1.0.3/man1/edit.1 | 27 - vendor/npm/npm-1.0.3/man1/explore.1 | 25 - vendor/npm/npm-1.0.3/man1/faq.1 | 224 - vendor/npm/npm-1.0.3/man1/find.1 | 58 - vendor/npm/npm-1.0.3/man1/folders.1 | 207 - vendor/npm/npm-1.0.3/man1/get.1 | 882 ---- vendor/npm/npm-1.0.3/man1/global.1 | 207 - vendor/npm/npm-1.0.3/man1/init.1 | 32 - vendor/npm/npm-1.0.3/man1/install.1 | 160 - vendor/npm/npm-1.0.3/man1/json.1 | 578 --- vendor/npm/npm-1.0.3/man1/link.1 | 85 - vendor/npm/npm-1.0.3/man1/list.1 | 58 - vendor/npm/npm-1.0.3/man1/ln.1 | 85 - vendor/npm/npm-1.0.3/man1/ls.1 | 58 - vendor/npm/npm-1.0.3/man1/npm.1 | 170 - vendor/npm/npm-1.0.3/man1/outdated.1 | 18 - vendor/npm/npm-1.0.3/man1/owner.1 | 51 - vendor/npm/npm-1.0.3/man1/prefix.1 | 17 - vendor/npm/npm-1.0.3/man1/prune.1 | 23 - vendor/npm/npm-1.0.3/man1/publish.1 | 47 - vendor/npm/npm-1.0.3/man1/rebuild.1 | 28 - vendor/npm/npm-1.0.3/man1/registry.1 | 88 - vendor/npm/npm-1.0.3/man1/removing-npm.1 | 63 - vendor/npm/npm-1.0.3/man1/restart.1 | 33 - vendor/npm/npm-1.0.3/man1/rm.1 | 18 - vendor/npm/npm-1.0.3/man1/root.1 | 17 - vendor/npm/npm-1.0.3/man1/run-script.1 | 41 - vendor/npm/npm-1.0.3/man1/scripts.1 | 232 - vendor/npm/npm-1.0.3/man1/search.1 | 17 - vendor/npm/npm-1.0.3/man1/set.1 | 882 ---- vendor/npm/npm-1.0.3/man1/start.1 | 17 - vendor/npm/npm-1.0.3/man1/stop.1 | 17 - vendor/npm/npm-1.0.3/man1/tag.1 | 17 - vendor/npm/npm-1.0.3/man1/test.1 | 21 - vendor/npm/npm-1.0.3/man1/uninstall.1 | 18 - vendor/npm/npm-1.0.3/man1/unpublish.1 | 22 - vendor/npm/npm-1.0.3/man1/update.1 | 21 - vendor/npm/npm-1.0.3/man1/version.1 | 22 - vendor/npm/npm-1.0.3/man1/view.1 | 159 - vendor/npm/npm-1.0.3/man1/whoami.1 | 17 - .../npm-1.0.3/node_modules/abbrev/README.md | 23 - .../node_modules/abbrev/lib/abbrev.js | 106 - .../node_modules/abbrev/package.json | 8 - .../npm-1.0.3/node_modules/nopt/.gitignore | 1 - .../npm/npm-1.0.3/node_modules/nopt/README.md | 182 - .../node_modules/nopt/examples/my-program.js | 30 - .../npm-1.0.3/node_modules/nopt/lib/nopt.js | 395 -- .../npm-1.0.3/node_modules/nopt/package.json | 8 - .../npm-1.0.3/node_modules/semver/README.md | 118 - .../npm-1.0.3/node_modules/semver/bin/semver | 71 - .../node_modules/semver/package.json | 8 - .../npm-1.0.3/node_modules/semver/semver.js | 460 -- vendor/npm/npm-1.0.3/npm.js | 249 -- vendor/npm/npm-1.0.3/package.json | 40 - vendor/npm/npm-1.0.3/scripts/clean-old.sh | 127 - .../npm/npm-1.0.3/scripts/install-message.sh | 15 - vendor/npm/npm-1.0.3/scripts/install.sh | 153 - vendor/npm/npm-1.0.3/test/common.js | 7 - .../test/disabled/bundlerecurs/package.json | 4 - .../test/disabled/failer/package.json | 5 - .../npm-1.0.3/test/disabled/fast/package.json | 12 - .../test/disabled/package-config/package.json | 4 - .../test/disabled/package-config/test.js | 17 - .../npm-1.0.3/test/disabled/slow/package.json | 12 - .../test/disabled/startstop/package.json | 3 - .../test/packages/npm-test-blerg/package.json | 4 - .../test/packages/npm-test-blerg/test.js | 5 - .../packages/npm-test-env-reader/package.json | 18 - .../test/packages/npm-test-env-reader/test.sh | 3 - .../packages/npm-test-private/package.json | 4 - .../npm-test-test-package/package.json | 5 - .../packages/npm-test-url-dep/package.json | 6 - vendor/npm/npm-1.0.3/test/run.sh | 131 - vendor/npm/npm-1.0.3/test/update-test.sh | 59 - vendor/npm/npm-1.0.6/.gitignore | 11 - vendor/npm/npm-1.0.6/.gitmodules | 9 - vendor/npm/npm-1.0.6/AUTHORS | 33 - vendor/npm/npm-1.0.6/CHANGES | 1 - vendor/npm/npm-1.0.6/LICENSE | 35 - vendor/npm/npm-1.0.6/Makefile | 64 - vendor/npm/npm-1.0.6/README.md | 172 - vendor/npm/npm-1.0.6/bin/npm-get-uid-gid.js | 16 - vendor/npm/npm-1.0.6/bin/npm.js | 58 - vendor/npm/npm-1.0.6/bin/read-package-json.js | 22 - vendor/npm/npm-1.0.6/cli.js | 2 - vendor/npm/npm-1.0.6/config | 34 - vendor/npm/npm-1.0.6/doc/adduser.md | 29 - vendor/npm/npm-1.0.6/doc/author.md | 1 - vendor/npm/npm-1.0.6/doc/bin.md | 10 - vendor/npm/npm-1.0.6/doc/build.md | 22 - vendor/npm/npm-1.0.6/doc/cache.md | 60 - vendor/npm/npm-1.0.6/doc/changelog.md | 31 - vendor/npm/npm-1.0.6/doc/coding-style.md | 184 - vendor/npm/npm-1.0.6/doc/completion.md | 19 - vendor/npm/npm-1.0.6/doc/config.md | 491 --- vendor/npm/npm-1.0.6/doc/deprecate.md | 19 - vendor/npm/npm-1.0.6/doc/developers.md | 167 - vendor/npm/npm-1.0.6/doc/docs.md | 12 - vendor/npm/npm-1.0.6/doc/edit.md | 18 - vendor/npm/npm-1.0.6/doc/explore.md | 16 - vendor/npm/npm-1.0.6/doc/faq.md | 174 - vendor/npm/npm-1.0.6/doc/find.md | 1 - vendor/npm/npm-1.0.6/doc/folders.md | 175 - vendor/npm/npm-1.0.6/doc/get.md | 1 - vendor/npm/npm-1.0.6/doc/global.md | 1 - vendor/npm/npm-1.0.6/doc/init.md | 23 - vendor/npm/npm-1.0.6/doc/install.md | 99 - vendor/npm/npm-1.0.6/doc/json.md | 407 -- vendor/npm/npm-1.0.6/doc/link.md | 49 - vendor/npm/npm-1.0.6/doc/list.md | 37 - vendor/npm/npm-1.0.6/doc/ln.md | 1 - vendor/npm/npm-1.0.6/doc/ls.md | 1 - vendor/npm/npm-1.0.6/doc/npm.md | 120 - vendor/npm/npm-1.0.6/doc/outdated.md | 11 - vendor/npm/npm-1.0.6/doc/owner.md | 29 - vendor/npm/npm-1.0.6/doc/prefix.md | 10 - vendor/npm/npm-1.0.6/doc/prune.md | 15 - vendor/npm/npm-1.0.6/doc/publish.md | 28 - vendor/npm/npm-1.0.6/doc/rebuild.md | 19 - vendor/npm/npm-1.0.6/doc/registry.md | 78 - vendor/npm/npm-1.0.6/doc/removing-npm.md | 39 - vendor/npm/npm-1.0.6/doc/restart.md | 19 - vendor/npm/npm-1.0.6/doc/rm.md | 1 - vendor/npm/npm-1.0.6/doc/root.md | 10 - vendor/npm/npm-1.0.6/doc/run-script.md | 21 - vendor/npm/npm-1.0.6/doc/scripts.md | 155 - vendor/npm/npm-1.0.6/doc/search.md | 10 - vendor/npm/npm-1.0.6/doc/set.md | 1 - vendor/npm/npm-1.0.6/doc/start.md | 10 - vendor/npm/npm-1.0.6/doc/stop.md | 10 - vendor/npm/npm-1.0.6/doc/tag.md | 11 - vendor/npm/npm-1.0.6/doc/test.md | 13 - vendor/npm/npm-1.0.6/doc/uninstall.md | 11 - vendor/npm/npm-1.0.6/doc/unpublish.md | 14 - vendor/npm/npm-1.0.6/doc/update.md | 13 - vendor/npm/npm-1.0.6/doc/version.md | 14 - vendor/npm/npm-1.0.6/doc/view.md | 78 - vendor/npm/npm-1.0.6/doc/whoami.md | 10 - vendor/npm/npm-1.0.6/html/favicon.ico | Bin 7094 -> 0 bytes vendor/npm/npm-1.0.6/html/index.html | 85 - vendor/npm/npm-1.0.6/html/npm-16.png | Bin 145 -> 0 bytes vendor/npm/npm-1.0.6/html/npm-256-square.png | Bin 3290 -> 0 bytes vendor/npm/npm-1.0.6/html/npm-256w.png | Bin 3169 -> 0 bytes vendor/npm/npm-1.0.6/html/npm-64-square.png | Bin 2908 -> 0 bytes vendor/npm/npm-1.0.6/html/npm-fin.png | Bin 47789 -> 0 bytes vendor/npm/npm-1.0.6/html/npm-large.png | Bin 483909 -> 0 bytes vendor/npm/npm-1.0.6/html/npm.png | Bin 1164 -> 0 bytes vendor/npm/npm-1.0.6/lib/adduser.js | 50 - vendor/npm/npm-1.0.6/lib/bin.js | 18 - vendor/npm/npm-1.0.6/lib/build.js | 162 - vendor/npm/npm-1.0.6/lib/cache.js | 565 --- vendor/npm/npm-1.0.6/lib/completion.js | 220 - vendor/npm/npm-1.0.6/lib/config.js | 258 -- vendor/npm/npm-1.0.6/lib/deprecate.js | 49 - vendor/npm/npm-1.0.6/lib/docs.js | 47 - vendor/npm/npm-1.0.6/lib/edit.js | 28 - vendor/npm/npm-1.0.6/lib/explore.js | 34 - vendor/npm/npm-1.0.6/lib/faq.js | 8 - vendor/npm/npm-1.0.6/lib/get.js | 12 - vendor/npm/npm-1.0.6/lib/help.js | 98 - vendor/npm/npm-1.0.6/lib/init.js | 220 - vendor/npm/npm-1.0.6/lib/install.js | 495 --- vendor/npm/npm-1.0.6/lib/link.js | 140 - vendor/npm/npm-1.0.6/lib/ls.js | 167 - vendor/npm/npm-1.0.6/lib/outdated.js | 147 - vendor/npm/npm-1.0.6/lib/owner.js | 181 - vendor/npm/npm-1.0.6/lib/prefix.js | 8 - vendor/npm/npm-1.0.6/lib/prune.js | 40 - vendor/npm/npm-1.0.6/lib/publish.js | 142 - vendor/npm/npm-1.0.6/lib/rebuild.js | 69 - vendor/npm/npm-1.0.6/lib/restart.js | 1 - vendor/npm/npm-1.0.6/lib/root.js | 17 - vendor/npm/npm-1.0.6/lib/run-script.js | 96 - vendor/npm/npm-1.0.6/lib/search.js | 203 - vendor/npm/npm-1.0.6/lib/set.js | 12 - vendor/npm/npm-1.0.6/lib/start.js | 1 - vendor/npm/npm-1.0.6/lib/stop.js | 1 - vendor/npm/npm-1.0.6/lib/tag.js | 17 - vendor/npm/npm-1.0.6/lib/test.js | 1 - vendor/npm/npm-1.0.6/lib/unbuild.js | 77 - vendor/npm/npm-1.0.6/lib/uninstall.js | 58 - vendor/npm/npm-1.0.6/lib/unpublish.js | 61 - vendor/npm/npm-1.0.6/lib/update.js | 34 - vendor/npm/npm-1.0.6/lib/utils/async-map.js | 59 - vendor/npm/npm-1.0.6/lib/utils/base64.js | 3 - vendor/npm/npm-1.0.6/lib/utils/chain.js | 56 - vendor/npm/npm-1.0.6/lib/utils/completion.sh | 43 - .../lib/utils/completion/file-completion.js | 29 - .../lib/utils/completion/installed-deep.js | 46 - .../lib/utils/completion/installed-shallow.js | 79 - .../lib/utils/completion/remote-packages.js | 57 - .../npm-1.0.6/lib/utils/completion/users.js | 22 - vendor/npm/npm-1.0.6/lib/utils/config-defs.js | 173 - .../npm/npm-1.0.6/lib/utils/error-handler.js | 191 - vendor/npm/npm-1.0.6/lib/utils/exec.js | 105 - vendor/npm/npm-1.0.6/lib/utils/fetch.js | 151 - vendor/npm/npm-1.0.6/lib/utils/find-prefix.js | 41 - vendor/npm/npm-1.0.6/lib/utils/find.js | 53 - vendor/npm/npm-1.0.6/lib/utils/get.js | 6 - vendor/npm/npm-1.0.6/lib/utils/graceful-fs.js | 34 - vendor/npm/npm-1.0.6/lib/utils/ini-parser.js | 64 - vendor/npm/npm-1.0.6/lib/utils/ini.js | 311 -- vendor/npm/npm-1.0.6/lib/utils/lifecycle.js | 238 - vendor/npm/npm-1.0.6/lib/utils/link.js | 30 - .../lib/utils/load-package-defaults.js | 75 - vendor/npm/npm-1.0.6/lib/utils/log.js | 172 - vendor/npm/npm-1.0.6/lib/utils/minimatch.js | 240 - vendor/npm/npm-1.0.6/lib/utils/mkdir-p.js | 121 - .../lib/utils/npm-registry-client/adduser.js | 80 - .../lib/utils/npm-registry-client/get.js | 102 - .../lib/utils/npm-registry-client/index.js | 16 - .../lib/utils/npm-registry-client/publish.js | 161 - .../lib/utils/npm-registry-client/request.js | 290 -- .../lib/utils/npm-registry-client/tag.js | 8 - .../utils/npm-registry-client/unpublish.js | 98 - vendor/npm/npm-1.0.6/lib/utils/output.js | 91 - .../npm/npm-1.0.6/lib/utils/promise-chain.js | 39 - vendor/npm/npm-1.0.6/lib/utils/prompt.js | 70 - vendor/npm/npm-1.0.6/lib/utils/proto-list.js | 92 - vendor/npm/npm-1.0.6/lib/utils/proxyify.js | 54 - .../npm/npm-1.0.6/lib/utils/read-installed.js | 282 -- vendor/npm/npm-1.0.6/lib/utils/read-json.js | 397 -- vendor/npm/npm-1.0.6/lib/utils/relativize.js | 63 - vendor/npm/npm-1.0.6/lib/utils/rm-rf.js | 100 - vendor/npm/npm-1.0.6/lib/utils/set.js | 25 - vendor/npm/npm-1.0.6/lib/utils/sha.js | 51 - vendor/npm/npm-1.0.6/lib/utils/sys.js | 2 - vendor/npm/npm-1.0.6/lib/utils/tar.js | 530 --- vendor/npm/npm-1.0.6/lib/utils/uid-number.js | 41 - vendor/npm/npm-1.0.6/lib/utils/which.js | 43 - vendor/npm/npm-1.0.6/lib/version.js | 60 - vendor/npm/npm-1.0.6/lib/view.js | 217 - vendor/npm/npm-1.0.6/lib/whoami.js | 13 - vendor/npm/npm-1.0.6/lib/xmas.js | 52 - vendor/npm/npm-1.0.6/man1/adduser.1 | 40 - vendor/npm/npm-1.0.6/man1/author.1 | 51 - vendor/npm/npm-1.0.6/man1/bin.1 | 17 - vendor/npm/npm-1.0.6/man1/build.1 | 43 - vendor/npm/npm-1.0.6/man1/cache.1 | 76 - vendor/npm/npm-1.0.6/man1/changelog.1 | 78 - vendor/npm/npm-1.0.6/man1/coding-style.1 | 255 -- vendor/npm/npm-1.0.6/man1/completion.1 | 27 - vendor/npm/npm-1.0.6/man1/config.1 | 882 ---- vendor/npm/npm-1.0.6/man1/deprecate.1 | 34 - vendor/npm/npm-1.0.6/man1/developers.1 | 247 -- vendor/npm/npm-1.0.6/man1/docs.1 | 19 - vendor/npm/npm-1.0.6/man1/edit.1 | 27 - vendor/npm/npm-1.0.6/man1/explore.1 | 25 - vendor/npm/npm-1.0.6/man1/faq.1 | 224 - vendor/npm/npm-1.0.6/man1/find.1 | 58 - vendor/npm/npm-1.0.6/man1/folders.1 | 207 - vendor/npm/npm-1.0.6/man1/get.1 | 882 ---- vendor/npm/npm-1.0.6/man1/global.1 | 207 - vendor/npm/npm-1.0.6/man1/init.1 | 32 - vendor/npm/npm-1.0.6/man1/install.1 | 160 - vendor/npm/npm-1.0.6/man1/json.1 | 578 --- vendor/npm/npm-1.0.6/man1/link.1 | 85 - vendor/npm/npm-1.0.6/man1/list.1 | 58 - vendor/npm/npm-1.0.6/man1/ln.1 | 85 - vendor/npm/npm-1.0.6/man1/ls.1 | 58 - vendor/npm/npm-1.0.6/man1/npm.1 | 170 - vendor/npm/npm-1.0.6/man1/outdated.1 | 18 - vendor/npm/npm-1.0.6/man1/owner.1 | 51 - vendor/npm/npm-1.0.6/man1/prefix.1 | 17 - vendor/npm/npm-1.0.6/man1/prune.1 | 23 - vendor/npm/npm-1.0.6/man1/publish.1 | 47 - vendor/npm/npm-1.0.6/man1/rebuild.1 | 28 - vendor/npm/npm-1.0.6/man1/registry.1 | 88 - vendor/npm/npm-1.0.6/man1/removing-npm.1 | 63 - vendor/npm/npm-1.0.6/man1/restart.1 | 33 - vendor/npm/npm-1.0.6/man1/rm.1 | 18 - vendor/npm/npm-1.0.6/man1/root.1 | 17 - vendor/npm/npm-1.0.6/man1/run-script.1 | 41 - vendor/npm/npm-1.0.6/man1/scripts.1 | 232 - vendor/npm/npm-1.0.6/man1/search.1 | 17 - vendor/npm/npm-1.0.6/man1/set.1 | 882 ---- vendor/npm/npm-1.0.6/man1/start.1 | 17 - vendor/npm/npm-1.0.6/man1/stop.1 | 17 - vendor/npm/npm-1.0.6/man1/tag.1 | 17 - vendor/npm/npm-1.0.6/man1/test.1 | 21 - vendor/npm/npm-1.0.6/man1/uninstall.1 | 18 - vendor/npm/npm-1.0.6/man1/unpublish.1 | 22 - vendor/npm/npm-1.0.6/man1/update.1 | 21 - vendor/npm/npm-1.0.6/man1/version.1 | 22 - vendor/npm/npm-1.0.6/man1/view.1 | 159 - vendor/npm/npm-1.0.6/man1/whoami.1 | 17 - .../npm-1.0.6/node_modules/abbrev/README.md | 23 - .../node_modules/abbrev/lib/abbrev.js | 106 - .../node_modules/abbrev/package.json | 8 - .../npm-1.0.6/node_modules/nopt/.gitignore | 1 - .../npm/npm-1.0.6/node_modules/nopt/README.md | 182 - .../node_modules/nopt/examples/my-program.js | 30 - .../npm-1.0.6/node_modules/nopt/lib/nopt.js | 395 -- .../npm-1.0.6/node_modules/nopt/package.json | 8 - .../npm-1.0.6/node_modules/semver/README.md | 118 - .../npm-1.0.6/node_modules/semver/bin/semver | 71 - .../node_modules/semver/package.json | 8 - .../npm-1.0.6/node_modules/semver/semver.js | 464 -- vendor/npm/npm-1.0.6/npm.js | 249 -- vendor/npm/npm-1.0.6/package.json | 40 - vendor/npm/npm-1.0.6/scripts/clean-old.sh | 130 - .../npm/npm-1.0.6/scripts/install-message.sh | 15 - vendor/npm/npm-1.0.6/scripts/install.sh | 156 - vendor/npm/npm-1.0.6/test/common.js | 7 - .../test/disabled/bundlerecurs/package.json | 4 - .../test/disabled/failer/package.json | 5 - .../npm-1.0.6/test/disabled/fast/package.json | 12 - .../test/disabled/package-config/package.json | 4 - .../test/disabled/package-config/test.js | 17 - .../npm-1.0.6/test/disabled/slow/package.json | 12 - .../test/disabled/startstop/package.json | 3 - .../test/packages/npm-test-blerg/package.json | 4 - .../test/packages/npm-test-blerg/test.js | 5 - .../packages/npm-test-env-reader/package.json | 18 - .../test/packages/npm-test-env-reader/test.sh | 3 - .../packages/npm-test-private/package.json | 4 - .../npm-test-test-package/package.json | 5 - .../packages/npm-test-url-dep/package.json | 6 - vendor/npm/npm-1.0.6/test/run.sh | 131 - vendor/npm/npm-1.0.6/test/update-test.sh | 59 - vendor/npm/npm-1.0.8/.gitignore | 10 - vendor/npm/npm-1.0.8/.gitmodules | 12 - vendor/npm/npm-1.0.8/AUTHORS | 38 - vendor/npm/npm-1.0.8/CHANGES | 1 - vendor/npm/npm-1.0.8/LICENSE | 35 - vendor/npm/npm-1.0.8/Makefile | 64 - vendor/npm/npm-1.0.8/README.md | 172 - vendor/npm/npm-1.0.8/bin/npm-get-uid-gid.js | 16 - vendor/npm/npm-1.0.8/bin/npm.js | 58 - vendor/npm/npm-1.0.8/bin/read-package-json.js | 22 - vendor/npm/npm-1.0.8/cli.js | 2 - vendor/npm/npm-1.0.8/configure | 34 - vendor/npm/npm-1.0.8/doc/adduser.md | 29 - vendor/npm/npm-1.0.8/doc/author.md | 1 - vendor/npm/npm-1.0.8/doc/bin.md | 10 - vendor/npm/npm-1.0.8/doc/build.md | 22 - vendor/npm/npm-1.0.8/doc/bundle.md | 10 - vendor/npm/npm-1.0.8/doc/cache.md | 60 - vendor/npm/npm-1.0.8/doc/changelog.md | 31 - vendor/npm/npm-1.0.8/doc/coding-style.md | 184 - vendor/npm/npm-1.0.8/doc/completion.md | 21 - vendor/npm/npm-1.0.8/doc/config.md | 536 --- vendor/npm/npm-1.0.8/doc/deprecate.md | 19 - vendor/npm/npm-1.0.8/doc/developers.md | 167 - vendor/npm/npm-1.0.8/doc/docs.md | 12 - vendor/npm/npm-1.0.8/doc/edit.md | 18 - vendor/npm/npm-1.0.8/doc/explore.md | 16 - vendor/npm/npm-1.0.8/doc/faq.md | 174 - vendor/npm/npm-1.0.8/doc/find.md | 1 - vendor/npm/npm-1.0.8/doc/folders.md | 175 - vendor/npm/npm-1.0.8/doc/get.md | 1 - vendor/npm/npm-1.0.8/doc/global.md | 1 - vendor/npm/npm-1.0.8/doc/help-search.md | 29 - vendor/npm/npm-1.0.8/doc/init.md | 23 - vendor/npm/npm-1.0.8/doc/install.md | 129 - vendor/npm/npm-1.0.8/doc/json.md | 448 -- vendor/npm/npm-1.0.8/doc/link.md | 49 - vendor/npm/npm-1.0.8/doc/list.md | 45 - vendor/npm/npm-1.0.8/doc/ln.md | 1 - vendor/npm/npm-1.0.8/doc/ls.md | 1 - vendor/npm/npm-1.0.8/doc/npm.md | 137 - vendor/npm/npm-1.0.8/doc/outdated.md | 11 - vendor/npm/npm-1.0.8/doc/owner.md | 29 - vendor/npm/npm-1.0.8/doc/prefix.md | 10 - vendor/npm/npm-1.0.8/doc/prune.md | 15 - vendor/npm/npm-1.0.8/doc/publish.md | 28 - vendor/npm/npm-1.0.8/doc/rebuild.md | 19 - vendor/npm/npm-1.0.8/doc/registry.md | 87 - vendor/npm/npm-1.0.8/doc/removing-npm.md | 41 - vendor/npm/npm-1.0.8/doc/restart.md | 19 - vendor/npm/npm-1.0.8/doc/rm.md | 1 - vendor/npm/npm-1.0.8/doc/root.md | 10 - vendor/npm/npm-1.0.8/doc/run-script.md | 21 - vendor/npm/npm-1.0.8/doc/scripts.md | 169 - vendor/npm/npm-1.0.8/doc/search.md | 10 - vendor/npm/npm-1.0.8/doc/set.md | 1 - vendor/npm/npm-1.0.8/doc/start.md | 10 - vendor/npm/npm-1.0.8/doc/stop.md | 10 - vendor/npm/npm-1.0.8/doc/tag.md | 11 - vendor/npm/npm-1.0.8/doc/test.md | 13 - vendor/npm/npm-1.0.8/doc/uninstall.md | 11 - vendor/npm/npm-1.0.8/doc/unpublish.md | 14 - vendor/npm/npm-1.0.8/doc/update.md | 13 - vendor/npm/npm-1.0.8/doc/version.md | 14 - vendor/npm/npm-1.0.8/doc/view.md | 78 - vendor/npm/npm-1.0.8/doc/whoami.md | 10 - vendor/npm/npm-1.0.8/html/favicon.ico | Bin 7094 -> 0 bytes vendor/npm/npm-1.0.8/html/index.html | 85 - vendor/npm/npm-1.0.8/html/npm-16.png | Bin 145 -> 0 bytes vendor/npm/npm-1.0.8/html/npm-256-square.png | Bin 3290 -> 0 bytes vendor/npm/npm-1.0.8/html/npm-256w.png | Bin 3169 -> 0 bytes vendor/npm/npm-1.0.8/html/npm-64-square.png | Bin 2908 -> 0 bytes vendor/npm/npm-1.0.8/html/npm-fin.png | Bin 47789 -> 0 bytes vendor/npm/npm-1.0.8/html/npm-large.png | Bin 483909 -> 0 bytes vendor/npm/npm-1.0.8/html/npm.png | Bin 1164 -> 0 bytes vendor/npm/npm-1.0.8/lib/adduser.js | 50 - vendor/npm/npm-1.0.8/lib/bin.js | 18 - vendor/npm/npm-1.0.8/lib/build.js | 163 - vendor/npm/npm-1.0.8/lib/cache.js | 598 --- vendor/npm/npm-1.0.8/lib/completion.js | 222 - vendor/npm/npm-1.0.8/lib/config.js | 258 -- vendor/npm/npm-1.0.8/lib/deprecate.js | 49 - vendor/npm/npm-1.0.8/lib/docs.js | 47 - vendor/npm/npm-1.0.8/lib/edit.js | 31 - vendor/npm/npm-1.0.8/lib/explore.js | 34 - vendor/npm/npm-1.0.8/lib/faq.js | 8 - vendor/npm/npm-1.0.8/lib/get.js | 12 - vendor/npm/npm-1.0.8/lib/help-search.js | 175 - vendor/npm/npm-1.0.8/lib/help.js | 99 - vendor/npm/npm-1.0.8/lib/init.js | 220 - vendor/npm/npm-1.0.8/lib/install.js | 608 --- vendor/npm/npm-1.0.8/lib/link.js | 142 - vendor/npm/npm-1.0.8/lib/ls.js | 170 - vendor/npm/npm-1.0.8/lib/outdated.js | 147 - vendor/npm/npm-1.0.8/lib/owner.js | 181 - vendor/npm/npm-1.0.8/lib/prefix.js | 8 - vendor/npm/npm-1.0.8/lib/prune.js | 40 - vendor/npm/npm-1.0.8/lib/publish.js | 142 - vendor/npm/npm-1.0.8/lib/rebuild.js | 69 - vendor/npm/npm-1.0.8/lib/restart.js | 1 - vendor/npm/npm-1.0.8/lib/root.js | 17 - vendor/npm/npm-1.0.8/lib/run-script.js | 100 - vendor/npm/npm-1.0.8/lib/search.js | 203 - vendor/npm/npm-1.0.8/lib/set.js | 12 - vendor/npm/npm-1.0.8/lib/start.js | 1 - vendor/npm/npm-1.0.8/lib/stop.js | 1 - vendor/npm/npm-1.0.8/lib/tag.js | 17 - vendor/npm/npm-1.0.8/lib/test.js | 1 - vendor/npm/npm-1.0.8/lib/unbuild.js | 77 - vendor/npm/npm-1.0.8/lib/uninstall.js | 59 - vendor/npm/npm-1.0.8/lib/unpublish.js | 61 - vendor/npm/npm-1.0.8/lib/update.js | 34 - vendor/npm/npm-1.0.8/lib/utils/async-map.js | 59 - vendor/npm/npm-1.0.8/lib/utils/base64.js | 3 - vendor/npm/npm-1.0.8/lib/utils/chain.js | 56 - vendor/npm/npm-1.0.8/lib/utils/completion.sh | 43 - .../lib/utils/completion/file-completion.js | 29 - .../lib/utils/completion/installed-deep.js | 46 - .../lib/utils/completion/installed-shallow.js | 79 - .../lib/utils/completion/remote-packages.js | 57 - .../npm-1.0.8/lib/utils/completion/users.js | 22 - vendor/npm/npm-1.0.8/lib/utils/config-defs.js | 182 - .../npm/npm-1.0.8/lib/utils/error-handler.js | 192 - vendor/npm/npm-1.0.8/lib/utils/excludes.js | 115 - vendor/npm/npm-1.0.8/lib/utils/exec.js | 105 - vendor/npm/npm-1.0.8/lib/utils/fetch.js | 151 - vendor/npm/npm-1.0.8/lib/utils/find-prefix.js | 41 - vendor/npm/npm-1.0.8/lib/utils/find.js | 53 - vendor/npm/npm-1.0.8/lib/utils/get.js | 6 - vendor/npm/npm-1.0.8/lib/utils/graceful-fs.js | 34 - vendor/npm/npm-1.0.8/lib/utils/ini-parser.js | 64 - vendor/npm/npm-1.0.8/lib/utils/ini.js | 313 -- vendor/npm/npm-1.0.8/lib/utils/lifecycle.js | 242 -- vendor/npm/npm-1.0.8/lib/utils/link.js | 30 - .../lib/utils/load-package-defaults.js | 75 - vendor/npm/npm-1.0.8/lib/utils/log.js | 172 - vendor/npm/npm-1.0.8/lib/utils/minimatch.js | 240 - vendor/npm/npm-1.0.8/lib/utils/mkdir-p.js | 121 - .../lib/utils/npm-registry-client/adduser.js | 80 - .../lib/utils/npm-registry-client/get.js | 102 - .../lib/utils/npm-registry-client/index.js | 16 - .../lib/utils/npm-registry-client/publish.js | 161 - .../lib/utils/npm-registry-client/request.js | 290 -- .../lib/utils/npm-registry-client/tag.js | 8 - .../utils/npm-registry-client/unpublish.js | 98 - vendor/npm/npm-1.0.8/lib/utils/output.js | 91 - .../npm/npm-1.0.8/lib/utils/promise-chain.js | 39 - vendor/npm/npm-1.0.8/lib/utils/prompt.js | 70 - vendor/npm/npm-1.0.8/lib/utils/proto-list.js | 92 - vendor/npm/npm-1.0.8/lib/utils/proxyify.js | 54 - .../npm/npm-1.0.8/lib/utils/read-installed.js | 288 -- vendor/npm/npm-1.0.8/lib/utils/read-json.js | 388 -- vendor/npm/npm-1.0.8/lib/utils/relativize.js | 63 - vendor/npm/npm-1.0.8/lib/utils/rm-rf.js | 100 - vendor/npm/npm-1.0.8/lib/utils/set.js | 25 - vendor/npm/npm-1.0.8/lib/utils/sha.js | 51 - vendor/npm/npm-1.0.8/lib/utils/sys.js | 2 - vendor/npm/npm-1.0.8/lib/utils/tar.js | 538 --- vendor/npm/npm-1.0.8/lib/utils/uid-number.js | 41 - vendor/npm/npm-1.0.8/lib/utils/which.js | 43 - vendor/npm/npm-1.0.8/lib/version.js | 62 - vendor/npm/npm-1.0.8/lib/view.js | 217 - vendor/npm/npm-1.0.8/lib/whoami.js | 13 - vendor/npm/npm-1.0.8/lib/xmas.js | 52 - vendor/npm/npm-1.0.8/man1/adduser.1 | 40 - vendor/npm/npm-1.0.8/man1/author.1 | 51 - vendor/npm/npm-1.0.8/man1/bin.1 | 17 - vendor/npm/npm-1.0.8/man1/build.1 | 43 - vendor/npm/npm-1.0.8/man1/bundle.1 | 15 - vendor/npm/npm-1.0.8/man1/cache.1 | 76 - vendor/npm/npm-1.0.8/man1/changelog.1 | 78 - vendor/npm/npm-1.0.8/man1/coding-style.1 | 255 -- vendor/npm/npm-1.0.8/man1/completion.1 | 30 - vendor/npm/npm-1.0.8/man1/config.1 | 959 ---- vendor/npm/npm-1.0.8/man1/deprecate.1 | 34 - vendor/npm/npm-1.0.8/man1/developers.1 | 247 -- vendor/npm/npm-1.0.8/man1/docs.1 | 19 - vendor/npm/npm-1.0.8/man1/edit.1 | 27 - vendor/npm/npm-1.0.8/man1/explore.1 | 25 - vendor/npm/npm-1.0.8/man1/faq.1 | 224 - vendor/npm/npm-1.0.8/man1/find.1 | 73 - vendor/npm/npm-1.0.8/man1/folders.1 | 207 - vendor/npm/npm-1.0.8/man1/get.1 | 959 ---- vendor/npm/npm-1.0.8/man1/global.1 | 207 - vendor/npm/npm-1.0.8/man1/help-search.1 | 40 - vendor/npm/npm-1.0.8/man1/init.1 | 32 - vendor/npm/npm-1.0.8/man1/install.1 | 210 - vendor/npm/npm-1.0.8/man1/json.1 | 626 --- vendor/npm/npm-1.0.8/man1/link.1 | 85 - vendor/npm/npm-1.0.8/man1/list.1 | 73 - vendor/npm/npm-1.0.8/man1/ln.1 | 85 - vendor/npm/npm-1.0.8/man1/ls.1 | 73 - vendor/npm/npm-1.0.8/man1/npm.1 | 195 - vendor/npm/npm-1.0.8/man1/outdated.1 | 18 - vendor/npm/npm-1.0.8/man1/owner.1 | 51 - vendor/npm/npm-1.0.8/man1/prefix.1 | 17 - vendor/npm/npm-1.0.8/man1/prune.1 | 23 - vendor/npm/npm-1.0.8/man1/publish.1 | 47 - vendor/npm/npm-1.0.8/man1/rebuild.1 | 28 - vendor/npm/npm-1.0.8/man1/registry.1 | 96 - vendor/npm/npm-1.0.8/man1/removing-npm.1 | 66 - vendor/npm/npm-1.0.8/man1/restart.1 | 33 - vendor/npm/npm-1.0.8/man1/rm.1 | 18 - vendor/npm/npm-1.0.8/man1/root.1 | 17 - vendor/npm/npm-1.0.8/man1/run-script.1 | 41 - vendor/npm/npm-1.0.8/man1/scripts.1 | 251 -- vendor/npm/npm-1.0.8/man1/search.1 | 17 - vendor/npm/npm-1.0.8/man1/set.1 | 959 ---- vendor/npm/npm-1.0.8/man1/start.1 | 17 - vendor/npm/npm-1.0.8/man1/stop.1 | 17 - vendor/npm/npm-1.0.8/man1/tag.1 | 17 - vendor/npm/npm-1.0.8/man1/test.1 | 21 - vendor/npm/npm-1.0.8/man1/uninstall.1 | 18 - vendor/npm/npm-1.0.8/man1/unpublish.1 | 22 - vendor/npm/npm-1.0.8/man1/update.1 | 21 - vendor/npm/npm-1.0.8/man1/version.1 | 22 - vendor/npm/npm-1.0.8/man1/view.1 | 159 - vendor/npm/npm-1.0.8/man1/whoami.1 | 17 - .../npm-1.0.8/node_modules/abbrev/README.md | 23 - .../node_modules/abbrev/lib/abbrev.js | 106 - .../node_modules/abbrev/package.json | 8 - .../node_modules/node-uuid/LICENSE.md | 3 - .../node_modules/node-uuid/README.md | 100 - .../node_modules/node-uuid/package.json | 12 - .../node-uuid/test/benchmark-native.c | 34 - .../node_modules/node-uuid/test/benchmark.js | 27 - .../node_modules/node-uuid/test/test.html | 14 - .../node_modules/node-uuid/test/test.js | 83 - .../npm-1.0.8/node_modules/node-uuid/uuid.js | 80 - .../npm-1.0.8/node_modules/nopt/.gitignore | 1 - .../npm/npm-1.0.8/node_modules/nopt/README.md | 182 - .../node_modules/nopt/examples/my-program.js | 30 - .../npm-1.0.8/node_modules/nopt/lib/nopt.js | 395 -- .../npm-1.0.8/node_modules/nopt/package.json | 8 - .../npm/npm-1.0.8/node_modules/semver/LICENSE | 23 - .../npm-1.0.8/node_modules/semver/README.md | 120 - .../npm-1.0.8/node_modules/semver/bin/semver | 71 - .../node_modules/semver/package.json | 11 - .../npm-1.0.8/node_modules/semver/semver.js | 518 --- vendor/npm/npm-1.0.8/npm.js | 251 -- vendor/npm/npm-1.0.8/package.json | 40 - vendor/npm/npm-1.0.8/scripts/clean-old.sh | 144 - .../npm/npm-1.0.8/scripts/install-message.sh | 15 - vendor/npm/npm-1.0.8/scripts/install.sh | 156 - vendor/npm/npm-1.0.8/test/common.js | 7 - .../test/disabled/bundlerecurs/package.json | 4 - .../test/disabled/failer/package.json | 5 - .../npm-1.0.8/test/disabled/fast/package.json | 12 - .../test/disabled/package-config/package.json | 4 - .../test/disabled/package-config/test.js | 17 - .../npm-1.0.8/test/disabled/slow/package.json | 12 - .../test/disabled/startstop/package.json | 3 - .../test/packages/npm-test-blerg/package.json | 4 - .../test/packages/npm-test-blerg/test.js | 5 - .../packages/npm-test-env-reader/package.json | 18 - .../test/packages/npm-test-env-reader/test.sh | 3 - .../packages/npm-test-private/package.json | 4 - .../npm-test-test-package/package.json | 5 - .../packages/npm-test-url-dep/package.json | 6 - vendor/npm/npm-1.0.8/test/run.sh | 133 - vendor/npm/npm-1.0.8/test/update-test.sh | 59 - vendor/scons/scons-1.2.0/scons | 1 - vendor/scons/scons-1.2.0/scons-LICENSE | 25 - vendor/scons/scons-1.2.0/scons-README | 204 - .../scons-local-1.2.0/SCons/Action.py | 1147 ----- .../scons-local-1.2.0/SCons/Action.pyc | Bin 39671 -> 0 bytes .../scons-local-1.2.0/SCons/Builder.py | 844 ---- .../scons-local-1.2.0/SCons/Builder.pyc | Bin 31488 -> 0 bytes .../scons-local-1.2.0/SCons/CacheDir.py | 217 - .../scons-local-1.2.0/SCons/CacheDir.pyc | Bin 7187 -> 0 bytes .../scons-local-1.2.0/SCons/Conftest.py | 778 ---- .../scons-local-1.2.0/SCons/Conftest.pyc | Bin 18263 -> 0 bytes .../scons-local-1.2.0/SCons/Debug.py | 216 - .../scons-local-1.2.0/SCons/Debug.pyc | Bin 7605 -> 0 bytes .../scons-local-1.2.0/SCons/Defaults.py | 463 -- .../scons-local-1.2.0/SCons/Defaults.pyc | Bin 16152 -> 0 bytes .../scons-local-1.2.0/SCons/Environment.py | 2300 ---------- .../scons-local-1.2.0/SCons/Environment.pyc | Bin 80691 -> 0 bytes .../scons-local-1.2.0/SCons/Errors.py | 198 - .../scons-local-1.2.0/SCons/Errors.pyc | Bin 6338 -> 0 bytes .../scons-local-1.2.0/SCons/Executor.py | 393 -- .../scons-local-1.2.0/SCons/Executor.pyc | Bin 16088 -> 0 bytes .../scons-local-1.2.0/SCons/Job.py | 429 -- .../scons-local-1.2.0/SCons/Job.pyc | Bin 13951 -> 0 bytes .../scons-local-1.2.0/SCons/Memoize.py | 286 -- .../scons-local-1.2.0/SCons/Memoize.pyc | Bin 12375 -> 0 bytes .../scons-local-1.2.0/SCons/Node/Alias.py | 147 - .../scons-local-1.2.0/SCons/Node/Alias.pyc | Bin 5725 -> 0 bytes .../scons-local-1.2.0/SCons/Node/FS.py | 3075 ------------- .../scons-local-1.2.0/SCons/Node/FS.pyc | Bin 104244 -> 0 bytes .../scons-local-1.2.0/SCons/Node/Python.py | 119 - .../scons-local-1.2.0/SCons/Node/Python.pyc | Bin 4901 -> 0 bytes .../scons-local-1.2.0/SCons/Node/__init__.py | 1330 ------ .../scons-local-1.2.0/SCons/Node/__init__.pyc | Bin 48811 -> 0 bytes .../SCons/Options/BoolOption.py | 44 - .../SCons/Options/BoolOption.pyc | Bin 1127 -> 0 bytes .../SCons/Options/EnumOption.py | 44 - .../SCons/Options/EnumOption.pyc | Bin 1127 -> 0 bytes .../SCons/Options/ListOption.py | 44 - .../SCons/Options/ListOption.pyc | Bin 1127 -> 0 bytes .../SCons/Options/PackageOption.py | 44 - .../SCons/Options/PackageOption.pyc | Bin 1148 -> 0 bytes .../SCons/Options/PathOption.py | 70 - .../SCons/Options/PathOption.pyc | Bin 2891 -> 0 bytes .../SCons/Options/__init__.py | 68 - .../SCons/Options/__init__.pyc | Bin 2372 -> 0 bytes .../scons-local-1.2.0/SCons/PathList.py | 226 - .../scons-local-1.2.0/SCons/PathList.pyc | Bin 8007 -> 0 bytes .../SCons/Platform/__init__.py | 216 - .../SCons/Platform/__init__.pyc | Bin 7086 -> 0 bytes .../scons-local-1.2.0/SCons/Platform/aix.py | 65 - .../SCons/Platform/cygwin.py | 49 - .../SCons/Platform/darwin.py | 40 - .../SCons/Platform/darwin.pyc | Bin 866 -> 0 bytes .../scons-local-1.2.0/SCons/Platform/hpux.py | 40 - .../scons-local-1.2.0/SCons/Platform/irix.py | 38 - .../scons-local-1.2.0/SCons/Platform/os2.py | 49 - .../scons-local-1.2.0/SCons/Platform/posix.py | 258 -- .../SCons/Platform/posix.pyc | Bin 7562 -> 0 bytes .../scons-local-1.2.0/SCons/Platform/sunos.py | 44 - .../scons-local-1.2.0/SCons/Platform/win32.py | 324 -- .../SCons/Platform/win32.pyc | Bin 8193 -> 0 bytes .../scons-local-1.2.0/SCons/SConf.py | 1012 ----- .../scons-local-1.2.0/SCons/SConf.pyc | Bin 37145 -> 0 bytes .../scons-local-1.2.0/SCons/SConsign.py | 375 -- .../scons-local-1.2.0/SCons/SConsign.pyc | Bin 11423 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/C.py | 126 - .../scons-local-1.2.0/SCons/Scanner/C.pyc | Bin 5142 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/D.py | 68 - .../scons-local-1.2.0/SCons/Scanner/D.pyc | Bin 2235 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/Dir.py | 105 - .../scons-local-1.2.0/SCons/Scanner/Dir.pyc | Bin 3482 -> 0 bytes .../SCons/Scanner/Fortran.py | 314 -- .../SCons/Scanner/Fortran.pyc | Bin 4826 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/IDL.py | 42 - .../scons-local-1.2.0/SCons/Scanner/IDL.pyc | Bin 879 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/LaTeX.py | 334 -- .../scons-local-1.2.0/SCons/Scanner/LaTeX.pyc | Bin 12261 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/Prog.py | 97 - .../scons-local-1.2.0/SCons/Scanner/Prog.pyc | Bin 2256 -> 0 bytes .../scons-local-1.2.0/SCons/Scanner/RC.py | 49 - .../SCons/Scanner/__init__.py | 406 -- .../SCons/Scanner/__init__.pyc | Bin 16655 -> 0 bytes .../SCons/Script/Interactive.py | 376 -- .../SCons/Script/Interactive.pyc | Bin 9461 -> 0 bytes .../scons-local-1.2.0/SCons/Script/Main.py | 1321 ------ .../scons-local-1.2.0/SCons/Script/Main.pyc | Bin 42001 -> 0 bytes .../SCons/Script/SConsOptions.py | 940 ---- .../SCons/Script/SConsOptions.pyc | Bin 27883 -> 0 bytes .../SCons/Script/SConscript.py | 632 --- .../SCons/Script/SConscript.pyc | Bin 19341 -> 0 bytes .../SCons/Script/__init__.py | 408 -- .../SCons/Script/__init__.pyc | Bin 8413 -> 0 bytes .../scons-local-1.2.0/SCons/Sig.py | 57 - .../scons-local-1.2.0/SCons/Subst.py | 884 ---- .../scons-local-1.2.0/SCons/Subst.pyc | Bin 29100 -> 0 bytes .../scons-local-1.2.0/SCons/Taskmaster.py | 985 ----- .../scons-local-1.2.0/SCons/Taskmaster.pyc | Bin 31859 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/386asm.py | 55 - .../scons-local-1.2.0/SCons/Tool/BitKeeper.py | 59 - .../SCons/Tool/BitKeeper.pyc | Bin 1714 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/CVS.py | 67 - .../scons-local-1.2.0/SCons/Tool/CVS.pyc | Bin 1814 -> 0 bytes .../SCons/Tool/FortranCommon.py | 241 -- .../SCons/Tool/FortranCommon.pyc | Bin 9015 -> 0 bytes .../SCons/Tool/JavaCommon.py | 317 -- .../SCons/Tool/JavaCommon.pyc | Bin 11669 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/Perforce.py | 98 - .../scons-local-1.2.0/SCons/Tool/Perforce.pyc | Bin 2497 -> 0 bytes .../SCons/Tool/PharLapCommon.py | 132 - .../SCons/Tool/PharLapCommon.pyc | Bin 4338 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/RCS.py | 58 - .../scons-local-1.2.0/SCons/Tool/RCS.pyc | Bin 1570 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/SCCS.py | 58 - .../scons-local-1.2.0/SCons/Tool/SCCS.pyc | Bin 1598 -> 0 bytes .../SCons/Tool/Subversion.py | 65 - .../scons-local-1.2.0/SCons/Tool/__init__.py | 667 --- .../scons-local-1.2.0/SCons/Tool/__init__.pyc | Bin 20962 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/aixc++.py | 76 - .../scons-local-1.2.0/SCons/Tool/aixcc.py | 68 - .../scons-local-1.2.0/SCons/Tool/aixf77.py | 74 - .../scons-local-1.2.0/SCons/Tool/aixlink.py | 70 - .../scons-local-1.2.0/SCons/Tool/applelink.py | 65 - .../SCons/Tool/applelink.pyc | Bin 1797 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/ar.py | 57 - .../scons-local-1.2.0/SCons/Tool/ar.pyc | Bin 1473 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/as.py | 72 - .../scons-local-1.2.0/SCons/Tool/as.pyc | Bin 2088 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/bcc32.py | 76 - .../scons-local-1.2.0/SCons/Tool/c++.py | 93 - .../scons-local-1.2.0/SCons/Tool/c++.pyc | Bin 2818 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/cc.py | 108 - .../scons-local-1.2.0/SCons/Tool/cc.pyc | Bin 2859 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/cvf.py | 52 - .../scons-local-1.2.0/SCons/Tool/default.py | 44 - .../scons-local-1.2.0/SCons/Tool/default.pyc | Bin 1031 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/dmd.py | 218 - .../scons-local-1.2.0/SCons/Tool/dmd.pyc | Bin 6278 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/dvi.py | 58 - .../scons-local-1.2.0/SCons/Tool/dvipdf.py | 119 - .../scons-local-1.2.0/SCons/Tool/dvipdf.pyc | Bin 3896 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/dvips.py | 88 - .../scons-local-1.2.0/SCons/Tool/dvips.pyc | Bin 2575 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/f77.py | 56 - .../scons-local-1.2.0/SCons/Tool/f90.py | 56 - .../scons-local-1.2.0/SCons/Tool/f90.pyc | Bin 1350 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/f95.py | 57 - .../scons-local-1.2.0/SCons/Tool/f95.pyc | Bin 1339 -> 0 bytes .../SCons/Tool/filesystem.py | 92 - .../SCons/Tool/filesystem.pyc | Bin 2905 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/fortran.py | 57 - .../scons-local-1.2.0/SCons/Tool/fortran.pyc | Bin 1426 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/g++.py | 84 - .../scons-local-1.2.0/SCons/Tool/g++.pyc | Bin 2073 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/g77.py | 67 - .../scons-local-1.2.0/SCons/Tool/g77.pyc | Bin 1767 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/gas.py | 47 - .../scons-local-1.2.0/SCons/Tool/gcc.py | 74 - .../scons-local-1.2.0/SCons/Tool/gcc.pyc | Bin 1761 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/gfortran.py | 58 - .../scons-local-1.2.0/SCons/Tool/gfortran.pyc | Bin 1542 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/gnulink.py | 57 - .../scons-local-1.2.0/SCons/Tool/gs.py | 75 - .../scons-local-1.2.0/SCons/Tool/gs.pyc | Bin 1780 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/hpc++.py | 79 - .../scons-local-1.2.0/SCons/Tool/hpcc.py | 47 - .../scons-local-1.2.0/SCons/Tool/hplink.py | 71 - .../scons-local-1.2.0/SCons/Tool/icc.py | 53 - .../scons-local-1.2.0/SCons/Tool/icl.py | 46 - .../scons-local-1.2.0/SCons/Tool/ifl.py | 66 - .../scons-local-1.2.0/SCons/Tool/ifort.py | 83 - .../scons-local-1.2.0/SCons/Tool/ilink.py | 53 - .../scons-local-1.2.0/SCons/Tool/ilink32.py | 54 - .../scons-local-1.2.0/SCons/Tool/install.py | 223 - .../scons-local-1.2.0/SCons/Tool/install.pyc | Bin 7141 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/intelc.py | 482 --- .../scons-local-1.2.0/SCons/Tool/jar.py | 104 - .../scons-local-1.2.0/SCons/Tool/jar.pyc | Bin 3137 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/javac.py | 228 - .../scons-local-1.2.0/SCons/Tool/javac.pyc | Bin 7873 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/javah.py | 132 - .../scons-local-1.2.0/SCons/Tool/javah.pyc | Bin 3930 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/latex.py | 76 - .../scons-local-1.2.0/SCons/Tool/latex.pyc | Bin 2249 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/lex.py | 93 - .../scons-local-1.2.0/SCons/Tool/lex.pyc | Bin 2391 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/link.py | 112 - .../scons-local-1.2.0/SCons/Tool/link.pyc | Bin 3501 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/linkloc.py | 105 - .../scons-local-1.2.0/SCons/Tool/m4.py | 57 - .../scons-local-1.2.0/SCons/Tool/m4.pyc | Bin 1400 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/masm.py | 71 - .../scons-local-1.2.0/SCons/Tool/midl.py | 90 - .../scons-local-1.2.0/SCons/Tool/midl.pyc | Bin 2695 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/mingw.py | 151 - .../scons-local-1.2.0/SCons/Tool/mslib.py | 76 - .../scons-local-1.2.0/SCons/Tool/mslink.py | 249 -- .../scons-local-1.2.0/SCons/Tool/msvc.py | 766 ---- .../scons-local-1.2.0/SCons/Tool/msvs.py | 1815 -------- .../scons-local-1.2.0/SCons/Tool/msvs.pyc | Bin 50351 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/mwcc.py | 202 - .../scons-local-1.2.0/SCons/Tool/mwld.py | 101 - .../scons-local-1.2.0/SCons/Tool/nasm.py | 66 - .../SCons/Tool/packaging/__init__.py | 306 -- .../SCons/Tool/packaging/ipk.py | 179 - .../SCons/Tool/packaging/msi.py | 521 --- .../SCons/Tool/packaging/rpm.py | 362 -- .../SCons/Tool/packaging/src_tarbz2.py | 37 - .../SCons/Tool/packaging/src_targz.py | 37 - .../SCons/Tool/packaging/src_zip.py | 37 - .../SCons/Tool/packaging/tarbz2.py | 38 - .../SCons/Tool/packaging/targz.py | 38 - .../SCons/Tool/packaging/zip.py | 38 - .../scons-local-1.2.0/SCons/Tool/pdf.py | 72 - .../scons-local-1.2.0/SCons/Tool/pdf.pyc | Bin 1872 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/pdflatex.py | 75 - .../scons-local-1.2.0/SCons/Tool/pdflatex.pyc | Bin 2212 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/pdftex.py | 99 - .../scons-local-1.2.0/SCons/Tool/pdftex.pyc | Bin 2859 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/qt.py | 330 -- .../scons-local-1.2.0/SCons/Tool/rmic.py | 115 - .../scons-local-1.2.0/SCons/Tool/rmic.pyc | Bin 3190 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/rpcgen.py | 64 - .../scons-local-1.2.0/SCons/Tool/rpcgen.pyc | Bin 2209 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/rpm.py | 126 - .../scons-local-1.2.0/SCons/Tool/rpm.pyc | Bin 3781 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/sgiar.py | 62 - .../scons-local-1.2.0/SCons/Tool/sgic++.py | 52 - .../scons-local-1.2.0/SCons/Tool/sgicc.py | 47 - .../scons-local-1.2.0/SCons/Tool/sgilink.py | 57 - .../scons-local-1.2.0/SCons/Tool/sunar.py | 61 - .../scons-local-1.2.0/SCons/Tool/sunc++.py | 100 - .../scons-local-1.2.0/SCons/Tool/suncc.py | 52 - .../scons-local-1.2.0/SCons/Tool/sunf77.py | 57 - .../scons-local-1.2.0/SCons/Tool/sunf90.py | 58 - .../scons-local-1.2.0/SCons/Tool/sunf95.py | 58 - .../scons-local-1.2.0/SCons/Tool/sunlink.py | 71 - .../scons-local-1.2.0/SCons/Tool/swig.py | 118 - .../scons-local-1.2.0/SCons/Tool/swig.pyc | Bin 4571 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/tar.py | 67 - .../scons-local-1.2.0/SCons/Tool/tar.pyc | Bin 1781 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/tex.py | 661 --- .../scons-local-1.2.0/SCons/Tool/tex.pyc | Bin 16259 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/tlib.py | 47 - .../scons-local-1.2.0/SCons/Tool/wix.py | 94 - .../scons-local-1.2.0/SCons/Tool/wix.pyc | Bin 2260 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/yacc.py | 125 - .../scons-local-1.2.0/SCons/Tool/yacc.pyc | Bin 3509 -> 0 bytes .../scons-local-1.2.0/SCons/Tool/zip.py | 94 - .../scons-local-1.2.0/SCons/Tool/zip.pyc | Bin 2790 -> 0 bytes .../scons-local-1.2.0/SCons/Util.py | 1577 ------- .../scons-local-1.2.0/SCons/Util.pyc | Bin 52678 -> 0 bytes .../SCons/Variables/BoolVariable.py | 85 - .../SCons/Variables/BoolVariable.pyc | Bin 2628 -> 0 bytes .../SCons/Variables/EnumVariable.py | 101 - .../SCons/Variables/EnumVariable.pyc | Bin 3768 -> 0 bytes .../SCons/Variables/ListVariable.py | 133 - .../SCons/Variables/ListVariable.pyc | Bin 5377 -> 0 bytes .../SCons/Variables/PackageVariable.py | 103 - .../SCons/Variables/PackageVariable.pyc | Bin 3098 -> 0 bytes .../SCons/Variables/PathVariable.py | 141 - .../SCons/Variables/PathVariable.pyc | Bin 5454 -> 0 bytes .../SCons/Variables/__init__.py | 304 -- .../SCons/Variables/__init__.pyc | Bin 9463 -> 0 bytes .../scons-local-1.2.0/SCons/Warnings.py | 193 - .../scons-local-1.2.0/SCons/Warnings.pyc | Bin 8355 -> 0 bytes .../scons-local-1.2.0/SCons/__init__.py | 43 - .../scons-local-1.2.0/SCons/__init__.pyc | Bin 573 -> 0 bytes .../SCons/compat/__init__.py | 244 -- .../SCons/compat/__init__.pyc | Bin 6325 -> 0 bytes .../SCons/compat/_scons_UserString.py | 92 - .../SCons/compat/_scons_hashlib.py | 85 - .../SCons/compat/_scons_itertools.py | 118 - .../SCons/compat/_scons_optparse.py | 1719 -------- .../SCons/compat/_scons_sets.py | 577 --- .../SCons/compat/_scons_sets15.py | 170 - .../SCons/compat/_scons_shlex.py | 319 -- .../SCons/compat/_scons_subprocess.py | 1290 ------ .../SCons/compat/_scons_textwrap.py | 376 -- .../SCons/compat/builtins.py | 181 - .../SCons/compat/builtins.pyc | Bin 3996 -> 0 bytes .../scons-local-1.2.0/SCons/cpp.py | 592 --- .../scons-local-1.2.0/SCons/cpp.pyc | Bin 16680 -> 0 bytes .../scons-local-1.2.0/SCons/dblite.py | 219 - .../scons-local-1.2.0/SCons/dblite.pyc | Bin 7755 -> 0 bytes .../scons-local-1.2.0/SCons/exitfuncs.py | 71 - vendor/scons/scons-1.2.0/scons-time.py | 1513 ------- vendor/scons/scons-1.2.0/scons.py | 165 - vendor/scons/scons-1.2.0/sconsign.py | 502 --- 1446 files changed, 865 insertions(+), 158452 deletions(-) delete mode 100755 support/download_npm create mode 100755 support/hmac create mode 100755 support/package_node create mode 100755 support/package_npm create mode 100755 support/s3 create mode 100644 support/s3-bash/s3-common-functions create mode 100755 support/s3-bash/s3-put delete mode 100644 vendor/node/node-0.4.7/include/config.h delete mode 100644 vendor/node/node-0.4.7/include/eio.h delete mode 100644 vendor/node/node-0.4.7/include/ev.h delete mode 100644 vendor/node/node-0.4.7/include/node.h delete mode 100644 vendor/node/node-0.4.7/include/node_buffer.h delete mode 100644 vendor/node/node-0.4.7/include/node_config.h delete mode 100644 vendor/node/node-0.4.7/include/node_events.h delete mode 100644 vendor/node/node-0.4.7/include/node_object_wrap.h delete mode 100644 vendor/node/node-0.4.7/include/node_version.h delete mode 100644 vendor/node/node-0.4.7/include/v8-debug.h delete mode 100644 vendor/node/node-0.4.7/include/v8-preparser.h delete mode 100644 vendor/node/node-0.4.7/include/v8-profiler.h delete mode 100644 vendor/node/node-0.4.7/include/v8-testing.h delete mode 100644 vendor/node/node-0.4.7/include/v8.h delete mode 100644 vendor/node/node-0.4.7/include/v8stdint.h delete mode 100755 vendor/node/node-0.4.7/node delete mode 100755 vendor/node/node-0.4.7/node-waf delete mode 100644 vendor/node/node-0.4.7/wafadmin/Build.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Build.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Configure.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Configure.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Constants.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Constants.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Environment.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Environment.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Logs.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Logs.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Node.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Node.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Options.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Options.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Runner.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Runner.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Scripting.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Scripting.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Task.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Task.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/TaskGen.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/TaskGen.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/__init__.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/ar.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/ar.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/cc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/cc.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/ccroot.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/ccroot.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/compiler_cc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/compiler_cc.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/compiler_cxx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/compiler_cxx.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/compiler_d.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/config_c.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/config_c.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/cxx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/cxx.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/d.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/dmd.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gas.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gcc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gcc.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gdc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gnu_dirs.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gob2.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gxx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/gxx.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/icc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/icpc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/intltool.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/libtool.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/misc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/misc.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/nasm.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/node_addon.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/osx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/preproc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/preproc.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/python.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/suncc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/suncxx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/unittestw.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/winres.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/xlc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Tools/xlcxx.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Utils.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/Utils.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/__init__.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/ansiterm.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/ansiterm.pyc delete mode 100644 vendor/node/node-0.4.7/wafadmin/pproc.py delete mode 100644 vendor/node/node-0.4.7/wafadmin/py3kfixes.py delete mode 100644 vendor/npm/npm-1.0.27/.gitignore delete mode 100644 vendor/npm/npm-1.0.27/.gitmodules delete mode 100644 vendor/npm/npm-1.0.27/AUTHORS delete mode 120000 vendor/npm/npm-1.0.27/CHANGES delete mode 100644 vendor/npm/npm-1.0.27/LICENSE delete mode 100644 vendor/npm/npm-1.0.27/Makefile delete mode 100644 vendor/npm/npm-1.0.27/README.md delete mode 100755 vendor/npm/npm-1.0.27/bin/npm-get-uid-gid.js delete mode 100755 vendor/npm/npm-1.0.27/bin/npm.js delete mode 100755 vendor/npm/npm-1.0.27/bin/read-package-json.js delete mode 100755 vendor/npm/npm-1.0.27/cli.js delete mode 100755 vendor/npm/npm-1.0.27/configure delete mode 100644 vendor/npm/npm-1.0.27/doc/adduser.md delete mode 120000 vendor/npm/npm-1.0.27/doc/author.md delete mode 100644 vendor/npm/npm-1.0.27/doc/bin.md delete mode 100644 vendor/npm/npm-1.0.27/doc/build.md delete mode 100644 vendor/npm/npm-1.0.27/doc/bundle.md delete mode 100644 vendor/npm/npm-1.0.27/doc/cache.md delete mode 100644 vendor/npm/npm-1.0.27/doc/changelog.md delete mode 100644 vendor/npm/npm-1.0.27/doc/coding-style.md delete mode 100644 vendor/npm/npm-1.0.27/doc/completion.md delete mode 100644 vendor/npm/npm-1.0.27/doc/config.md delete mode 100644 vendor/npm/npm-1.0.27/doc/deprecate.md delete mode 100644 vendor/npm/npm-1.0.27/doc/developers.md delete mode 100644 vendor/npm/npm-1.0.27/doc/docs.md delete mode 100644 vendor/npm/npm-1.0.27/doc/edit.md delete mode 100644 vendor/npm/npm-1.0.27/doc/explore.md delete mode 100644 vendor/npm/npm-1.0.27/doc/faq.md delete mode 120000 vendor/npm/npm-1.0.27/doc/find.md delete mode 100644 vendor/npm/npm-1.0.27/doc/folders.md delete mode 120000 vendor/npm/npm-1.0.27/doc/get.md delete mode 120000 vendor/npm/npm-1.0.27/doc/global.md delete mode 100644 vendor/npm/npm-1.0.27/doc/help-search.md delete mode 120000 vendor/npm/npm-1.0.27/doc/home.md delete mode 100644 vendor/npm/npm-1.0.27/doc/init.md delete mode 100644 vendor/npm/npm-1.0.27/doc/install.md delete mode 100644 vendor/npm/npm-1.0.27/doc/json.md delete mode 100644 vendor/npm/npm-1.0.27/doc/link.md delete mode 100644 vendor/npm/npm-1.0.27/doc/list.md delete mode 120000 vendor/npm/npm-1.0.27/doc/ln.md delete mode 120000 vendor/npm/npm-1.0.27/doc/ls.md delete mode 100644 vendor/npm/npm-1.0.27/doc/npm.md delete mode 100644 vendor/npm/npm-1.0.27/doc/outdated.md delete mode 100644 vendor/npm/npm-1.0.27/doc/owner.md delete mode 100644 vendor/npm/npm-1.0.27/doc/pack.md delete mode 100644 vendor/npm/npm-1.0.27/doc/prefix.md delete mode 100644 vendor/npm/npm-1.0.27/doc/prune.md delete mode 100644 vendor/npm/npm-1.0.27/doc/publish.md delete mode 100644 vendor/npm/npm-1.0.27/doc/rebuild.md delete mode 100644 vendor/npm/npm-1.0.27/doc/registry.md delete mode 100644 vendor/npm/npm-1.0.27/doc/removing-npm.md delete mode 100644 vendor/npm/npm-1.0.27/doc/restart.md delete mode 120000 vendor/npm/npm-1.0.27/doc/rm.md delete mode 100644 vendor/npm/npm-1.0.27/doc/root.md delete mode 100644 vendor/npm/npm-1.0.27/doc/run-script.md delete mode 100644 vendor/npm/npm-1.0.27/doc/scripts.md delete mode 100644 vendor/npm/npm-1.0.27/doc/search.md delete mode 100644 vendor/npm/npm-1.0.27/doc/semver.md delete mode 120000 vendor/npm/npm-1.0.27/doc/set.md delete mode 100644 vendor/npm/npm-1.0.27/doc/start.md delete mode 100644 vendor/npm/npm-1.0.27/doc/stop.md delete mode 100644 vendor/npm/npm-1.0.27/doc/submodule.md delete mode 100644 vendor/npm/npm-1.0.27/doc/tag.md delete mode 100644 vendor/npm/npm-1.0.27/doc/test.md delete mode 100644 vendor/npm/npm-1.0.27/doc/uninstall.md delete mode 100644 vendor/npm/npm-1.0.27/doc/unpublish.md delete mode 100644 vendor/npm/npm-1.0.27/doc/update.md delete mode 100644 vendor/npm/npm-1.0.27/doc/version.md delete mode 100644 vendor/npm/npm-1.0.27/doc/view.md delete mode 100644 vendor/npm/npm-1.0.27/doc/whoami.md delete mode 100644 vendor/npm/npm-1.0.27/html/favicon.ico delete mode 100644 vendor/npm/npm-1.0.27/html/index.html delete mode 100644 vendor/npm/npm-1.0.27/html/n-64.png delete mode 100644 vendor/npm/npm-1.0.27/html/n-large.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-16.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-256-square.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-256w.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-64-square.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-fin.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm-large.png delete mode 100644 vendor/npm/npm-1.0.27/html/npm.png delete mode 100644 vendor/npm/npm-1.0.27/lib/adduser.js delete mode 100644 vendor/npm/npm-1.0.27/lib/bin.js delete mode 100644 vendor/npm/npm-1.0.27/lib/build.js delete mode 100644 vendor/npm/npm-1.0.27/lib/cache.js delete mode 100644 vendor/npm/npm-1.0.27/lib/completion.js delete mode 100644 vendor/npm/npm-1.0.27/lib/config.js delete mode 100644 vendor/npm/npm-1.0.27/lib/deprecate.js delete mode 100644 vendor/npm/npm-1.0.27/lib/docs.js delete mode 100644 vendor/npm/npm-1.0.27/lib/edit.js delete mode 100644 vendor/npm/npm-1.0.27/lib/explore.js delete mode 100644 vendor/npm/npm-1.0.27/lib/faq.js delete mode 100644 vendor/npm/npm-1.0.27/lib/get.js delete mode 100644 vendor/npm/npm-1.0.27/lib/help-search.js delete mode 100644 vendor/npm/npm-1.0.27/lib/help.js delete mode 100644 vendor/npm/npm-1.0.27/lib/init.js delete mode 100644 vendor/npm/npm-1.0.27/lib/install.js delete mode 100644 vendor/npm/npm-1.0.27/lib/link.js delete mode 100644 vendor/npm/npm-1.0.27/lib/ls.js delete mode 100644 vendor/npm/npm-1.0.27/lib/outdated.js delete mode 100644 vendor/npm/npm-1.0.27/lib/owner.js delete mode 100644 vendor/npm/npm-1.0.27/lib/pack.js delete mode 100644 vendor/npm/npm-1.0.27/lib/prefix.js delete mode 100644 vendor/npm/npm-1.0.27/lib/prune.js delete mode 100644 vendor/npm/npm-1.0.27/lib/publish.js delete mode 100644 vendor/npm/npm-1.0.27/lib/rebuild.js delete mode 100644 vendor/npm/npm-1.0.27/lib/restart.js delete mode 100644 vendor/npm/npm-1.0.27/lib/root.js delete mode 100644 vendor/npm/npm-1.0.27/lib/run-script.js delete mode 100644 vendor/npm/npm-1.0.27/lib/search.js delete mode 100644 vendor/npm/npm-1.0.27/lib/set.js delete mode 100644 vendor/npm/npm-1.0.27/lib/start.js delete mode 100644 vendor/npm/npm-1.0.27/lib/stop.js delete mode 100644 vendor/npm/npm-1.0.27/lib/submodule.js delete mode 100644 vendor/npm/npm-1.0.27/lib/tag.js delete mode 100644 vendor/npm/npm-1.0.27/lib/test.js delete mode 100644 vendor/npm/npm-1.0.27/lib/unbuild.js delete mode 100644 vendor/npm/npm-1.0.27/lib/uninstall.js delete mode 100644 vendor/npm/npm-1.0.27/lib/unpublish.js delete mode 100644 vendor/npm/npm-1.0.27/lib/update.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion.sh delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion/file-completion.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion/installed-deep.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion/installed-shallow.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion/remote-packages.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/completion/users.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/config-defs.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/error-handler.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/excludes.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/exec.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/fetch.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/find-prefix.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/find.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/get.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/ini.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/lifecycle.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/link.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/load-package-defaults.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/log.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/mkdir-p.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/adduser.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/get.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/index.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/publish.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/request.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/tag.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/npm-registry-client/unpublish.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/output.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/promise-chain.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/prompt.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/proxyify.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/read-installed.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/read-json.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/relativize.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/set.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/sha.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/tar.js delete mode 100644 vendor/npm/npm-1.0.27/lib/utils/uid-number.js delete mode 100644 vendor/npm/npm-1.0.27/lib/version.js delete mode 100644 vendor/npm/npm-1.0.27/lib/view.js delete mode 100644 vendor/npm/npm-1.0.27/lib/whoami.js delete mode 100644 vendor/npm/npm-1.0.27/lib/xmas.js delete mode 100644 vendor/npm/npm-1.0.27/man1/adduser.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/author.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/bin.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/build.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/bundle.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/cache.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/changelog.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/coding-style.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/completion.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/config.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/deprecate.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/developers.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/docs.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/edit.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/explore.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/faq.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/find.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/folders.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/get.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/global.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/help-search.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/home.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/init.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/install.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/json.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/link.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/list.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/ln.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/ls.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/npm.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/outdated.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/owner.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/pack.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/prefix.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/prune.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/publish.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/rebuild.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/registry.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/removing-npm.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/restart.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/rm.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/root.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/run-script.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/scripts.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/search.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/semver.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/set.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/start.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/stop.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/submodule.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/tag.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/test.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/uninstall.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/unpublish.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/update.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/version.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/view.1 delete mode 100644 vendor/npm/npm-1.0.27/man1/whoami.1 delete mode 100644 vendor/npm/npm-1.0.27/node_modules/abbrev/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/abbrev/lib/abbrev.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/abbrev/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/graceful-fs/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/graceful-fs/graceful-fs.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/graceful-fs/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/ini/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/ini/ini.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/ini/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/ini/test/fixtures/foo.ini delete mode 100644 vendor/npm/npm-1.0.27/node_modules/ini/test/foo.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/.gitmodules delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/minimatch.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/minimatch/test/basic.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/LICENSE.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark-native.c delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.html delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/node-uuid/uuid.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/nopt/.gitignore delete mode 100644 vendor/npm/npm-1.0.27/node_modules/nopt/LICENSE delete mode 100644 vendor/npm/npm-1.0.27/node_modules/nopt/README.md delete mode 100755 vendor/npm/npm-1.0.27/node_modules/nopt/examples/my-program.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/nopt/lib/nopt.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/nopt/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/proto-list/LICENSE delete mode 100644 vendor/npm/npm-1.0.27/node_modules/proto-list/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/proto-list/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/proto-list/proto-list.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/AUTHORS delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/LICENSE delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/rimraf.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/test/run.sh delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/test/setup.sh delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-async.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-sync.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/semver/LICENSE delete mode 100644 vendor/npm/npm-1.0.27/node_modules/semver/README.md delete mode 100755 vendor/npm/npm-1.0.27/node_modules/semver/bin/semver delete mode 100644 vendor/npm/npm-1.0.27/node_modules/semver/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/semver/semver.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/README.md delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/index.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map-ordered.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/lib/bind-actor.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/lib/chain.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/lib/slide.js delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/nodejs-controlling-flow.pdf delete mode 100644 vendor/npm/npm-1.0.27/node_modules/slide/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/which/README.md delete mode 100755 vendor/npm/npm-1.0.27/node_modules/which/bin/which delete mode 100644 vendor/npm/npm-1.0.27/node_modules/which/package.json delete mode 100644 vendor/npm/npm-1.0.27/node_modules/which/which.js delete mode 100644 vendor/npm/npm-1.0.27/npm.js delete mode 100644 vendor/npm/npm-1.0.27/package.json delete mode 100644 vendor/npm/npm-1.0.27/scripts/clean-old.sh delete mode 100644 vendor/npm/npm-1.0.27/scripts/install.sh delete mode 100644 vendor/npm/npm-1.0.27/test/common.js delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/bundlerecurs/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/failer/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/fast/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/package-config/package.json delete mode 100755 vendor/npm/npm-1.0.27/test/disabled/package-config/test.js delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/slow/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/disabled/startstop/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/test.js delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/package.json delete mode 100755 vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/test.sh delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/test.js delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-private/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-test-package/package.json delete mode 100644 vendor/npm/npm-1.0.27/test/packages/npm-test-url-dep/package.json delete mode 100755 vendor/npm/npm-1.0.27/test/run.sh delete mode 100755 vendor/npm/npm-1.0.27/test/update-test.sh delete mode 100644 vendor/npm/npm-1.0.3/.gitignore delete mode 100644 vendor/npm/npm-1.0.3/.gitmodules delete mode 100644 vendor/npm/npm-1.0.3/AUTHORS delete mode 120000 vendor/npm/npm-1.0.3/CHANGES delete mode 100644 vendor/npm/npm-1.0.3/LICENSE delete mode 100644 vendor/npm/npm-1.0.3/Makefile delete mode 100644 vendor/npm/npm-1.0.3/README.md delete mode 100755 vendor/npm/npm-1.0.3/bin/npm-get-uid-gid.js delete mode 100755 vendor/npm/npm-1.0.3/bin/npm.js delete mode 100755 vendor/npm/npm-1.0.3/bin/read-package-json.js delete mode 100755 vendor/npm/npm-1.0.3/cli.js delete mode 100755 vendor/npm/npm-1.0.3/config delete mode 100644 vendor/npm/npm-1.0.3/doc/adduser.md delete mode 120000 vendor/npm/npm-1.0.3/doc/author.md delete mode 100644 vendor/npm/npm-1.0.3/doc/bin.md delete mode 100644 vendor/npm/npm-1.0.3/doc/build.md delete mode 100644 vendor/npm/npm-1.0.3/doc/cache.md delete mode 100644 vendor/npm/npm-1.0.3/doc/changelog.md delete mode 100644 vendor/npm/npm-1.0.3/doc/coding-style.md delete mode 100644 vendor/npm/npm-1.0.3/doc/completion.md delete mode 100644 vendor/npm/npm-1.0.3/doc/config.md delete mode 100644 vendor/npm/npm-1.0.3/doc/deprecate.md delete mode 100644 vendor/npm/npm-1.0.3/doc/developers.md delete mode 100644 vendor/npm/npm-1.0.3/doc/docs.md delete mode 100644 vendor/npm/npm-1.0.3/doc/edit.md delete mode 100644 vendor/npm/npm-1.0.3/doc/explore.md delete mode 100644 vendor/npm/npm-1.0.3/doc/faq.md delete mode 120000 vendor/npm/npm-1.0.3/doc/find.md delete mode 100644 vendor/npm/npm-1.0.3/doc/folders.md delete mode 120000 vendor/npm/npm-1.0.3/doc/get.md delete mode 120000 vendor/npm/npm-1.0.3/doc/global.md delete mode 100644 vendor/npm/npm-1.0.3/doc/init.md delete mode 100644 vendor/npm/npm-1.0.3/doc/install.md delete mode 100644 vendor/npm/npm-1.0.3/doc/json.md delete mode 100644 vendor/npm/npm-1.0.3/doc/link.md delete mode 100644 vendor/npm/npm-1.0.3/doc/list.md delete mode 120000 vendor/npm/npm-1.0.3/doc/ln.md delete mode 120000 vendor/npm/npm-1.0.3/doc/ls.md delete mode 100644 vendor/npm/npm-1.0.3/doc/npm.md delete mode 100644 vendor/npm/npm-1.0.3/doc/outdated.md delete mode 100644 vendor/npm/npm-1.0.3/doc/owner.md delete mode 100644 vendor/npm/npm-1.0.3/doc/prefix.md delete mode 100644 vendor/npm/npm-1.0.3/doc/prune.md delete mode 100644 vendor/npm/npm-1.0.3/doc/publish.md delete mode 100644 vendor/npm/npm-1.0.3/doc/rebuild.md delete mode 100644 vendor/npm/npm-1.0.3/doc/registry.md delete mode 100644 vendor/npm/npm-1.0.3/doc/removing-npm.md delete mode 100644 vendor/npm/npm-1.0.3/doc/restart.md delete mode 120000 vendor/npm/npm-1.0.3/doc/rm.md delete mode 100644 vendor/npm/npm-1.0.3/doc/root.md delete mode 100644 vendor/npm/npm-1.0.3/doc/run-script.md delete mode 100644 vendor/npm/npm-1.0.3/doc/scripts.md delete mode 100644 vendor/npm/npm-1.0.3/doc/search.md delete mode 120000 vendor/npm/npm-1.0.3/doc/set.md delete mode 100644 vendor/npm/npm-1.0.3/doc/start.md delete mode 100644 vendor/npm/npm-1.0.3/doc/stop.md delete mode 100644 vendor/npm/npm-1.0.3/doc/tag.md delete mode 100644 vendor/npm/npm-1.0.3/doc/test.md delete mode 100644 vendor/npm/npm-1.0.3/doc/uninstall.md delete mode 100644 vendor/npm/npm-1.0.3/doc/unpublish.md delete mode 100644 vendor/npm/npm-1.0.3/doc/update.md delete mode 100644 vendor/npm/npm-1.0.3/doc/version.md delete mode 100644 vendor/npm/npm-1.0.3/doc/view.md delete mode 100644 vendor/npm/npm-1.0.3/doc/whoami.md delete mode 100644 vendor/npm/npm-1.0.3/html/favicon.ico delete mode 100644 vendor/npm/npm-1.0.3/html/index.html delete mode 100644 vendor/npm/npm-1.0.3/html/npm-16.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm-256-square.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm-256w.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm-64-square.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm-fin.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm-large.png delete mode 100644 vendor/npm/npm-1.0.3/html/npm.png delete mode 100644 vendor/npm/npm-1.0.3/lib/adduser.js delete mode 100644 vendor/npm/npm-1.0.3/lib/bin.js delete mode 100644 vendor/npm/npm-1.0.3/lib/build.js delete mode 100644 vendor/npm/npm-1.0.3/lib/cache.js delete mode 100644 vendor/npm/npm-1.0.3/lib/completion.js delete mode 100644 vendor/npm/npm-1.0.3/lib/config.js delete mode 100644 vendor/npm/npm-1.0.3/lib/deprecate.js delete mode 100644 vendor/npm/npm-1.0.3/lib/docs.js delete mode 100644 vendor/npm/npm-1.0.3/lib/edit.js delete mode 100644 vendor/npm/npm-1.0.3/lib/explore.js delete mode 100644 vendor/npm/npm-1.0.3/lib/faq.js delete mode 100644 vendor/npm/npm-1.0.3/lib/get.js delete mode 100644 vendor/npm/npm-1.0.3/lib/help.js delete mode 100644 vendor/npm/npm-1.0.3/lib/init.js delete mode 100644 vendor/npm/npm-1.0.3/lib/install.js delete mode 100644 vendor/npm/npm-1.0.3/lib/link.js delete mode 100644 vendor/npm/npm-1.0.3/lib/ls.js delete mode 100644 vendor/npm/npm-1.0.3/lib/outdated.js delete mode 100644 vendor/npm/npm-1.0.3/lib/owner.js delete mode 100644 vendor/npm/npm-1.0.3/lib/prefix.js delete mode 100644 vendor/npm/npm-1.0.3/lib/prune.js delete mode 100644 vendor/npm/npm-1.0.3/lib/publish.js delete mode 100644 vendor/npm/npm-1.0.3/lib/rebuild.js delete mode 100644 vendor/npm/npm-1.0.3/lib/restart.js delete mode 100644 vendor/npm/npm-1.0.3/lib/root.js delete mode 100644 vendor/npm/npm-1.0.3/lib/run-script.js delete mode 100644 vendor/npm/npm-1.0.3/lib/search.js delete mode 100644 vendor/npm/npm-1.0.3/lib/set.js delete mode 100644 vendor/npm/npm-1.0.3/lib/start.js delete mode 100644 vendor/npm/npm-1.0.3/lib/stop.js delete mode 100644 vendor/npm/npm-1.0.3/lib/tag.js delete mode 100644 vendor/npm/npm-1.0.3/lib/test.js delete mode 100644 vendor/npm/npm-1.0.3/lib/unbuild.js delete mode 100644 vendor/npm/npm-1.0.3/lib/uninstall.js delete mode 100644 vendor/npm/npm-1.0.3/lib/unpublish.js delete mode 100644 vendor/npm/npm-1.0.3/lib/update.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/async-map.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/base64.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/chain.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion.sh delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion/file-completion.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion/installed-deep.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion/installed-shallow.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion/remote-packages.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/completion/users.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/config-defs.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/error-handler.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/exec.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/fetch.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/find-prefix.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/find.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/get.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/graceful-fs.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/ini-parser.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/ini.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/lifecycle.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/link.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/load-package-defaults.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/log.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/minimatch.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/mkdir-p.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/adduser.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/get.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/index.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/publish.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/request.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/tag.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/npm-registry-client/unpublish.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/output.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/promise-chain.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/prompt.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/proto-list.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/proxyify.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/read-installed.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/read-json.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/relativize.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/rm-rf.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/set.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/sha.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/sys.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/tar.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/uid-number.js delete mode 100644 vendor/npm/npm-1.0.3/lib/utils/which.js delete mode 100644 vendor/npm/npm-1.0.3/lib/version.js delete mode 100644 vendor/npm/npm-1.0.3/lib/view.js delete mode 100644 vendor/npm/npm-1.0.3/lib/whoami.js delete mode 100644 vendor/npm/npm-1.0.3/lib/xmas.js delete mode 100644 vendor/npm/npm-1.0.3/man1/adduser.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/author.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/bin.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/build.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/cache.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/changelog.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/coding-style.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/completion.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/config.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/deprecate.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/developers.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/docs.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/edit.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/explore.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/faq.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/find.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/folders.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/get.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/global.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/init.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/install.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/json.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/link.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/list.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/ln.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/ls.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/npm.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/outdated.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/owner.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/prefix.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/prune.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/publish.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/rebuild.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/registry.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/removing-npm.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/restart.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/rm.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/root.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/run-script.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/scripts.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/search.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/set.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/start.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/stop.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/tag.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/test.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/uninstall.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/unpublish.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/update.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/version.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/view.1 delete mode 100644 vendor/npm/npm-1.0.3/man1/whoami.1 delete mode 100644 vendor/npm/npm-1.0.3/node_modules/abbrev/README.md delete mode 100644 vendor/npm/npm-1.0.3/node_modules/abbrev/lib/abbrev.js delete mode 100644 vendor/npm/npm-1.0.3/node_modules/abbrev/package.json delete mode 100644 vendor/npm/npm-1.0.3/node_modules/nopt/.gitignore delete mode 100644 vendor/npm/npm-1.0.3/node_modules/nopt/README.md delete mode 100755 vendor/npm/npm-1.0.3/node_modules/nopt/examples/my-program.js delete mode 100644 vendor/npm/npm-1.0.3/node_modules/nopt/lib/nopt.js delete mode 100644 vendor/npm/npm-1.0.3/node_modules/nopt/package.json delete mode 100644 vendor/npm/npm-1.0.3/node_modules/semver/README.md delete mode 100755 vendor/npm/npm-1.0.3/node_modules/semver/bin/semver delete mode 100644 vendor/npm/npm-1.0.3/node_modules/semver/package.json delete mode 100644 vendor/npm/npm-1.0.3/node_modules/semver/semver.js delete mode 100644 vendor/npm/npm-1.0.3/npm.js delete mode 100644 vendor/npm/npm-1.0.3/package.json delete mode 100644 vendor/npm/npm-1.0.3/scripts/clean-old.sh delete mode 100755 vendor/npm/npm-1.0.3/scripts/install-message.sh delete mode 100755 vendor/npm/npm-1.0.3/scripts/install.sh delete mode 100644 vendor/npm/npm-1.0.3/test/common.js delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/bundlerecurs/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/failer/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/fast/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/package-config/package.json delete mode 100755 vendor/npm/npm-1.0.3/test/disabled/package-config/test.js delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/slow/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/disabled/startstop/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-blerg/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-blerg/test.js delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-env-reader/package.json delete mode 100755 vendor/npm/npm-1.0.3/test/packages/npm-test-env-reader/test.sh delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-private/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-test-package/package.json delete mode 100644 vendor/npm/npm-1.0.3/test/packages/npm-test-url-dep/package.json delete mode 100755 vendor/npm/npm-1.0.3/test/run.sh delete mode 100755 vendor/npm/npm-1.0.3/test/update-test.sh delete mode 100644 vendor/npm/npm-1.0.6/.gitignore delete mode 100644 vendor/npm/npm-1.0.6/.gitmodules delete mode 100644 vendor/npm/npm-1.0.6/AUTHORS delete mode 120000 vendor/npm/npm-1.0.6/CHANGES delete mode 100644 vendor/npm/npm-1.0.6/LICENSE delete mode 100644 vendor/npm/npm-1.0.6/Makefile delete mode 100644 vendor/npm/npm-1.0.6/README.md delete mode 100755 vendor/npm/npm-1.0.6/bin/npm-get-uid-gid.js delete mode 100755 vendor/npm/npm-1.0.6/bin/npm.js delete mode 100755 vendor/npm/npm-1.0.6/bin/read-package-json.js delete mode 100755 vendor/npm/npm-1.0.6/cli.js delete mode 100755 vendor/npm/npm-1.0.6/config delete mode 100644 vendor/npm/npm-1.0.6/doc/adduser.md delete mode 120000 vendor/npm/npm-1.0.6/doc/author.md delete mode 100644 vendor/npm/npm-1.0.6/doc/bin.md delete mode 100644 vendor/npm/npm-1.0.6/doc/build.md delete mode 100644 vendor/npm/npm-1.0.6/doc/cache.md delete mode 100644 vendor/npm/npm-1.0.6/doc/changelog.md delete mode 100644 vendor/npm/npm-1.0.6/doc/coding-style.md delete mode 100644 vendor/npm/npm-1.0.6/doc/completion.md delete mode 100644 vendor/npm/npm-1.0.6/doc/config.md delete mode 100644 vendor/npm/npm-1.0.6/doc/deprecate.md delete mode 100644 vendor/npm/npm-1.0.6/doc/developers.md delete mode 100644 vendor/npm/npm-1.0.6/doc/docs.md delete mode 100644 vendor/npm/npm-1.0.6/doc/edit.md delete mode 100644 vendor/npm/npm-1.0.6/doc/explore.md delete mode 100644 vendor/npm/npm-1.0.6/doc/faq.md delete mode 120000 vendor/npm/npm-1.0.6/doc/find.md delete mode 100644 vendor/npm/npm-1.0.6/doc/folders.md delete mode 120000 vendor/npm/npm-1.0.6/doc/get.md delete mode 120000 vendor/npm/npm-1.0.6/doc/global.md delete mode 100644 vendor/npm/npm-1.0.6/doc/init.md delete mode 100644 vendor/npm/npm-1.0.6/doc/install.md delete mode 100644 vendor/npm/npm-1.0.6/doc/json.md delete mode 100644 vendor/npm/npm-1.0.6/doc/link.md delete mode 100644 vendor/npm/npm-1.0.6/doc/list.md delete mode 120000 vendor/npm/npm-1.0.6/doc/ln.md delete mode 120000 vendor/npm/npm-1.0.6/doc/ls.md delete mode 100644 vendor/npm/npm-1.0.6/doc/npm.md delete mode 100644 vendor/npm/npm-1.0.6/doc/outdated.md delete mode 100644 vendor/npm/npm-1.0.6/doc/owner.md delete mode 100644 vendor/npm/npm-1.0.6/doc/prefix.md delete mode 100644 vendor/npm/npm-1.0.6/doc/prune.md delete mode 100644 vendor/npm/npm-1.0.6/doc/publish.md delete mode 100644 vendor/npm/npm-1.0.6/doc/rebuild.md delete mode 100644 vendor/npm/npm-1.0.6/doc/registry.md delete mode 100644 vendor/npm/npm-1.0.6/doc/removing-npm.md delete mode 100644 vendor/npm/npm-1.0.6/doc/restart.md delete mode 120000 vendor/npm/npm-1.0.6/doc/rm.md delete mode 100644 vendor/npm/npm-1.0.6/doc/root.md delete mode 100644 vendor/npm/npm-1.0.6/doc/run-script.md delete mode 100644 vendor/npm/npm-1.0.6/doc/scripts.md delete mode 100644 vendor/npm/npm-1.0.6/doc/search.md delete mode 120000 vendor/npm/npm-1.0.6/doc/set.md delete mode 100644 vendor/npm/npm-1.0.6/doc/start.md delete mode 100644 vendor/npm/npm-1.0.6/doc/stop.md delete mode 100644 vendor/npm/npm-1.0.6/doc/tag.md delete mode 100644 vendor/npm/npm-1.0.6/doc/test.md delete mode 100644 vendor/npm/npm-1.0.6/doc/uninstall.md delete mode 100644 vendor/npm/npm-1.0.6/doc/unpublish.md delete mode 100644 vendor/npm/npm-1.0.6/doc/update.md delete mode 100644 vendor/npm/npm-1.0.6/doc/version.md delete mode 100644 vendor/npm/npm-1.0.6/doc/view.md delete mode 100644 vendor/npm/npm-1.0.6/doc/whoami.md delete mode 100644 vendor/npm/npm-1.0.6/html/favicon.ico delete mode 100644 vendor/npm/npm-1.0.6/html/index.html delete mode 100644 vendor/npm/npm-1.0.6/html/npm-16.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm-256-square.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm-256w.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm-64-square.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm-fin.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm-large.png delete mode 100644 vendor/npm/npm-1.0.6/html/npm.png delete mode 100644 vendor/npm/npm-1.0.6/lib/adduser.js delete mode 100644 vendor/npm/npm-1.0.6/lib/bin.js delete mode 100644 vendor/npm/npm-1.0.6/lib/build.js delete mode 100644 vendor/npm/npm-1.0.6/lib/cache.js delete mode 100644 vendor/npm/npm-1.0.6/lib/completion.js delete mode 100644 vendor/npm/npm-1.0.6/lib/config.js delete mode 100644 vendor/npm/npm-1.0.6/lib/deprecate.js delete mode 100644 vendor/npm/npm-1.0.6/lib/docs.js delete mode 100644 vendor/npm/npm-1.0.6/lib/edit.js delete mode 100644 vendor/npm/npm-1.0.6/lib/explore.js delete mode 100644 vendor/npm/npm-1.0.6/lib/faq.js delete mode 100644 vendor/npm/npm-1.0.6/lib/get.js delete mode 100644 vendor/npm/npm-1.0.6/lib/help.js delete mode 100644 vendor/npm/npm-1.0.6/lib/init.js delete mode 100644 vendor/npm/npm-1.0.6/lib/install.js delete mode 100644 vendor/npm/npm-1.0.6/lib/link.js delete mode 100644 vendor/npm/npm-1.0.6/lib/ls.js delete mode 100644 vendor/npm/npm-1.0.6/lib/outdated.js delete mode 100644 vendor/npm/npm-1.0.6/lib/owner.js delete mode 100644 vendor/npm/npm-1.0.6/lib/prefix.js delete mode 100644 vendor/npm/npm-1.0.6/lib/prune.js delete mode 100644 vendor/npm/npm-1.0.6/lib/publish.js delete mode 100644 vendor/npm/npm-1.0.6/lib/rebuild.js delete mode 100644 vendor/npm/npm-1.0.6/lib/restart.js delete mode 100644 vendor/npm/npm-1.0.6/lib/root.js delete mode 100644 vendor/npm/npm-1.0.6/lib/run-script.js delete mode 100644 vendor/npm/npm-1.0.6/lib/search.js delete mode 100644 vendor/npm/npm-1.0.6/lib/set.js delete mode 100644 vendor/npm/npm-1.0.6/lib/start.js delete mode 100644 vendor/npm/npm-1.0.6/lib/stop.js delete mode 100644 vendor/npm/npm-1.0.6/lib/tag.js delete mode 100644 vendor/npm/npm-1.0.6/lib/test.js delete mode 100644 vendor/npm/npm-1.0.6/lib/unbuild.js delete mode 100644 vendor/npm/npm-1.0.6/lib/uninstall.js delete mode 100644 vendor/npm/npm-1.0.6/lib/unpublish.js delete mode 100644 vendor/npm/npm-1.0.6/lib/update.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/async-map.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/base64.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/chain.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion.sh delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion/file-completion.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion/installed-deep.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion/installed-shallow.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion/remote-packages.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/completion/users.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/config-defs.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/error-handler.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/exec.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/fetch.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/find-prefix.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/find.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/get.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/graceful-fs.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/ini-parser.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/ini.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/lifecycle.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/link.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/load-package-defaults.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/log.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/minimatch.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/mkdir-p.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/adduser.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/get.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/index.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/publish.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/request.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/tag.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/npm-registry-client/unpublish.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/output.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/promise-chain.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/prompt.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/proto-list.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/proxyify.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/read-installed.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/read-json.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/relativize.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/rm-rf.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/set.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/sha.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/sys.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/tar.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/uid-number.js delete mode 100644 vendor/npm/npm-1.0.6/lib/utils/which.js delete mode 100644 vendor/npm/npm-1.0.6/lib/version.js delete mode 100644 vendor/npm/npm-1.0.6/lib/view.js delete mode 100644 vendor/npm/npm-1.0.6/lib/whoami.js delete mode 100644 vendor/npm/npm-1.0.6/lib/xmas.js delete mode 100644 vendor/npm/npm-1.0.6/man1/adduser.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/author.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/bin.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/build.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/cache.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/changelog.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/coding-style.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/completion.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/config.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/deprecate.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/developers.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/docs.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/edit.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/explore.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/faq.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/find.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/folders.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/get.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/global.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/init.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/install.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/json.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/link.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/list.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/ln.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/ls.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/npm.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/outdated.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/owner.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/prefix.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/prune.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/publish.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/rebuild.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/registry.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/removing-npm.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/restart.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/rm.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/root.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/run-script.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/scripts.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/search.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/set.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/start.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/stop.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/tag.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/test.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/uninstall.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/unpublish.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/update.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/version.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/view.1 delete mode 100644 vendor/npm/npm-1.0.6/man1/whoami.1 delete mode 100644 vendor/npm/npm-1.0.6/node_modules/abbrev/README.md delete mode 100644 vendor/npm/npm-1.0.6/node_modules/abbrev/lib/abbrev.js delete mode 100644 vendor/npm/npm-1.0.6/node_modules/abbrev/package.json delete mode 100644 vendor/npm/npm-1.0.6/node_modules/nopt/.gitignore delete mode 100644 vendor/npm/npm-1.0.6/node_modules/nopt/README.md delete mode 100755 vendor/npm/npm-1.0.6/node_modules/nopt/examples/my-program.js delete mode 100644 vendor/npm/npm-1.0.6/node_modules/nopt/lib/nopt.js delete mode 100644 vendor/npm/npm-1.0.6/node_modules/nopt/package.json delete mode 100644 vendor/npm/npm-1.0.6/node_modules/semver/README.md delete mode 100755 vendor/npm/npm-1.0.6/node_modules/semver/bin/semver delete mode 100644 vendor/npm/npm-1.0.6/node_modules/semver/package.json delete mode 100644 vendor/npm/npm-1.0.6/node_modules/semver/semver.js delete mode 100644 vendor/npm/npm-1.0.6/npm.js delete mode 100644 vendor/npm/npm-1.0.6/package.json delete mode 100644 vendor/npm/npm-1.0.6/scripts/clean-old.sh delete mode 100755 vendor/npm/npm-1.0.6/scripts/install-message.sh delete mode 100755 vendor/npm/npm-1.0.6/scripts/install.sh delete mode 100644 vendor/npm/npm-1.0.6/test/common.js delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/bundlerecurs/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/failer/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/fast/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/package-config/package.json delete mode 100755 vendor/npm/npm-1.0.6/test/disabled/package-config/test.js delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/slow/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/disabled/startstop/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-blerg/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-blerg/test.js delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-env-reader/package.json delete mode 100755 vendor/npm/npm-1.0.6/test/packages/npm-test-env-reader/test.sh delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-private/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-test-package/package.json delete mode 100644 vendor/npm/npm-1.0.6/test/packages/npm-test-url-dep/package.json delete mode 100755 vendor/npm/npm-1.0.6/test/run.sh delete mode 100755 vendor/npm/npm-1.0.6/test/update-test.sh delete mode 100644 vendor/npm/npm-1.0.8/.gitignore delete mode 100644 vendor/npm/npm-1.0.8/.gitmodules delete mode 100644 vendor/npm/npm-1.0.8/AUTHORS delete mode 120000 vendor/npm/npm-1.0.8/CHANGES delete mode 100644 vendor/npm/npm-1.0.8/LICENSE delete mode 100644 vendor/npm/npm-1.0.8/Makefile delete mode 100644 vendor/npm/npm-1.0.8/README.md delete mode 100755 vendor/npm/npm-1.0.8/bin/npm-get-uid-gid.js delete mode 100755 vendor/npm/npm-1.0.8/bin/npm.js delete mode 100755 vendor/npm/npm-1.0.8/bin/read-package-json.js delete mode 100755 vendor/npm/npm-1.0.8/cli.js delete mode 100755 vendor/npm/npm-1.0.8/configure delete mode 100644 vendor/npm/npm-1.0.8/doc/adduser.md delete mode 120000 vendor/npm/npm-1.0.8/doc/author.md delete mode 100644 vendor/npm/npm-1.0.8/doc/bin.md delete mode 100644 vendor/npm/npm-1.0.8/doc/build.md delete mode 100644 vendor/npm/npm-1.0.8/doc/bundle.md delete mode 100644 vendor/npm/npm-1.0.8/doc/cache.md delete mode 100644 vendor/npm/npm-1.0.8/doc/changelog.md delete mode 100644 vendor/npm/npm-1.0.8/doc/coding-style.md delete mode 100644 vendor/npm/npm-1.0.8/doc/completion.md delete mode 100644 vendor/npm/npm-1.0.8/doc/config.md delete mode 100644 vendor/npm/npm-1.0.8/doc/deprecate.md delete mode 100644 vendor/npm/npm-1.0.8/doc/developers.md delete mode 100644 vendor/npm/npm-1.0.8/doc/docs.md delete mode 100644 vendor/npm/npm-1.0.8/doc/edit.md delete mode 100644 vendor/npm/npm-1.0.8/doc/explore.md delete mode 100644 vendor/npm/npm-1.0.8/doc/faq.md delete mode 120000 vendor/npm/npm-1.0.8/doc/find.md delete mode 100644 vendor/npm/npm-1.0.8/doc/folders.md delete mode 120000 vendor/npm/npm-1.0.8/doc/get.md delete mode 120000 vendor/npm/npm-1.0.8/doc/global.md delete mode 100644 vendor/npm/npm-1.0.8/doc/help-search.md delete mode 100644 vendor/npm/npm-1.0.8/doc/init.md delete mode 100644 vendor/npm/npm-1.0.8/doc/install.md delete mode 100644 vendor/npm/npm-1.0.8/doc/json.md delete mode 100644 vendor/npm/npm-1.0.8/doc/link.md delete mode 100644 vendor/npm/npm-1.0.8/doc/list.md delete mode 120000 vendor/npm/npm-1.0.8/doc/ln.md delete mode 120000 vendor/npm/npm-1.0.8/doc/ls.md delete mode 100644 vendor/npm/npm-1.0.8/doc/npm.md delete mode 100644 vendor/npm/npm-1.0.8/doc/outdated.md delete mode 100644 vendor/npm/npm-1.0.8/doc/owner.md delete mode 100644 vendor/npm/npm-1.0.8/doc/prefix.md delete mode 100644 vendor/npm/npm-1.0.8/doc/prune.md delete mode 100644 vendor/npm/npm-1.0.8/doc/publish.md delete mode 100644 vendor/npm/npm-1.0.8/doc/rebuild.md delete mode 100644 vendor/npm/npm-1.0.8/doc/registry.md delete mode 100644 vendor/npm/npm-1.0.8/doc/removing-npm.md delete mode 100644 vendor/npm/npm-1.0.8/doc/restart.md delete mode 120000 vendor/npm/npm-1.0.8/doc/rm.md delete mode 100644 vendor/npm/npm-1.0.8/doc/root.md delete mode 100644 vendor/npm/npm-1.0.8/doc/run-script.md delete mode 100644 vendor/npm/npm-1.0.8/doc/scripts.md delete mode 100644 vendor/npm/npm-1.0.8/doc/search.md delete mode 120000 vendor/npm/npm-1.0.8/doc/set.md delete mode 100644 vendor/npm/npm-1.0.8/doc/start.md delete mode 100644 vendor/npm/npm-1.0.8/doc/stop.md delete mode 100644 vendor/npm/npm-1.0.8/doc/tag.md delete mode 100644 vendor/npm/npm-1.0.8/doc/test.md delete mode 100644 vendor/npm/npm-1.0.8/doc/uninstall.md delete mode 100644 vendor/npm/npm-1.0.8/doc/unpublish.md delete mode 100644 vendor/npm/npm-1.0.8/doc/update.md delete mode 100644 vendor/npm/npm-1.0.8/doc/version.md delete mode 100644 vendor/npm/npm-1.0.8/doc/view.md delete mode 100644 vendor/npm/npm-1.0.8/doc/whoami.md delete mode 100644 vendor/npm/npm-1.0.8/html/favicon.ico delete mode 100644 vendor/npm/npm-1.0.8/html/index.html delete mode 100644 vendor/npm/npm-1.0.8/html/npm-16.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm-256-square.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm-256w.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm-64-square.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm-fin.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm-large.png delete mode 100644 vendor/npm/npm-1.0.8/html/npm.png delete mode 100644 vendor/npm/npm-1.0.8/lib/adduser.js delete mode 100644 vendor/npm/npm-1.0.8/lib/bin.js delete mode 100644 vendor/npm/npm-1.0.8/lib/build.js delete mode 100644 vendor/npm/npm-1.0.8/lib/cache.js delete mode 100644 vendor/npm/npm-1.0.8/lib/completion.js delete mode 100644 vendor/npm/npm-1.0.8/lib/config.js delete mode 100644 vendor/npm/npm-1.0.8/lib/deprecate.js delete mode 100644 vendor/npm/npm-1.0.8/lib/docs.js delete mode 100644 vendor/npm/npm-1.0.8/lib/edit.js delete mode 100644 vendor/npm/npm-1.0.8/lib/explore.js delete mode 100644 vendor/npm/npm-1.0.8/lib/faq.js delete mode 100644 vendor/npm/npm-1.0.8/lib/get.js delete mode 100644 vendor/npm/npm-1.0.8/lib/help-search.js delete mode 100644 vendor/npm/npm-1.0.8/lib/help.js delete mode 100644 vendor/npm/npm-1.0.8/lib/init.js delete mode 100644 vendor/npm/npm-1.0.8/lib/install.js delete mode 100644 vendor/npm/npm-1.0.8/lib/link.js delete mode 100644 vendor/npm/npm-1.0.8/lib/ls.js delete mode 100644 vendor/npm/npm-1.0.8/lib/outdated.js delete mode 100644 vendor/npm/npm-1.0.8/lib/owner.js delete mode 100644 vendor/npm/npm-1.0.8/lib/prefix.js delete mode 100644 vendor/npm/npm-1.0.8/lib/prune.js delete mode 100644 vendor/npm/npm-1.0.8/lib/publish.js delete mode 100644 vendor/npm/npm-1.0.8/lib/rebuild.js delete mode 100644 vendor/npm/npm-1.0.8/lib/restart.js delete mode 100644 vendor/npm/npm-1.0.8/lib/root.js delete mode 100644 vendor/npm/npm-1.0.8/lib/run-script.js delete mode 100644 vendor/npm/npm-1.0.8/lib/search.js delete mode 100644 vendor/npm/npm-1.0.8/lib/set.js delete mode 100644 vendor/npm/npm-1.0.8/lib/start.js delete mode 100644 vendor/npm/npm-1.0.8/lib/stop.js delete mode 100644 vendor/npm/npm-1.0.8/lib/tag.js delete mode 100644 vendor/npm/npm-1.0.8/lib/test.js delete mode 100644 vendor/npm/npm-1.0.8/lib/unbuild.js delete mode 100644 vendor/npm/npm-1.0.8/lib/uninstall.js delete mode 100644 vendor/npm/npm-1.0.8/lib/unpublish.js delete mode 100644 vendor/npm/npm-1.0.8/lib/update.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/async-map.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/base64.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/chain.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion.sh delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion/file-completion.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion/installed-deep.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion/installed-shallow.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion/remote-packages.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/completion/users.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/config-defs.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/error-handler.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/excludes.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/exec.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/fetch.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/find-prefix.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/find.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/get.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/graceful-fs.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/ini-parser.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/ini.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/lifecycle.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/link.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/load-package-defaults.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/log.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/minimatch.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/mkdir-p.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/adduser.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/get.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/index.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/publish.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/request.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/tag.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/npm-registry-client/unpublish.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/output.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/promise-chain.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/prompt.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/proto-list.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/proxyify.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/read-installed.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/read-json.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/relativize.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/rm-rf.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/set.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/sha.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/sys.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/tar.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/uid-number.js delete mode 100644 vendor/npm/npm-1.0.8/lib/utils/which.js delete mode 100644 vendor/npm/npm-1.0.8/lib/version.js delete mode 100644 vendor/npm/npm-1.0.8/lib/view.js delete mode 100644 vendor/npm/npm-1.0.8/lib/whoami.js delete mode 100644 vendor/npm/npm-1.0.8/lib/xmas.js delete mode 100644 vendor/npm/npm-1.0.8/man1/adduser.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/author.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/bin.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/build.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/bundle.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/cache.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/changelog.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/coding-style.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/completion.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/config.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/deprecate.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/developers.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/docs.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/edit.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/explore.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/faq.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/find.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/folders.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/get.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/global.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/help-search.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/init.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/install.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/json.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/link.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/list.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/ln.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/ls.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/npm.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/outdated.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/owner.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/prefix.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/prune.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/publish.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/rebuild.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/registry.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/removing-npm.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/restart.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/rm.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/root.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/run-script.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/scripts.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/search.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/set.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/start.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/stop.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/tag.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/test.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/uninstall.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/unpublish.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/update.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/version.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/view.1 delete mode 100644 vendor/npm/npm-1.0.8/man1/whoami.1 delete mode 100644 vendor/npm/npm-1.0.8/node_modules/abbrev/README.md delete mode 100644 vendor/npm/npm-1.0.8/node_modules/abbrev/lib/abbrev.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/abbrev/package.json delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/LICENSE.md delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/README.md delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/package.json delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark-native.c delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.html delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/node-uuid/uuid.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/nopt/.gitignore delete mode 100644 vendor/npm/npm-1.0.8/node_modules/nopt/README.md delete mode 100755 vendor/npm/npm-1.0.8/node_modules/nopt/examples/my-program.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/nopt/lib/nopt.js delete mode 100644 vendor/npm/npm-1.0.8/node_modules/nopt/package.json delete mode 100644 vendor/npm/npm-1.0.8/node_modules/semver/LICENSE delete mode 100644 vendor/npm/npm-1.0.8/node_modules/semver/README.md delete mode 100755 vendor/npm/npm-1.0.8/node_modules/semver/bin/semver delete mode 100644 vendor/npm/npm-1.0.8/node_modules/semver/package.json delete mode 100644 vendor/npm/npm-1.0.8/node_modules/semver/semver.js delete mode 100644 vendor/npm/npm-1.0.8/npm.js delete mode 100644 vendor/npm/npm-1.0.8/package.json delete mode 100644 vendor/npm/npm-1.0.8/scripts/clean-old.sh delete mode 100755 vendor/npm/npm-1.0.8/scripts/install-message.sh delete mode 100755 vendor/npm/npm-1.0.8/scripts/install.sh delete mode 100644 vendor/npm/npm-1.0.8/test/common.js delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/bundlerecurs/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/failer/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/fast/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/package-config/package.json delete mode 100755 vendor/npm/npm-1.0.8/test/disabled/package-config/test.js delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/slow/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/disabled/startstop/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/test.js delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/package.json delete mode 100755 vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/test.sh delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-private/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-test-package/package.json delete mode 100644 vendor/npm/npm-1.0.8/test/packages/npm-test-url-dep/package.json delete mode 100755 vendor/npm/npm-1.0.8/test/run.sh delete mode 100755 vendor/npm/npm-1.0.8/test/update-test.sh delete mode 120000 vendor/scons/scons-1.2.0/scons delete mode 100644 vendor/scons/scons-1.2.0/scons-LICENSE delete mode 100644 vendor/scons/scons-1.2.0/scons-README delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Environment.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Environment.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Memoize.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Memoize.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/FS.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/FS.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/EnumOption.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/EnumOption.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/ListOption.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/ListOption.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/aix.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/cygwin.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/hpux.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/irix.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/os2.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/posix.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/posix.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/sunos.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/C.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/C.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/D.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/D.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Dir.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Dir.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/RC.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Main.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Main.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConscript.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConscript.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Sig.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Subst.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Subst.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Taskmaster.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Taskmaster.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/386asm.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/BitKeeper.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/BitKeeper.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/FortranCommon.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/FortranCommon.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/PharLapCommon.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/PharLapCommon.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/RCS.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/RCS.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/SCCS.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/SCCS.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Subversion.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixc++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixcc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixf77.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixlink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ar.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ar.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/bcc32.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/c++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/c++.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cvf.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/default.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/default.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dmd.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dmd.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvi.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvipdf.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvipdf.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/f77.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/f90.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/f90.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/f95.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/f95.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/filesystem.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/filesystem.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/fortran.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/fortran.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gas.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gcc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gcc.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gnulink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hpc++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hpcc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hplink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icl.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifl.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifort.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink32.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/intelc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/link.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/link.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/linkloc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/masm.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/mingw.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/mslib.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/mslink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvs.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvs.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/mwcc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/mwld.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/nasm.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/ipk.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/msi.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/rpm.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/src_tarbz2.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/src_targz.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/src_zip.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/tarbz2.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/targz.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/packaging/zip.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdf.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdf.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdflatex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdflatex.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdftex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/pdftex.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/qt.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rmic.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rmic.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rpcgen.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rpcgen.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rpm.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/rpm.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sgiar.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sgic++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sgicc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sgilink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunar.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunc++.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/suncc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunf77.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunf90.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunf95.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/sunlink.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/swig.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/swig.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/tar.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/tar.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/tex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/tex.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/tlib.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/wix.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/wix.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/yacc.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/yacc.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/zip.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/zip.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Util.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Util.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/BoolVariable.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/BoolVariable.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/EnumVariable.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/EnumVariable.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/ListVariable.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/ListVariable.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/PackageVariable.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/PackageVariable.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/PathVariable.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/PathVariable.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Variables/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Warnings.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Warnings.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/__init__.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/__init__.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_UserString.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_hashlib.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_itertools.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_optparse.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets15.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_shlex.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_subprocess.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_textwrap.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.py delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.pyc delete mode 100644 vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/exitfuncs.py delete mode 100755 vendor/scons/scons-1.2.0/scons-time.py delete mode 100755 vendor/scons/scons-1.2.0/scons.py delete mode 100755 vendor/scons/scons-1.2.0/sconsign.py diff --git a/bin/compile b/bin/compile index bd7170e7e..aab5d0957 100755 --- a/bin/compile +++ b/bin/compile @@ -4,6 +4,13 @@ # fail fast set -e +mktmpdir() { + dir=$(mktemp -t node-$1-XXXX) + rm -rf $dir + mkdir -p $dir + echo $dir +} + # config NODE_VERSION="0.4.7" NPM_VERSION="1.0.27" @@ -16,19 +23,30 @@ LP_DIR=`cd $(dirname $0); cd ..; pwd` CACHE_STORE_DIR=$CACHE_DIR"/node_modules/$NPM_VERSION" CACHE_TARGET_DIR=$BUILD_DIR"/node_modules" +# s3 packages +NODE_PACKAGE="http://language-pack-nodejs.s3.amazonaws.com/nodejs-${NODE_VERSION}.tgz" +NPM_PACKAGE="http://language-pack-nodejs.s3.amazonaws.com/npm-${NPM_VERSION}.tgz" +SCONS_PACKAGE="http://language-pack-nodejs.s3.amazonaws.com/scons-${SCONS_VERSION}.tgz" + # vendor directories -VENDORED_NODE="$LP_DIR/vendor/node/node-$NODE_VERSION" -VENDORED_NPM="$LP_DIR/vendor/npm/npm-$NPM_VERSION" +VENDORED_NODE="$(mktmpdir node)" +VENDORED_NPM="$(mktmpdir npm)" +VENDORED_SCONS="$(mktmpdir scons)" + +# download and unpack packages +echo "-----> Fetching Node.js binaries" +mkdir -p $VENDORED_NODE && curl $NODE_PACKAGE -s -o - | tar xzf - -C $VENDORED_NODE +mkdir -p $VENDORED_NPM && curl $NPM_PACKAGE -s -o - | tar xzf - -C $VENDORED_NPM +mkdir -p $VENDORED_SCONS && curl $SCONS_PACKAGE -s -o - | tar xzf - -C $VENDORED_SCONS # vendor node PATH="$BUILD_DIR/bin:$PATH" echo "-----> Vendoring node $NODE_VERSION" mkdir -p "$BUILD_DIR/bin" -cp "$VENDORED_NODE/node" "$BUILD_DIR/bin/node" +cp "$VENDORED_NODE/bin/node" "$BUILD_DIR/bin/node" # setting up paths for building -PATH="$LP_DIR/vendor/scons/scons-${SCONS_VERSION}:$PATH" -PATH="$VENDORED_NODE:$PATH" +PATH="$VENDORED_SCONS:$VENDORED_NODE/bin:$PATH" INCLUDE_PATH="$VENDORED_NODE/include" export CPATH="$INCLUDE_PATH" export CPPPATH="$INCLUDE_PATH" diff --git a/support/download_npm b/support/download_npm deleted file mode 100755 index 058eb7077..000000000 --- a/support/download_npm +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -set -ex - -VERSION=$1 - -if [ "$VERSION" == "" ]; then - echo "usage: download_npm VERSION" - exit 1 -fi - -cd vendor/npm -git clone https://github.com/isaacs/npm.git npm-$VERSION - -cd npm-$VERSION -git checkout v$VERSION -git submodule update --init --recursive - -find . -name ".git" -exec rm -rf {} \; diff --git a/support/hmac b/support/hmac new file mode 100755 index 000000000..5aa074a0d --- /dev/null +++ b/support/hmac @@ -0,0 +1,79 @@ +#!/bin/bash +# Implement HMAC functionality on top of the OpenSSL digest functions. +# licensed under the terms of the GNU GPL v2 +# Copyright 2007 Victor Lowther + +die() { + echo $* + exit 1 +} + +check_deps() { + local res=0 + while [ $# -ne 0 ]; do + which "${1}" >& /dev/null || { res=1; echo "${1} not found."; } + shift + done + (( res == 0 )) || die "aborting." +} + +# write a byte (passed as hex) to stdout +write_byte() { + # $1 = byte to write + printf "\\x$(printf "%x" ${1})" +} + +# make an hmac pad out of a key. +# this is not the most secure way of doing it, but it is +# the most expedient. +make_hmac_pad() { + # using key in file $1 and byte in $2, create the appropriate hmac pad + # Pad keys out to $3 bytes + # if key is longer than $3, use hash $4 to hash the key first. + local x y a size remainder oifs + (( remainder = ${3} )) + # in case someone else was messing with IFS. + for x in $(echo -n "${1}" | od -v -t u1 | cut -b 9-); + do + write_byte $((${x} ^ ${2})) + (( remainder -= 1 )) + done + for ((y=0; remainder - y ;y++)); do + write_byte $((0 ^ ${2})) + done +} + +# utility functions for making hmac pads +hmac_ipad() { + make_hmac_pad "${1}" 0x36 ${2} "${3}" +} + +hmac_opad() { + make_hmac_pad "${1}" 0x5c ${2} "${3}" +} + +# hmac something +do_hmac() { + # $1 = algo to use. Must be one that openssl knows about + # $2 = keyfile to use + # $3 = file to hash. uses stdin if none is given. + # accepts input on stdin, leaves it on stdout. + # Output is binary, if you want something else pipe it accordingly. + local blocklen keysize x + case "${1}" in + sha) blocklen=64 ;; + sha1) blocklen=64 ;; + md5) blocklen=64 ;; + md4) blocklen=64 ;; + sha256) blocklen=64 ;; + sha512) blocklen=128 ;; + *) die "Unknown hash ${1} passed to hmac!" ;; + esac + cat <(hmac_ipad ${2} ${blocklen} "${1}") "${3:--}" | openssl dgst "-${1}" -binary | \ + cat <(hmac_opad ${2} ${blocklen} "${1}") - | openssl dgst "-${1}" -binary +} + +[[ ${1} ]] || die "Must pass the name of the hash function to use to ${0}". + +check_deps od openssl +do_hmac "${@}" diff --git a/support/package_node b/support/package_node new file mode 100755 index 000000000..c7a1c2a42 --- /dev/null +++ b/support/package_node @@ -0,0 +1,51 @@ +#!/bin/sh + +set -e + +node_version="$1" + +if [ "$node_version" == "" ]; then + echo "usage: $0 VERSION" + exit 1 +fi + +if [ "$S3_ACCESS_KEY_ID" == "" ]; then + echo "must set S3_ACCESS_KEY_ID" + exit 1 +fi + +if [ "$S3_SECRET_ACCESS_KEY" == "" ]; then + echo "must set S3_SECRET_ACCESS_KEY" + exit 1 +fi + +basedir="$( cd -P "$( dirname "$0" )" && pwd )" + +# make a temp directory +tempdir="$( mktemp -t node_XXXX )" +rm -rf $tempdir +mkdir -p $tempdir + +cd $tempdir && + + # download and extract node + curl http://nodejs.org/dist/node-v${node_version}.tar.gz -o node.tgz && + tar xzvf node.tgz && + + cd node-v${node_version} && + + # build and package nodejs for heroku + heroku make -v -o $tempdir/node-${node_version}.tgz && + + # upload nodejs to s3 + $basedir/s3 put language-pack-nodejs \ + nodejs-${node_version}.tgz $tempdir/node-${node_version}.tgz && + + # package scons + scons_version=$(ls tools/scons | grep "scons-local" | cut -d- -f3) && + cd tools/scons && + tar czvf $tempdir/scons-${scons_version}.tgz * && + + # upload scons to s3 + $basedir/s3 put language-pack-nodejs \ + scons-${scons_version}.tgz $tempdir/scons-${scons_version}.tgz diff --git a/support/package_npm b/support/package_npm new file mode 100755 index 000000000..3af87658e --- /dev/null +++ b/support/package_npm @@ -0,0 +1,36 @@ +#!/bin/sh + +set -e + +npm_version="$1" + +if [ "$npm_version" == "" ]; then + echo "usage: $0 VERSION" + exit 1 +fi + +basedir="$( cd -P "$( dirname "$0" )" && pwd )" + +# make a temp directory +tempdir="$( mktemp -t node_XXXX )" +rm -rf $tempdir +mkdir -p $tempdir + +cd $tempdir && + + # download npm + git clone https://github.com/isaacs/npm.git && + + cd npm && + + # grab the right version + git checkout v${node_version} && + git submodule update --init --recursive && + find . -name ".git" -exec rm -rf {} \; + + # package it up + tar czvf $tempdir/npm-${npm_version}.tgz * + + # upload npm to s3 + $basedir/s3 put language-pack-nodejs \ + npm-${npm_version}.tgz $tempdir/npm-${npm_version}.tgz diff --git a/support/s3 b/support/s3 new file mode 100755 index 000000000..d5cf94d2a --- /dev/null +++ b/support/s3 @@ -0,0 +1,223 @@ +#!/bin/bash +# basic amazon s3 operations +# Licensed under the terms of the GNU GPL v2 +# Copyright 2007 Victor Lowther + +set -e + +basedir="$( cd -P "$( dirname "$0" )" && pwd )" +PATH="$basedir:$PATH" + +# print a message and bail +die() { + echo $* + exit 1 +} + +# check to see if the variable name passed exists and holds a value. +# Die if it does not. +check_or_die() { + [[ ${!1} ]] || die "Environment variable ${1} is not set." +} + +# check to see if we have all the needed S3 variables defined. +# Bail if we do not. +check_s3() { + local sak x + for x in S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY; do + check_or_die ${x}; + done + sak="$(echo -n $S3_SECRET_ACCESS_KEY | wc -c)" + (( ${sak%%[!0-9 ]*} == 40 )) || \ + die "S3 Secret Access Key is not exactly 40 bytes long. Please fix it." +} +# check to see if our external dependencies exist +check_dep() { + local res=0 + while [[ $# -ne 0 ]]; do + which "${1}" >& /dev/null || { res=1; echo "${1} not found."; } + shift + done + (( res == 0 )) || die "aborting." +} + +check_deps() { + check_dep openssl date hmac cat grep curl + check_s3 +} + +urlenc() { + # $1 = string to url encode + # output is on stdout + # we don't urlencode everything, just enough stuff. + echo -n "${1}" | + sed 's/%/%25/g + s/ /%20/g + s/#/%23/g + s/\$/%24/g + s/\&/%26/g + s/+/%2b/g + s/,/%2c/g + s/:/%3a/g + s/;/%3b/g + s/?/%3f/g + s/@/%40/g + s/ /%09/g' +} + +xmldec() { + # no parameters. + # accept input on stdin, put it on stdout. + # patches accepted to get more stuff + sed 's/\"/\"/g + s/\&/\&/g + s/\<//g' +} + +## basic S3 functionality. x-amz-header functionality is not implemented. +# make an S3 signature string, which will be output on stdout. +s3_signature_string() { + # $1 = HTTP verb + # $2 = date string, must be in UTC + # $3 = bucket name, if any + # $4 = resource path, if any + # $5 = content md5, if any + # $6 = content MIME type, if any + # $7 = canonicalized headers, if any + # signature string will be output on stdout + local verr="Must pass a verb to s3_signature_string!" + local verb="${1:?verr}" + local bucket="${3}" + local resource="${4}" + local derr="Must pass a date to s3_signature_string!" + local date="${2:?derr}" + local mime="${6}" + local md5="${5}" + local headers="${7}" + printf "%s\n%s\n%s\n%s\n%s\n%s%s" \ + "${verb}" "${md5}" "${mime}" "${date}" \ + "${headers}" "${bucket}" "${resource}" | \ + hmac sha1 "${S3_SECRET_ACCESS_KEY}" | openssl base64 -e -a +} + +# cheesy, but it is the best way to have multiple headers. +curl_headers() { + # each arg passed will be output on its own line + local parms=$# + for ((;$#;)); do + echo "header = \"${1}\"" + shift + done +} + +s3_curl() { + # invoke curl to do all the heavy HTTP lifting + # $1 = method (one of GET, PUT, or DELETE. HEAD is not handled yet.) + # $2 = remote bucket. + # $3 = remote name + # $4 = local name. + local bucket remote date sig md5 arg inout headers + # header handling is kinda fugly, but it works. + bucket="${2:+/${2}}/" # slashify the bucket + remote="$(urlenc "${3}")" # if you don't, strange things may happen. + stdopts="--connect-timeout 10 --fail --silent" + [[ $CURL_S3_DEBUG == true ]] && stdopts="${stdopts} --show-error --fail" + case "${1}" in + GET) arg="-o" inout="${4:--}" # stdout if no $4 + ;; + PUT) [[ ${2} ]] || die "PUT can has bucket?" + if [[ ! ${3} ]]; then + arg="-X PUT" + headers[${#headers[@]}]="Content-Length: 0" + elif [[ -f ${4} ]]; then + md5="$(openssl dgst -md5 -binary "${4}"|openssl base64 -e -a)" + arg="-T" inout="${4}" + headers[${#headers[@]}]="x-amz-acl: public-read" + headers[${#headers[@]}]="Expect: 100-continue" + else + die "Cannot write non-existing file ${4}" + fi + ;; + DELETE) arg="-X DELETE" + ;; + HEAD) arg="-I" ;; + *) die "Unknown verb ${1}. It probably would not have worked anyways." ;; + esac + date="$(TZ=UTC date '+%a, %e %b %Y %H:%M:%S %z')" + sig=$(s3_signature_string ${1} "${date}" "${bucket}" "${remote}" "${md5}" "" "x-amz-acl:public-read") + + headers[${#headers[@]}]="Authorization: AWS ${S3_ACCESS_KEY_ID}:${sig}" + headers[${#headers[@]}]="Date: ${date}" + [[ ${md5} ]] && headers[${#headers[@]}]="Content-MD5: ${md5}" + curl ${arg} "${inout}" ${stdopts} -o - -K <(curl_headers "${headers[@]}") \ + "http://s3.amazonaws.com${bucket}${remote}" + return $? +} + +s3_put() { + # $1 = remote bucket to put it into + # $2 = remote name to put + # $3 = file to put. This must be present if $2 is. + s3_curl PUT "${1}" "${2}" "${3:-${2}}" + return $? +} + +s3_get() { + # $1 = bucket to get file from + # $2 = remote file to get + # $3 = local file to get into. Will be overwritten if it exists. + # If this contains a path, that path must exist before calling this. + s3_curl GET "${1}" "${2}" "${3:-${2}}" + return $? +} + +s3_test() { + # same args as s3_get, but uses the HEAD verb instead of the GET verb. + s3_curl HEAD "${1}" "${2}" >/dev/null + return $? +} + +# Hideously ugly, but it works well enough. +s3_buckets() { + s3_get |grep -o '[^>]*' |sed 's/<[^>]*>//g' |xmldec + return $? +} + +# this will only return the first thousand entries, alas +# Mabye some kind soul can fix this without writing an XML parser in bash? +# Also need to add xml entity handling. +s3_list() { + # $1 = bucket to list + [ "x${1}" == "x" ] && return 1 + s3_get "${1}" |grep -o '[^>]*' |sed 's/<[^>]*>//g'| xmldec + return $? +} + +s3_delete() { + # $1 = bucket to delete from + # $2 = item to delete + s3_curl DELETE "${1}" "${2}" + return $? +} + +# because this uses s3_list, it suffers from the same flaws. +s3_rmrf() { + # $1 = bucket to delete everything from + s3_list "${1}" | while read f; do + s3_delete "${1}" "${f}"; + done +} + +check_deps +case $1 in + put) shift; s3_put "$@" ;; + get) shift; s3_get "$@" ;; + rm) shift; s3_delete "$@" ;; + ls) shift; s3_list "$@" ;; + test) shift; s3_test "$@" ;; + buckets) s3_buckets ;; + rmrf) shift; s3_rmrf "$@" ;; + *) die "Unknown command ${1}." + ;; +esac diff --git a/support/s3-bash/s3-common-functions b/support/s3-bash/s3-common-functions new file mode 100644 index 000000000..4d035ca58 --- /dev/null +++ b/support/s3-bash/s3-common-functions @@ -0,0 +1,334 @@ +#! /usr/bin/env bash +cat > /dev/null << EndOfLicence +s3-bash +Copyright 2007 Raphael James Cohn + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License +is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +or implied. See the License for the specific language governing permissions and limitations under +the License. +EndOfLicence + +# Pragmas +set -u +set -e + +# Constants +readonly version="0.02" +readonly userSpecifiedDataErrorExitCode=1 +readonly invalidCommandLineOption=2 +readonly internalErrorExitCode=3 +readonly invalidEnvironmentExitCode=4 +readonly ipadXorByte=0x36 +readonly opadXorByte=0x5c + +# Command-like aliases +readonly sha1="openssl dgst -sha1 -binary" +readonly base64encode="openssl enc -base64 -e -in" +readonly base64decode="openssl enc -base64 -d -in" + +# Globals +declare -a temporaryFiles + +function base64EncodedMD5 +{ + openssl dgst -md5 -binary "$1" | openssl enc -e -base64 +} + +function printErrorMessage +{ + printf "%s: %s\n" "$1" "$2" 1>&2 +} + +function printErrorHelpAndExit +{ + printErrorMessage "$weAreKnownAs" "$1" + printHelpAndExit $2 +} + +function checkProgramIsInEnvironment +{ + if [ ! -x "$(which $1)" ]; then + printErrorHelpAndExit "Environment Error: $1 not found on the path or not executable" $invalidEnvironmentExitCode + fi +} + +# Do not use this from directly. Due to a bug in bash, array assignments do not work when the function is used with command substitution +function createTemporaryFile +{ + local temporaryFile="$(mktemp "$temporaryDirectory/$$.$1.XXXXXXXX")" || printErrorHelpAndExit "Environment Error: Could not create a temporary file. Please check you /tmp folder permissions allow files and folders to be created and disc space." $invalidEnvironmentExitCode + local length="${#temporaryFiles[@]}" + temporaryFiles[$length]="$temporaryFile" +} + +function mostRecentTemporaryFile +{ + local length="${#temporaryFiles[@]}" + local lastIndex + ((lastIndex = --length)) + echo "${temporaryFiles[$lastIndex]}" +} + +function deleteTemporaryFile +{ + rm -f "$1" || printErrorHelpAndExit "Environment Error: Could not delete a temporary file ($1)." $invalidEnvironmentExitCode +} + +function removeTemporaryFiles +{ + length="${#temporaryFiles[@]}" + if [ $length -eq 0 ]; then + return + fi + for temporaryFile in ${temporaryFiles[@]}; do + deleteTemporaryFile "$temporaryFile" + done + temporaryFiles=() + length="${#temporaryFiles[@]}" +} + +function checkEnvironment +{ + programs=(openssl curl od dd printf sed awk sort mktemp rm grep cp ls env bash) + for program in "${programs[@]}"; do + checkProgramIsInEnvironment "$program" + done + + local temporaryFolder="${TMPDIR:-/tmp}" + if [ ! -x "$temporaryFolder" ]; then + printErrorHelpAndExit "Environment Error: The temporary directory ($temporaryFolder) does not exist. Please set the TMPDIR environment variable to your temporary directory" $invalidEnvironmentExitCode + fi + readonly temporaryDirectory="$temporaryFolder/s3-bash/$weAreKnownAs" + mkdir -p "$temporaryDirectory" || printErrorHelpAndExit "Environment Error: Could not create a temporary directory ($temporaryDiectory). Please check you /tmp folder permissions allow files and folders to be created and you have sufficient disc space" $invalidEnvironmentExitCode + + #Check we can create and delete temporary files + createTemporaryFile "check" + temporaryFileCheck="$(mostRecentTemporaryFile)" + echo "Checking we can write to temporary files. If this is still here then we could not delete temporary files." > "$temporaryFileCheck" + removeTemporaryFiles +} + +function setErrorTraps +{ + trap "removeTemporaryFiles; exit $internalErrorExitCode" INT TERM EXIT +} + +function unsetErrorTraps +{ + trap - INT TERM EXIT +} + +function verifyUrl +{ + if [ -z "$url" ]; then + printErrorHelpAndExit "URL not specified" $userSpecifiedDataErrorExitCode + elif echo $url | grep -q http://; then + printErrorHelpAndExit "URL starts with http://" $userSpecifiedDataErrorExitCode + elif echo $url | grep -q https://; then + printErrorHelpAndExit "URL starts with https://" $userSpecifiedDataErrorExitCode + elif echo $url | grep -v ^/; then + printErrorHelpAndExit "URL does not start with /" $userSpecifiedDataErrorExitCode + fi +} + +function appendHash +{ + local fileToHash="$1" + local fileToWriteTo="$2" + $sha1 "$fileToHash" >> "$fileToWriteTo" +} + +function writeHash +{ + local fileToHash="$1" + local fileToWriteTo="$2" + $sha1 -out "$fileToWriteTo" "$fileToHash" +} + +function checkAwsKey +{ + local originalKeyFile="$1" + local keySize="$(ls -l "$originalKeyFile" | awk '{ print $5 }')" + if [ ! $keySize -eq 40 ]; then + printErrorHelpAndExit "We do not understand Amazon AWS secret keys which are not 40 bytes long. Have you included a carriage return or line feed by mistake at the end of the secret key file?" $userSpecifiedDataErrorExitCode + fi +} + +function padDecodedKeyTo +{ + local originalKeyFile="$1" + local keyFile="$2" + cp "$originalKeyFile" "$keyFile" + + local keySize=$(ls -l "$keyFile" | awk '{ print $5 }') + if [ $keySize -lt 64 ]; then + local zerosToWrite=$((64 - $keySize)) + dd if=/dev/zero of=$keyFile bs=1 count=$zerosToWrite seek=$keySize 2> /dev/null + elif [ $keySize -gt 64 ]; then + echo "Warning: Support for hashing keys bigger than the SHA1 block size of 64 bytes is untested" 1>&2 + writeHash "$originalKeyFile" "$keyFile" + local keySize=$(ls -l "$keyFile" | awk '{ print $5 }') + if [ $keySize -lt 64 ]; then + local zerosToWrite=$((64 - $keySize)) + dd if=/dev/zero of=$keyFile bs=1 count=$zerosToWrite seek=$keySize 2> /dev/null + fi + exit 1 + else + : + fi +} + +function writeLongAsByte +{ + local byte="$1" + local file="$2" + printf "\\$(printf "%o" $byte)" >> "$file" +} + +function readBytesAndXorAndWriteAsBytesTo +{ + local inputFile="$1" + local xorByte=$2 + local outputFile="$3" + + od -v -A n -t uC "$inputFile" | awk '{ OFS="\n"; for (i = 1; i <= NF; i++) print $i }' | + while read byte; do + ((xord = byte ^ xorByte)) + writeLongAsByte $xord "$outputFile" + done +} + +function writeHexByte +{ + local byte="$1" + local file="$2" + printf "\\$(printf "%o" 0x$byte)" >> "$file" +} + +function writeHexString +{ + local hexString="$1" + for byte in $(echo $hexString | sed 's/../& /g'); do + writeHexByte "$byte" "$2" + done +} + +function writeStringToSign +{ + local outputFile="$1" + echo $verb >> "$outputFile" + echo "$contentMD5" >> "$outputFile" + echo "$contentType" >> "$outputFile" + echo "$currentDateTime" >> "$outputFile" + + writeStringToSignAmazonHeaders "$outputFile" + + urlPath="$(echo "$url" | awk 'BEGIN { FS="[?]"} { print $1 }')" + urlQueryString="$(echo "$url" | awk 'BEGIN { FS="[?]"} { print $2 }')" + printf "$urlPath" >> "$outputFile" + if [ "$urlQueryString" = "acl" ] || [ "$urlQueryString" = "torrent" ]; then + printf "?" >> "$outputFile" + printf "$urlQueryString" >> "$outputFile" + fi +} + +function writeStringToSignAmazonHeaders() +{ + local outputFile="$1" + + #Convert all headers to lower case + #sort + #Strip ": " to ":" + #Add LF to each header + awk 'BEGIN { FS=": " } NF == 2 { print tolower($1) ":" $2 }' "$amazonHeaderFile" | sort >> "$outputFile" + #TODO: RFC 2616, section 4.2 (combine repeated headers' values) + #TODO: Unfold long lines (not supported elsewhere) +} + +function computeAwsAuthorizationHeader +{ + checkAwsKey "$awsAccessSecretKeyIdFile" + + createTemporaryFile "key" + local tempKeyFile="$(mostRecentTemporaryFile)" + + createTemporaryFile "ipad" + local ipadHashingFile="$(mostRecentTemporaryFile)" + + createTemporaryFile "opad" + local opadHashingFile="$(mostRecentTemporaryFile)" + + createTemporaryFile "HMAC-SHA1" + local hmacSha1File="$(mostRecentTemporaryFile)" + + padDecodedKeyTo "$awsAccessSecretKeyIdFile" "$tempKeyFile" + readBytesAndXorAndWriteAsBytesTo "$tempKeyFile" ipadXorByte "$ipadHashingFile" + + writeStringToSign "$ipadHashingFile" + + readBytesAndXorAndWriteAsBytesTo "$tempKeyFile" opadXorByte "$opadHashingFile" + appendHash "$ipadHashingFile" "$opadHashingFile" + writeHash "$opadHashingFile" "$hmacSha1File" + + local signature="$($base64encode "$hmacSha1File")" + + echo "Authorization: AWS $awsAccessKeyId:$signature" +} + +function writeAmazonHeadersForCurl +{ + if [ ! -e "$amazonHeaderFile" ]; then + printErrorHelpAndExit "Amazon Header file does not exist" $userSpecifiedDataErrorExitCode + elif grep -q ^X-Amz-Date: "$amazonHeaderFile"; then + printErrorHelpAndExit "X-Amz-Date header not allowed" $userSpecifiedDataErrorExitCode + fi + # Consider using sed... + awk 'BEGIN { ORS=" "; FS="\0" } { print "--header \"" $1 "\""}' "$amazonHeaderFile" >> "$1" +} + +function runCurl +{ + local verbAndAnyData="$1" + local fullUrl="$protocol://s3.amazonaws.com$url" + createTemporaryFile "curl" + local tempCurlCommand="$(mostRecentTemporaryFile)" + local cleanUpCommand="rm -f "$tempCurlCommand"" + + echo "#! /usr/bin/env bash" >> "$tempCurlCommand" + printf "curl %s %s --dump-header \"%s\" " "$verbose" "$verbAndAnyData" "$dumpHeaderFile" >> "$tempCurlCommand" + writeAmazonHeadersForCurl "$tempCurlCommand" + printf " --header \"%s\"" "Date: $currentDateTime" >> "$tempCurlCommand" + printf " --header \"%s\"" "$authorizationHeader" >> "$tempCurlCommand" + if [ ! -z "$contentType" ]; then + printf " --header \"Content-Type: %s\"" "$contentType" >> "$tempCurlCommand" + fi + if [ ! -z "$contentMD5" ]; then + printf " --header \"Content-MD5: %s\"" "$contentMD5" >> "$tempCurlCommand" + fi + printf " \"%s\"\n" "$fullUrl" >> "$tempCurlCommand" + + unsetErrorTraps + exec env bash "$tempCurlCommand" +} + +function initialise +{ + setErrorTraps + checkEnvironment +} + +function main +{ + initialise + parseOptions "$@" + readonly currentDateTime="$(LC_TIME=C date "+%a, %d %h %Y %T %z")" + prepareToRunCurl + readonly authorizationHeader="$(computeAwsAuthorizationHeader)" + runCurl "$verbToPass" +} diff --git a/support/s3-bash/s3-put b/support/s3-bash/s3-put new file mode 100755 index 000000000..87af77b5f --- /dev/null +++ b/support/s3-bash/s3-put @@ -0,0 +1,119 @@ +#! /usr/bin/env bash +cat > /dev/null << EndOfLicence +s3-bash +Copyright 2007 Raphael James Cohn + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License +is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +or implied. See the License for the specific language governing permissions and limitations under +the License. +EndOfLicence + +# Pragmas +set -u +set -e + +function printHelpAndExit +{ + exitCode=$1 + printf "%s: version %s\n" "$weAreKnownAs" "$version" + printf "Part of s3-bash. Latest version is at %s\n" 'http://code.google.com/p/s3-bash/' + printf "Usage %s: -h\n" "$weAreKnownAs" + printf "Usage %s: [-vS] [-H file] [-a file] -k key -s file -T file url\n" "$weAreKnownAs" + printf " Option\tType\tRequirement\tDescription\n" + printf " -h\t\tprecedent\tprint this help\n" + printf " -v\t\toptional\tverbose output\n" + printf " -k\tstring\tmandatory\tAWS Access Key Id\n" + printf " -s\tfile\tmandatory\tAWS Secret Access Key Id File\n" + printf " -T\tfile\tmandatory\tFile (or stdin with -) to PUT\n" + printf " -S\t\toptional\tUse https\n" + printf " -H\tfile\toptional\tFile to write response headers to\n" + printf " -a\tfile\toptional\tFile to read Amazon custom headers from (X-Amz-Date is not allowed)\n" + printf " -c\tMIME\toptional\tMIME Content type. Default is text/plain\n" + printf " \turl\tmandatory\trelative url including bucket name and leading slash, eg /bucket/path/to/object?acl. Assumed to be already encoded\n" + printf "\n" + printf "Notes\n" + printf "Specify proxies using a ~/.curlrc file\n" + printf "Specify content to PUT using stdin using option -T -\n" + exit $exitCode +} + +function parseOptions +{ + verbose="" + url="" + awsAccessKeyId="" + awsAccessSecretKeyIdFile="" + protocol="http" + fileToUpload="" + dumpHeaderFile="/dev/null" + amazonHeaderFile="/dev/null" + contentType="text/plain" + while getopts "hvk:s:SH:T:a:c:" optionName; do + case "$optionName" in + h) printHelpAndExit 0;; + v) verbose="-v";; + k) awsAccessKeyId="$OPTARG";; + s) awsAccessSecretKeyIdFile="$OPTARG" + if [ ! -e "$awsAccessSecretKeyIdFile" ]; then + printErrorHelpAndExit "AWS Secret Key Id file does not exist" $userSpecifiedDataErrorExitCode + fi;; + S) protocol="https";; + H) dumpHeaderFile="$OPTARG";; + T) fileToUpload="$OPTARG";; + a) amazonHeaderFile="$OPTARG";; + c) contentType="$OPTARG";; + [?]) printErrorHelpAndExit "Option not recognised" $userSpecifiedDataErrorExitCode;; + esac + done + if [ 1 -eq $OPTIND ]; then + printErrorHelpAndExit "Internal Error: parseOptions or a parent method in the call stack was not called with $"@"." $internalErrorExitCode + fi + let "toShift = $OPTIND - 1" + shift $toShift + if [ $# -eq 0 ]; then + printErrorHelpAndExit "URL not specified" $userSpecifiedDataErrorExitCode + fi + url="$1" + verifyUrl + + if [ -z "$awsAccessSecretKeyIdFile" ]; then + printErrorHelpAndExit "AWS Secret Access Key file not specified" $userSpecifiedDataErrorExitCode + elif [ -z "$awsAccessKeyId" ]; then + printErrorHelpAndExit "AWS Access Key Id not specified" $userSpecifiedDataErrorExitCode + elif [ -z "$fileToUpload" ]; then + printErrorHelpAndExit "File to upload not specified" $userSpecifiedDataErrorExitCode + fi +} + +function prepareToRunCurl +{ + readonly verb="PUT" + if [ ! "-" = "$fileToUpload" ]; then + readonly contentMD5="$(base64EncodedMD5 "$fileToUpload")" + readonly verbToPass="-T \"$fileToUpload\"" + else + readonly contentMD5="" + readonly verbToPass="-T -" + fi +} + +readonly weAreKnownAs="$(basename $0)" +readonly ourPath="$(dirname $0)" + +readonly commonFunctions="$ourPath/s3-common-functions" +if [ -e "$commonFunctions" ]; then + source "$commonFunctions" +else + version="Unknown" + invalidEnvironmentExitCode=4 + printErrorHelpAndExit "$weAreKnownAs: Could not locate file s3-common-functions" $invalidEnvironmentExitCode +fi + +main "$@" diff --git a/vendor/node/node-0.4.7/include/config.h b/vendor/node/node-0.4.7/include/config.h deleted file mode 100644 index c9a046edf..000000000 --- a/vendor/node/node-0.4.7/include/config.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Configuration header created by Waf - do not edit */ -#ifndef _CONFIG_H_WAF -#define _CONFIG_H_WAF - -#define HAVE_OPENSSL 1 -#define HAVE_PTHREAD_CREATE 1 -#define HAVE_PTHREAD_ATFORK 1 -#define HAVE_FUTIMES 1 -/* #undef HAVE_READAHEAD */ -#define HAVE_FDATASYNC 1 -#define HAVE_PREADWRITE 1 -#define HAVE_SENDFILE 1 -/* #undef HAVE_SYNC_FILE_RANGE */ -/* #undef HAVE_SYS_INOTIFY_H */ -/* #undef HAVE_SYS_EPOLL_H */ -/* #undef HAVE_PORT_H */ -#define HAVE_POLL_H 1 -#define HAVE_POLL 1 -#define HAVE_SYS_EVENT_H 1 -#define HAVE_SYS_QUEUE_H 1 -#define HAVE_KQUEUE 1 -#define HAVE_SYS_SELECT_H 1 -#define HAVE_SELECT 1 -/* #undef HAVE_SYS_EVENTFD_H */ -/* #undef HAVE_CLOCK_SYSCALL */ -#define HAVE_NANOSLEEP 1 -#define HAVE_CEIL 1 -#define HAVE_CONFIG_H 1 -#endif /* _CONFIG_H_WAF */ diff --git a/vendor/node/node-0.4.7/include/eio.h b/vendor/node/node-0.4.7/include/eio.h deleted file mode 100644 index 1d597e1fa..000000000 --- a/vendor/node/node-0.4.7/include/eio.h +++ /dev/null @@ -1,356 +0,0 @@ -/* - * libeio API header - * - * Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modifica- - * tion, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- - * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- - * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- - * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Alternatively, the contents of this file may be used under the terms of - * the GNU General Public License ("GPL") version 2 or any later version, - * in which case the provisions of the GPL are applicable instead of - * the above. If you wish to allow the use of your version of this file - * only under the terms of the GPL and not to allow others to use your - * version of this file under the BSD license, indicate your decision - * by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL. If you do not delete the - * provisions above, a recipient may use your version of this file under - * either the BSD or the GPL. - */ - -#ifndef EIO_H_ -#define EIO_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -#ifdef __OpenBSD__ -# include -#endif - -#ifdef _WIN32 -# define uid_t int -# define gid_t int -#endif - -typedef struct eio_req eio_req; -typedef struct eio_dirent eio_dirent; - -typedef int (*eio_cb)(eio_req *req); - -#ifndef EIO_REQ_MEMBERS -# define EIO_REQ_MEMBERS -#endif - -#ifndef EIO_STRUCT_STAT -# ifdef _WIN32 -# define EIO_STRUCT_STAT struct _stati64 -# else -# define EIO_STRUCT_STAT struct stat -# endif -#endif - -#ifndef EIO_STRUCT_STATVFS -# define EIO_STRUCT_STATVFS struct statvfs -#endif - -/* for readdir */ - -/* eio_readdir flags */ -enum -{ - EIO_READDIR_DENTS = 0x01, /* ptr2 contains eio_dirents, not just the (unsorted) names */ - EIO_READDIR_DIRS_FIRST = 0x02, /* dirents gets sorted into a good stat() ing order to find directories first */ - EIO_READDIR_STAT_ORDER = 0x04, /* dirents gets sorted into a good stat() ing order to quickly stat all files */ - EIO_READDIR_FOUND_UNKNOWN = 0x80, /* set by eio_readdir when *_ARRAY was set and any TYPE=UNKNOWN's were found */ - - EIO_READDIR_CUSTOM1 = 0x100, /* for use by apps */ - EIO_READDIR_CUSTOM2 = 0x200 /* for use by apps */ -}; - -/* using "typical" values in the hope that the compiler will do something sensible */ -enum eio_dtype -{ - EIO_DT_UNKNOWN = 0, - EIO_DT_FIFO = 1, - EIO_DT_CHR = 2, - EIO_DT_MPC = 3, /* multiplexed char device (v7+coherent) */ - EIO_DT_DIR = 4, - EIO_DT_NAM = 5, /* xenix special named file */ - EIO_DT_BLK = 6, - EIO_DT_MPB = 7, /* multiplexed block device (v7+coherent) */ - EIO_DT_REG = 8, - EIO_DT_NWK = 9, /* HP-UX network special */ - EIO_DT_CMP = 9, /* VxFS compressed */ - EIO_DT_LNK = 10, - /* DT_SHAD = 11,*/ - EIO_DT_SOCK = 12, - EIO_DT_DOOR = 13, /* solaris door */ - EIO_DT_WHT = 14, - EIO_DT_MAX = 15 /* highest DT_VALUE ever, hopefully */ -}; - -struct eio_dirent -{ - int nameofs; /* offset of null-terminated name string in (char *)req->ptr2 */ - unsigned short namelen; /* size of filename without trailing 0 */ - unsigned char type; /* one of EIO_DT_* */ - signed char score; /* internal use */ - ino_t inode; /* the inode number, if available, otherwise unspecified */ -}; - -/* eio_msync flags */ -enum -{ - EIO_MS_ASYNC = 1, - EIO_MS_INVALIDATE = 2, - EIO_MS_SYNC = 4 -}; - -/* eio_mtouch flags */ - -enum -{ - EIO_MT_MODIFY = 1 -}; - -/* eio_sync_file_range flags */ - -enum -{ - EIO_SYNC_FILE_RANGE_WAIT_BEFORE = 1, - EIO_SYNC_FILE_RANGE_WRITE = 2, - EIO_SYNC_FILE_RANGE_WAIT_AFTER = 4 -}; - -typedef double eio_tstamp; /* feel free to use double in your code directly */ - -/* the eio request structure */ - -enum -{ - EIO_CUSTOM, - EIO_OPEN, EIO_CLOSE, EIO_DUP2, - EIO_READ, EIO_WRITE, - EIO_READAHEAD, EIO_SENDFILE, - EIO_STAT, EIO_LSTAT, EIO_FSTAT, - EIO_STATVFS, EIO_FSTATVFS, - EIO_TRUNCATE, EIO_FTRUNCATE, - EIO_UTIME, EIO_FUTIME, - EIO_CHMOD, EIO_FCHMOD, - EIO_CHOWN, EIO_FCHOWN, - EIO_SYNC, EIO_FSYNC, EIO_FDATASYNC, - EIO_MSYNC, EIO_MTOUCH, EIO_SYNC_FILE_RANGE, - EIO_MLOCK, EIO_MLOCKALL, - EIO_UNLINK, EIO_RMDIR, EIO_MKDIR, EIO_RENAME, - EIO_MKNOD, EIO_READDIR, - EIO_LINK, EIO_SYMLINK, EIO_READLINK, - EIO_GROUP, EIO_NOP, - EIO_BUSY -}; - -/* mlockall constants */ -enum -{ - EIO_MCL_CURRENT = 1, - EIO_MCL_FUTURE = 2, -}; - -/* request priorities */ - -enum { - EIO_PRI_MIN = -4, - EIO_PRI_MAX = 4, - EIO_PRI_DEFAULT = 0, -}; - -/* eio request structure */ -/* this structure is mostly read-only */ -/* when initialising it, all members must be zero-initialised */ -struct eio_req -{ - eio_req volatile *next; /* private ETP */ - - ssize_t result; /* result of syscall, e.g. result = read (... */ - off_t offs; /* read, write, truncate, readahead, sync_file_range: file offset */ - size_t size; /* read, write, readahead, sendfile, msync, mlock, sync_file_range: length */ - void *ptr1; /* all applicable requests: pathname, old name; readdir: optional eio_dirents */ - void *ptr2; /* all applicable requests: new name or memory buffer; readdir: name strings */ - eio_tstamp nv1; /* utime, futime: atime; busy: sleep time */ - eio_tstamp nv2; /* utime, futime: mtime */ - - int type; /* EIO_xxx constant ETP */ - int int1; /* all applicable requests: file descriptor; sendfile: output fd; open, msync, mlockall, readdir: flags */ - long int2; /* chown, fchown: uid; sendfile: input fd; open, chmod, mkdir, mknod: file mode, sync_file_range: flags */ - long int3; /* chown, fchown: gid; mknod: dev_t */ - int errorno; /* errno value on syscall return */ - - unsigned char flags; /* private */ - signed char pri; /* the priority */ - - void *data; - eio_cb finish; - void (*destroy)(eio_req *req); /* called when requets no longer needed */ - void (*feed)(eio_req *req); /* only used for group requests */ - - EIO_REQ_MEMBERS - - eio_req *grp, *grp_prev, *grp_next, *grp_first; /* private */ -}; - -/* _private_ request flags */ -enum { - EIO_FLAG_CANCELLED = 0x01, /* request was cancelled */ - EIO_FLAG_PTR1_FREE = 0x02, /* need to free(ptr1) */ - EIO_FLAG_PTR2_FREE = 0x04, /* need to free(ptr2) */ - EIO_FLAG_GROUPADD = 0x08 /* some request was added to the group */ -}; - -/* undocumented/unsupported/private helper */ -/*void eio_page_align (void **addr, size_t *length);*/ - -/* returns < 0 on error, errno set - * need_poll, if non-zero, will be called when results are available - * and eio_poll_cb needs to be invoked (it MUST NOT call eio_poll_cb itself). - * done_poll is called when the need to poll is gone. - */ -int eio_init (void (*want_poll)(void), void (*done_poll)(void)); - -/* must be called regularly to handle pending requests */ -/* returns 0 if all requests were handled, -1 if not, or the value of EIO_FINISH if != 0 */ -int eio_poll (void); - -/* stop polling if poll took longer than duration seconds */ -void eio_set_max_poll_time (eio_tstamp nseconds); -/* do not handle more then count requests in one call to eio_poll_cb */ -void eio_set_max_poll_reqs (unsigned int nreqs); - -/* set minimum required number - * maximum wanted number - * or maximum idle number of threads */ -void eio_set_min_parallel (unsigned int nthreads); -void eio_set_max_parallel (unsigned int nthreads); -void eio_set_max_idle (unsigned int nthreads); - -unsigned int eio_nreqs (void); /* number of requests in-flight */ -unsigned int eio_nready (void); /* number of not-yet handled requests */ -unsigned int eio_npending (void); /* numbe rof finished but unhandled requests */ -unsigned int eio_nthreads (void); /* number of worker threads in use currently */ - -/*****************************************************************************/ -/* convinience wrappers */ - -#ifndef EIO_NO_WRAPPERS -eio_req *eio_nop (int pri, eio_cb cb, void *data); /* does nothing except go through the whole process */ -eio_req *eio_busy (eio_tstamp delay, int pri, eio_cb cb, void *data); /* ties a thread for this long, simulating busyness */ -eio_req *eio_sync (int pri, eio_cb cb, void *data); -eio_req *eio_fsync (int fd, int pri, eio_cb cb, void *data); -eio_req *eio_fdatasync (int fd, int pri, eio_cb cb, void *data); -eio_req *eio_msync (void *addr, size_t length, int flags, int pri, eio_cb cb, void *data); -eio_req *eio_mtouch (void *addr, size_t length, int flags, int pri, eio_cb cb, void *data); -eio_req *eio_mlock (void *addr, size_t length, int pri, eio_cb cb, void *data); -eio_req *eio_mlockall (int flags, int pri, eio_cb cb, void *data); -eio_req *eio_sync_file_range (int fd, off_t offset, size_t nbytes, unsigned int flags, int pri, eio_cb cb, void *data); -eio_req *eio_close (int fd, int pri, eio_cb cb, void *data); -eio_req *eio_readahead (int fd, off_t offset, size_t length, int pri, eio_cb cb, void *data); -eio_req *eio_read (int fd, void *buf, size_t length, off_t offset, int pri, eio_cb cb, void *data); -eio_req *eio_write (int fd, void *buf, size_t length, off_t offset, int pri, eio_cb cb, void *data); -eio_req *eio_fstat (int fd, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ -eio_req *eio_fstatvfs (int fd, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ -eio_req *eio_futime (int fd, eio_tstamp atime, eio_tstamp mtime, int pri, eio_cb cb, void *data); -eio_req *eio_ftruncate (int fd, off_t offset, int pri, eio_cb cb, void *data); -eio_req *eio_fchmod (int fd, mode_t mode, int pri, eio_cb cb, void *data); -eio_req *eio_fchown (int fd, uid_t uid, gid_t gid, int pri, eio_cb cb, void *data); -eio_req *eio_dup2 (int fd, int fd2, int pri, eio_cb cb, void *data); -eio_req *eio_sendfile (int out_fd, int in_fd, off_t in_offset, size_t length, int pri, eio_cb cb, void *data); -eio_req *eio_open (const char *path, int flags, mode_t mode, int pri, eio_cb cb, void *data); -eio_req *eio_utime (const char *path, eio_tstamp atime, eio_tstamp mtime, int pri, eio_cb cb, void *data); -eio_req *eio_truncate (const char *path, off_t offset, int pri, eio_cb cb, void *data); -eio_req *eio_chown (const char *path, uid_t uid, gid_t gid, int pri, eio_cb cb, void *data); -eio_req *eio_chmod (const char *path, mode_t mode, int pri, eio_cb cb, void *data); -eio_req *eio_mkdir (const char *path, mode_t mode, int pri, eio_cb cb, void *data); -eio_req *eio_readdir (const char *path, int flags, int pri, eio_cb cb, void *data); /* result=ptr2 allocated dynamically */ -eio_req *eio_rmdir (const char *path, int pri, eio_cb cb, void *data); -eio_req *eio_unlink (const char *path, int pri, eio_cb cb, void *data); -eio_req *eio_readlink (const char *path, int pri, eio_cb cb, void *data); /* result=ptr2 allocated dynamically */ -eio_req *eio_stat (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ -eio_req *eio_lstat (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ -eio_req *eio_statvfs (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ -eio_req *eio_mknod (const char *path, mode_t mode, dev_t dev, int pri, eio_cb cb, void *data); -eio_req *eio_link (const char *path, const char *new_path, int pri, eio_cb cb, void *data); -eio_req *eio_symlink (const char *path, const char *new_path, int pri, eio_cb cb, void *data); -eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data); -eio_req *eio_custom (eio_cb execute, int pri, eio_cb cb, void *data); -#endif - -/*****************************************************************************/ -/* groups */ - -eio_req *eio_grp (eio_cb cb, void *data); -void eio_grp_feed (eio_req *grp, void (*feed)(eio_req *req), int limit); -void eio_grp_limit (eio_req *grp, int limit); -void eio_grp_add (eio_req *grp, eio_req *req); -void eio_grp_cancel (eio_req *grp); /* cancels all sub requests but not the group */ - -/*****************************************************************************/ -/* request api */ - -/* true if the request was cancelled, useful in the invoke callback */ -#define EIO_CANCELLED(req) ((req)->flags & EIO_FLAG_CANCELLED) - -#define EIO_RESULT(req) ((req)->result) -/* returns a pointer to the result buffer allocated by eio */ -#define EIO_BUF(req) ((req)->ptr2) -#define EIO_STAT_BUF(req) ((EIO_STRUCT_STAT *)EIO_BUF(req)) -#define EIO_STATVFS_BUF(req) ((EIO_STRUCT_STATVFS *)EIO_BUF(req)) -#define EIO_PATH(req) ((char *)(req)->ptr1) - -/* submit a request for execution */ -void eio_submit (eio_req *req); -/* cancel a request as soon fast as possible, if possible */ -void eio_cancel (eio_req *req); -/* destroy a request that has never been submitted */ -void eio_destroy (eio_req *req); - -/*****************************************************************************/ -/* convinience functions */ - -ssize_t eio_sendfile_sync (int ofd, int ifd, off_t offset, size_t count); - -/*****************************************************************************/ -/* export these so node_file can use these function instead of pread/write */ - -#if !HAVE_PREADWRITE -ssize_t eio__pread (int fd, void *buf, size_t count, off_t offset); -ssize_t eio__pwrite (int fd, void *buf, size_t count, off_t offset); -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/vendor/node/node-0.4.7/include/ev.h b/vendor/node/node-0.4.7/include/ev.h deleted file mode 100644 index 27c1778f1..000000000 --- a/vendor/node/node-0.4.7/include/ev.h +++ /dev/null @@ -1,829 +0,0 @@ -/* - * libev native API header - * - * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modifica- - * tion, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- - * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- - * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- - * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Alternatively, the contents of this file may be used under the terms of - * the GNU General Public License ("GPL") version 2 or any later version, - * in which case the provisions of the GPL are applicable instead of - * the above. If you wish to allow the use of your version of this file - * only under the terms of the GPL and not to allow others to use your - * version of this file under the BSD license, indicate your decision - * by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL. If you do not delete the - * provisions above, a recipient may use your version of this file under - * either the BSD or the GPL. - */ - -#ifndef EV_H_ -#define EV_H_ - -#ifdef __cplusplus -# define EV_CPP(x) x -#else -# define EV_CPP(x) -#endif - -EV_CPP(extern "C" {) - -/*****************************************************************************/ - -/* pre-4.0 compatibility */ -#ifndef EV_COMPAT3 -# define EV_COMPAT3 1 -#endif - -#ifndef EV_FEATURES -# define EV_FEATURES 0x7f -#endif - -#define EV_FEATURE_CODE ((EV_FEATURES) & 1) -#define EV_FEATURE_DATA ((EV_FEATURES) & 2) -#define EV_FEATURE_CONFIG ((EV_FEATURES) & 4) -#define EV_FEATURE_API ((EV_FEATURES) & 8) -#define EV_FEATURE_WATCHERS ((EV_FEATURES) & 16) -#define EV_FEATURE_BACKENDS ((EV_FEATURES) & 32) -#define EV_FEATURE_OS ((EV_FEATURES) & 64) - -/* these priorities are inclusive, higher priorities will be invoked earlier */ -#ifndef EV_MINPRI -# define EV_MINPRI (EV_FEATURE_CONFIG ? -2 : 0) -#endif -#ifndef EV_MAXPRI -# define EV_MAXPRI (EV_FEATURE_CONFIG ? +2 : 0) -#endif - -#ifndef EV_MULTIPLICITY -# define EV_MULTIPLICITY EV_FEATURE_CONFIG -#endif - -#ifndef EV_PERIODIC_ENABLE -# define EV_PERIODIC_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_STAT_ENABLE -# define EV_STAT_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_PREPARE_ENABLE -# define EV_PREPARE_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_CHECK_ENABLE -# define EV_CHECK_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_IDLE_ENABLE -# define EV_IDLE_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_FORK_ENABLE -# define EV_FORK_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_CLEANUP_ENABLE -# define EV_CLEANUP_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_SIGNAL_ENABLE -# define EV_SIGNAL_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_CHILD_ENABLE -# ifdef _WIN32 -# define EV_CHILD_ENABLE 0 -# else -# define EV_CHILD_ENABLE EV_FEATURE_WATCHERS -#endif -#endif - -#ifndef EV_ASYNC_ENABLE -# define EV_ASYNC_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_EMBED_ENABLE -# define EV_EMBED_ENABLE EV_FEATURE_WATCHERS -#endif - -#ifndef EV_WALK_ENABLE -# define EV_WALK_ENABLE 0 /* not yet */ -#endif - -/*****************************************************************************/ - -#if EV_CHILD_ENABLE && !EV_SIGNAL_ENABLE -# undef EV_SIGNAL_ENABLE -# define EV_SIGNAL_ENABLE 1 -#endif - -/*****************************************************************************/ - -typedef double ev_tstamp; - -#ifndef EV_ATOMIC_T -# include -# define EV_ATOMIC_T sig_atomic_t volatile -#endif - -#if EV_STAT_ENABLE -# ifdef _WIN32 -# include -# include -# endif -# include -#endif - -/* support multiple event loops? */ -#if EV_MULTIPLICITY -struct ev_loop; -# define EV_P struct ev_loop *loop /* a loop as sole parameter in a declaration */ -# define EV_P_ EV_P, /* a loop as first of multiple parameters */ -# define EV_A loop /* a loop as sole argument to a function call */ -# define EV_A_ EV_A, /* a loop as first of multiple arguments */ -# define EV_DEFAULT_UC ev_default_loop_uc_ () /* the default loop, if initialised, as sole arg */ -# define EV_DEFAULT_UC_ EV_DEFAULT_UC, /* the default loop as first of multiple arguments */ -# define EV_DEFAULT ev_default_loop (0) /* the default loop as sole arg */ -# define EV_DEFAULT_ EV_DEFAULT, /* the default loop as first of multiple arguments */ -#else -# define EV_P void -# define EV_P_ -# define EV_A -# define EV_A_ -# define EV_DEFAULT -# define EV_DEFAULT_ -# define EV_DEFAULT_UC -# define EV_DEFAULT_UC_ -# undef EV_EMBED_ENABLE -#endif - -/* EV_INLINE is used for functions in header files */ -#if __STDC_VERSION__ >= 199901L || __GNUC__ >= 3 -# define EV_INLINE static inline -#else -# define EV_INLINE static -#endif - -/* EV_PROTOTYPES can be used to switch of prototype declarations */ -#ifndef EV_PROTOTYPES -# define EV_PROTOTYPES 1 -#endif - -/*****************************************************************************/ - -#define EV_VERSION_MAJOR 4 -#define EV_VERSION_MINOR 4 - -/* eventmask, revents, events... */ -enum { - EV_UNDEF = 0xFFFFFFFF, /* guaranteed to be invalid */ - EV_NONE = 0x00, /* no events */ - EV_READ = 0x01, /* ev_io detected read will not block */ - EV_WRITE = 0x02, /* ev_io detected write will not block */ - EV__IOFDSET = 0x80, /* internal use only */ - EV_IO = EV_READ, /* alias for type-detection */ - EV_TIMER = 0x00000100, /* timer timed out */ -#if EV_COMPAT3 - EV_TIMEOUT = EV_TIMER, /* pre 4.0 API compatibility */ -#endif - EV_PERIODIC = 0x00000200, /* periodic timer timed out */ - EV_SIGNAL = 0x00000400, /* signal was received */ - EV_CHILD = 0x00000800, /* child/pid had status change */ - EV_STAT = 0x00001000, /* stat data changed */ - EV_IDLE = 0x00002000, /* event loop is idling */ - EV_PREPARE = 0x00004000, /* event loop about to poll */ - EV_CHECK = 0x00008000, /* event loop finished poll */ - EV_EMBED = 0x00010000, /* embedded event loop needs sweep */ - EV_FORK = 0x00020000, /* event loop resumed in child */ - EV_CLEANUP = 0x00040000, /* event loop resumed in child */ - EV_ASYNC = 0x00080000, /* async intra-loop signal */ - EV_CUSTOM = 0x01000000, /* for use by user code */ - EV_ERROR = 0x80000000 /* sent when an error occurs */ -}; - -/* can be used to add custom fields to all watchers, while losing binary compatibility */ -#ifndef EV_COMMON -# define EV_COMMON void *data; -#endif - -#ifndef EV_CB_DECLARE -# define EV_CB_DECLARE(type) void (*cb)(EV_P_ struct type *w, int revents); -#endif -#ifndef EV_CB_INVOKE -# define EV_CB_INVOKE(watcher,revents) (watcher)->cb (EV_A_ (watcher), (revents)) -#endif - -/* not official, do not use */ -#define EV_CB(type,name) void name (EV_P_ struct ev_ ## type *w, int revents) - -/* - * struct member types: - * private: you may look at them, but not change them, - * and they might not mean anything to you. - * ro: can be read anytime, but only changed when the watcher isn't active. - * rw: can be read and modified anytime, even when the watcher is active. - * - * some internal details that might be helpful for debugging: - * - * active is either 0, which means the watcher is not active, - * or the array index of the watcher (periodics, timers) - * or the array index + 1 (most other watchers) - * or simply 1 for watchers that aren't in some array. - * pending is either 0, in which case the watcher isn't, - * or the array index + 1 in the pendings array. - */ - -#if EV_MINPRI == EV_MAXPRI -# define EV_DECL_PRIORITY -#elif !defined (EV_DECL_PRIORITY) -# define EV_DECL_PRIORITY int priority; -#endif - -/* shared by all watchers */ -#define EV_WATCHER(type) \ - int active; /* private */ \ - int pending; /* private */ \ - EV_DECL_PRIORITY /* private */ \ - EV_COMMON /* rw */ \ - EV_CB_DECLARE (type) /* private */ - -#define EV_WATCHER_LIST(type) \ - EV_WATCHER (type) \ - struct ev_watcher_list *next; /* private */ - -#define EV_WATCHER_TIME(type) \ - EV_WATCHER (type) \ - ev_tstamp at; /* private */ - -/* base class, nothing to see here unless you subclass */ -typedef struct ev_watcher -{ - EV_WATCHER (ev_watcher) -} ev_watcher; - -/* base class, nothing to see here unless you subclass */ -typedef struct ev_watcher_list -{ - EV_WATCHER_LIST (ev_watcher_list) -} ev_watcher_list; - -/* base class, nothing to see here unless you subclass */ -typedef struct ev_watcher_time -{ - EV_WATCHER_TIME (ev_watcher_time) -} ev_watcher_time; - -/* invoked when fd is either EV_READable or EV_WRITEable */ -/* revent EV_READ, EV_WRITE */ -typedef struct ev_io -{ - EV_WATCHER_LIST (ev_io) - - int fd; /* ro */ - int events; /* ro */ -} ev_io; - -/* invoked after a specific time, repeatable (based on monotonic clock) */ -/* revent EV_TIMEOUT */ -typedef struct ev_timer -{ - EV_WATCHER_TIME (ev_timer) - - ev_tstamp repeat; /* rw */ -} ev_timer; - -/* invoked at some specific time, possibly repeating at regular intervals (based on UTC) */ -/* revent EV_PERIODIC */ -typedef struct ev_periodic -{ - EV_WATCHER_TIME (ev_periodic) - - ev_tstamp offset; /* rw */ - ev_tstamp interval; /* rw */ - ev_tstamp (*reschedule_cb)(struct ev_periodic *w, ev_tstamp now); /* rw */ -} ev_periodic; - -/* invoked when the given signal has been received */ -/* revent EV_SIGNAL */ -typedef struct ev_signal -{ - EV_WATCHER_LIST (ev_signal) - - int signum; /* ro */ -} ev_signal; - -/* invoked when sigchld is received and waitpid indicates the given pid */ -/* revent EV_CHILD */ -/* does not support priorities */ -typedef struct ev_child -{ - EV_WATCHER_LIST (ev_child) - - int flags; /* private */ - int pid; /* ro */ - int rpid; /* rw, holds the received pid */ - int rstatus; /* rw, holds the exit status, use the macros from sys/wait.h */ -} ev_child; - -#if EV_STAT_ENABLE -/* st_nlink = 0 means missing file or other error */ -# ifdef _WIN32 -typedef struct _stati64 ev_statdata; -# else -typedef struct stat ev_statdata; -# endif - -/* invoked each time the stat data changes for a given path */ -/* revent EV_STAT */ -typedef struct ev_stat -{ - EV_WATCHER_LIST (ev_stat) - - ev_timer timer; /* private */ - ev_tstamp interval; /* ro */ - const char *path; /* ro */ - ev_statdata prev; /* ro */ - ev_statdata attr; /* ro */ - - int wd; /* wd for inotify, fd for kqueue */ -} ev_stat; -#endif - -#if EV_IDLE_ENABLE -/* invoked when the nothing else needs to be done, keeps the process from blocking */ -/* revent EV_IDLE */ -typedef struct ev_idle -{ - EV_WATCHER (ev_idle) -} ev_idle; -#endif - -/* invoked for each run of the mainloop, just before the blocking call */ -/* you can still change events in any way you like */ -/* revent EV_PREPARE */ -typedef struct ev_prepare -{ - EV_WATCHER (ev_prepare) -} ev_prepare; - -/* invoked for each run of the mainloop, just after the blocking call */ -/* revent EV_CHECK */ -typedef struct ev_check -{ - EV_WATCHER (ev_check) -} ev_check; - -#if EV_FORK_ENABLE -/* the callback gets invoked before check in the child process when a fork was detected */ -/* revent EV_FORK */ -typedef struct ev_fork -{ - EV_WATCHER (ev_fork) -} ev_fork; -#endif - -#if EV_CLEANUP_ENABLE -/* is invoked just before the loop gets destroyed */ -/* revent EV_CLEANUP */ -typedef struct ev_cleanup -{ - EV_WATCHER (ev_cleanup) -} ev_cleanup; -#endif - -#if EV_EMBED_ENABLE -/* used to embed an event loop inside another */ -/* the callback gets invoked when the event loop has handled events, and can be 0 */ -typedef struct ev_embed -{ - EV_WATCHER (ev_embed) - - struct ev_loop *other; /* ro */ - ev_io io; /* private */ - ev_prepare prepare; /* private */ - ev_check check; /* unused */ - ev_timer timer; /* unused */ - ev_periodic periodic; /* unused */ - ev_idle idle; /* unused */ - ev_fork fork; /* private */ -#if EV_CLEANUP_ENABLE - ev_cleanup cleanup; /* unused */ -#endif -} ev_embed; -#endif - -#if EV_ASYNC_ENABLE -/* invoked when somebody calls ev_async_send on the watcher */ -/* revent EV_ASYNC */ -typedef struct ev_async -{ - EV_WATCHER (ev_async) - - EV_ATOMIC_T sent; /* private */ -} ev_async; - -# define ev_async_pending(w) (+(w)->sent) -#endif - -/* the presence of this union forces similar struct layout */ -union ev_any_watcher -{ - struct ev_watcher w; - struct ev_watcher_list wl; - - struct ev_io io; - struct ev_timer timer; - struct ev_periodic periodic; - struct ev_signal signal; - struct ev_child child; -#if EV_STAT_ENABLE - struct ev_stat stat; -#endif -#if EV_IDLE_ENABLE - struct ev_idle idle; -#endif - struct ev_prepare prepare; - struct ev_check check; -#if EV_FORK_ENABLE - struct ev_fork fork; -#endif -#if EV_CLEANUP_ENABLE - struct ev_cleanup cleanup; -#endif -#if EV_EMBED_ENABLE - struct ev_embed embed; -#endif -#if EV_ASYNC_ENABLE - struct ev_async async; -#endif -}; - -/* flag bits for ev_default_loop and ev_loop_new */ -enum { - /* the default */ - EVFLAG_AUTO = 0x00000000U, /* not quite a mask */ - /* flag bits */ - EVFLAG_NOENV = 0x01000000U, /* do NOT consult environment */ - EVFLAG_FORKCHECK = 0x02000000U, /* check for a fork in each iteration */ - /* debugging/feature disable */ - EVFLAG_NOINOTIFY = 0x00100000U, /* do not attempt to use inotify */ -#if EV_COMPAT3 - EVFLAG_NOSIGFD = 0, /* compatibility to pre-3.9 */ -#endif - EVFLAG_SIGNALFD = 0x00200000U, /* attempt to use signalfd */ - EVFLAG_NOSIGMASK = 0x00400000U /* avoid modifying the signal mask */ -}; - -/* method bits to be ored together */ -enum { - EVBACKEND_SELECT = 0x00000001U, /* about anywhere */ - EVBACKEND_POLL = 0x00000002U, /* !win */ - EVBACKEND_EPOLL = 0x00000004U, /* linux */ - EVBACKEND_KQUEUE = 0x00000008U, /* bsd */ - EVBACKEND_DEVPOLL = 0x00000010U, /* solaris 8 */ /* NYI */ - EVBACKEND_PORT = 0x00000020U, /* solaris 10 */ - EVBACKEND_ALL = 0x0000003FU, /* all known backends */ - EVBACKEND_MASK = 0x0000FFFFU /* all future backends */ -}; - -#if EV_PROTOTYPES -int ev_version_major (void); -int ev_version_minor (void); - -unsigned int ev_supported_backends (void); -unsigned int ev_recommended_backends (void); -unsigned int ev_embeddable_backends (void); - -ev_tstamp ev_time (void); -void ev_sleep (ev_tstamp delay); /* sleep for a while */ - -/* Sets the allocation function to use, works like realloc. - * It is used to allocate and free memory. - * If it returns zero when memory needs to be allocated, the library might abort - * or take some potentially destructive action. - * The default is your system realloc function. - */ -void ev_set_allocator (void *(*cb)(void *ptr, long size)); - -/* set the callback function to call on a - * retryable syscall error - * (such as failed select, poll, epoll_wait) - */ -void ev_set_syserr_cb (void (*cb)(const char *msg)); - -#if EV_MULTIPLICITY - -/* the default loop is the only one that handles signals and child watchers */ -/* you can call this as often as you like */ -struct ev_loop *ev_default_loop (unsigned int flags EV_CPP (= 0)); - -EV_INLINE struct ev_loop * -ev_default_loop_uc_ (void) -{ - extern struct ev_loop *ev_default_loop_ptr; - - return ev_default_loop_ptr; -} - -EV_INLINE int -ev_is_default_loop (EV_P) -{ - return EV_A == EV_DEFAULT_UC; -} - -/* create and destroy alternative loops that don't handle signals */ -struct ev_loop *ev_loop_new (unsigned int flags EV_CPP (= 0)); - -ev_tstamp ev_now (EV_P); /* time w.r.t. timers and the eventloop, updated after each poll */ - -#else - -int ev_default_loop (unsigned int flags EV_CPP (= 0)); /* returns true when successful */ - -EV_INLINE ev_tstamp -ev_now (void) -{ - extern ev_tstamp ev_rt_now; - - return ev_rt_now; -} - -/* looks weird, but ev_is_default_loop (EV_A) still works if this exists */ -EV_INLINE int -ev_is_default_loop (void) -{ - return 1; -} - -#endif /* multiplicity */ - -/* destroy event loops, also works for the default loop */ -void ev_loop_destroy (EV_P); - -/* this needs to be called after fork, to duplicate the loop */ -/* when you want to re-use it in the child */ -/* you can call it in either the parent or the child */ -/* you can actually call it at any time, anywhere :) */ -void ev_loop_fork (EV_P); - -unsigned int ev_backend (EV_P); /* backend in use by loop */ - -void ev_now_update (EV_P); /* update event loop time */ - -#if EV_WALK_ENABLE -/* walk (almost) all watchers in the loop of a given type, invoking the */ -/* callback on every such watcher. The callback might stop the watcher, */ -/* but do nothing else with the loop */ -void ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)); -#endif - -#endif /* prototypes */ - -/* ev_run flags values */ -enum { - EVRUN_NOWAIT = 1, /* do not block/wait */ - EVRUN_ONCE = 2 /* block *once* only */ -}; - -/* ev_break how values */ -enum { - EVBREAK_CANCEL = 0, /* undo unloop */ - EVBREAK_ONE = 1, /* unloop once */ - EVBREAK_ALL = 2 /* unloop all loops */ -}; - -#if EV_PROTOTYPES -void ev_run (EV_P_ int flags EV_CPP (= 0)); -void ev_break (EV_P_ int how EV_CPP (= EVBREAK_ONE)); /* break out of the loop */ - -/* - * ref/unref can be used to add or remove a refcount on the mainloop. every watcher - * keeps one reference. if you have a long-running watcher you never unregister that - * should not keep ev_loop from running, unref() after starting, and ref() before stopping. - */ -void ev_ref (EV_P); -void ev_unref (EV_P); - -/* - * convenience function, wait for a single event, without registering an event watcher - * if timeout is < 0, do wait indefinitely - */ -void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg); - -# if EV_FEATURE_API -unsigned int ev_iteration (EV_P); /* number of loop iterations */ -unsigned int ev_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */ -void ev_verify (EV_P); /* abort if loop data corrupted */ - -void ev_set_io_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */ -void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */ - -/* advanced stuff for threading etc. support, see docs */ -void ev_set_userdata (EV_P_ void *data); -void *ev_userdata (EV_P); -void ev_set_invoke_pending_cb (EV_P_ void (*invoke_pending_cb)(EV_P)); -void ev_set_loop_release_cb (EV_P_ void (*release)(EV_P), void (*acquire)(EV_P)); - -unsigned int ev_pending_count (EV_P); /* number of pending events, if any */ -void ev_invoke_pending (EV_P); /* invoke all pending watchers */ - -/* - * stop/start the timer handling. - */ -void ev_suspend (EV_P); -void ev_resume (EV_P); -#endif - -#endif - -/* these may evaluate ev multiple times, and the other arguments at most once */ -/* either use ev_init + ev_TYPE_set, or the ev_TYPE_init macro, below, to first initialise a watcher */ -#define ev_init(ev,cb_) do { \ - ((ev_watcher *)(void *)(ev))->active = \ - ((ev_watcher *)(void *)(ev))->pending = 0; \ - ev_set_priority ((ev), 0); \ - ev_set_cb ((ev), cb_); \ -} while (0) - -#define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_) | EV__IOFDSET; } while (0) -#define ev_timer_set(ev,after_,repeat_) do { ((ev_watcher_time *)(ev))->at = (after_); (ev)->repeat = (repeat_); } while (0) -#define ev_periodic_set(ev,ofs_,ival_,rcb_) do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb = (rcb_); } while (0) -#define ev_signal_set(ev,signum_) do { (ev)->signum = (signum_); } while (0) -#define ev_child_set(ev,pid_,trace_) do { (ev)->pid = (pid_); (ev)->flags = !!(trace_); } while (0) -#define ev_stat_set(ev,path_,interval_) do { (ev)->path = (path_); (ev)->interval = (interval_); (ev)->wd = -2; } while (0) -#define ev_idle_set(ev) /* nop, yes, this is a serious in-joke */ -#define ev_prepare_set(ev) /* nop, yes, this is a serious in-joke */ -#define ev_check_set(ev) /* nop, yes, this is a serious in-joke */ -#define ev_embed_set(ev,other_) do { (ev)->other = (other_); } while (0) -#define ev_fork_set(ev) /* nop, yes, this is a serious in-joke */ -#define ev_cleanup_set(ev) /* nop, yes, this is a serious in-joke */ -#define ev_async_set(ev) /* nop, yes, this is a serious in-joke */ - -#define ev_io_init(ev,cb,fd,events) do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } while (0) -#define ev_timer_init(ev,cb,after,repeat) do { ev_init ((ev), (cb)); ev_timer_set ((ev),(after),(repeat)); } while (0) -#define ev_periodic_init(ev,cb,ofs,ival,rcb) do { ev_init ((ev), (cb)); ev_periodic_set ((ev),(ofs),(ival),(rcb)); } while (0) -#define ev_signal_init(ev,cb,signum) do { ev_init ((ev), (cb)); ev_signal_set ((ev), (signum)); } while (0) -#define ev_child_init(ev,cb,pid,trace) do { ev_init ((ev), (cb)); ev_child_set ((ev),(pid),(trace)); } while (0) -#define ev_stat_init(ev,cb,path,interval) do { ev_init ((ev), (cb)); ev_stat_set ((ev),(path),(interval)); } while (0) -#define ev_idle_init(ev,cb) do { ev_init ((ev), (cb)); ev_idle_set ((ev)); } while (0) -#define ev_prepare_init(ev,cb) do { ev_init ((ev), (cb)); ev_prepare_set ((ev)); } while (0) -#define ev_check_init(ev,cb) do { ev_init ((ev), (cb)); ev_check_set ((ev)); } while (0) -#define ev_embed_init(ev,cb,other) do { ev_init ((ev), (cb)); ev_embed_set ((ev),(other)); } while (0) -#define ev_fork_init(ev,cb) do { ev_init ((ev), (cb)); ev_fork_set ((ev)); } while (0) -#define ev_cleanup_init(ev,cb) do { ev_init ((ev), (cb)); ev_cleanup_set ((ev)); } while (0) -#define ev_async_init(ev,cb) do { ev_init ((ev), (cb)); ev_async_set ((ev)); } while (0) - -#define ev_is_pending(ev) (0 + ((ev_watcher *)(void *)(ev))->pending) /* ro, true when watcher is waiting for callback invocation */ -#define ev_is_active(ev) (0 + ((ev_watcher *)(void *)(ev))->active) /* ro, true when the watcher has been started */ - -#define ev_cb(ev) (ev)->cb /* rw */ - -#if EV_MINPRI == EV_MAXPRI -# define ev_priority(ev) ((ev), EV_MINPRI) -# define ev_set_priority(ev,pri) ((ev), (pri)) -#else -# define ev_priority(ev) (+(((ev_watcher *)(void *)(ev))->priority)) -# define ev_set_priority(ev,pri) ( (ev_watcher *)(void *)(ev))->priority = (pri) -#endif - -#define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at) - -#ifndef ev_set_cb -# define ev_set_cb(ev,cb_) ev_cb (ev) = (cb_) -#endif - -/* stopping (enabling, adding) a watcher does nothing if it is already running */ -/* stopping (disabling, deleting) a watcher does nothing unless its already running */ -#if EV_PROTOTYPES - -/* feeds an event into a watcher as if the event actually occured */ -/* accepts any ev_watcher type */ -void ev_feed_event (EV_P_ void *w, int revents); -void ev_feed_fd_event (EV_P_ int fd, int revents); -#if EV_SIGNAL_ENABLE -void ev_feed_signal (int signum); -void ev_feed_signal_event (EV_P_ int signum); -#endif -void ev_invoke (EV_P_ void *w, int revents); -int ev_clear_pending (EV_P_ void *w); - -void ev_io_start (EV_P_ ev_io *w); -void ev_io_stop (EV_P_ ev_io *w); - -void ev_timer_start (EV_P_ ev_timer *w); -void ev_timer_stop (EV_P_ ev_timer *w); -/* stops if active and no repeat, restarts if active and repeating, starts if inactive and repeating */ -void ev_timer_again (EV_P_ ev_timer *w); -/* return remaining time */ -ev_tstamp ev_timer_remaining (EV_P_ ev_timer *w); - -#if EV_PERIODIC_ENABLE -void ev_periodic_start (EV_P_ ev_periodic *w); -void ev_periodic_stop (EV_P_ ev_periodic *w); -void ev_periodic_again (EV_P_ ev_periodic *w); -#endif - -/* only supported in the default loop */ -#if EV_SIGNAL_ENABLE -void ev_signal_start (EV_P_ ev_signal *w); -void ev_signal_stop (EV_P_ ev_signal *w); -#endif - -/* only supported in the default loop */ -# if EV_CHILD_ENABLE -void ev_child_start (EV_P_ ev_child *w); -void ev_child_stop (EV_P_ ev_child *w); -# endif - -# if EV_STAT_ENABLE -void ev_stat_start (EV_P_ ev_stat *w); -void ev_stat_stop (EV_P_ ev_stat *w); -void ev_stat_stat (EV_P_ ev_stat *w); -# endif - -# if EV_IDLE_ENABLE -void ev_idle_start (EV_P_ ev_idle *w); -void ev_idle_stop (EV_P_ ev_idle *w); -# endif - -#if EV_PREPARE_ENABLE -void ev_prepare_start (EV_P_ ev_prepare *w); -void ev_prepare_stop (EV_P_ ev_prepare *w); -#endif - -#if EV_CHECK_ENABLE -void ev_check_start (EV_P_ ev_check *w); -void ev_check_stop (EV_P_ ev_check *w); -#endif - -# if EV_FORK_ENABLE -void ev_fork_start (EV_P_ ev_fork *w); -void ev_fork_stop (EV_P_ ev_fork *w); -# endif - -# if EV_CLEANUP_ENABLE -void ev_cleanup_start (EV_P_ ev_cleanup *w); -void ev_cleanup_stop (EV_P_ ev_cleanup *w); -# endif - -# if EV_EMBED_ENABLE -/* only supported when loop to be embedded is in fact embeddable */ -void ev_embed_start (EV_P_ ev_embed *w); -void ev_embed_stop (EV_P_ ev_embed *w); -void ev_embed_sweep (EV_P_ ev_embed *w); -# endif - -# if EV_ASYNC_ENABLE -void ev_async_start (EV_P_ ev_async *w); -void ev_async_stop (EV_P_ ev_async *w); -void ev_async_send (EV_P_ ev_async *w); -# endif - -#if EV_COMPAT3 - #define EVLOOP_NONBLOCK EVRUN_NOWAIT - #define EVLOOP_ONESHOT EVRUN_ONCE - #define EVUNLOOP_CANCEL EVBREAK_CANCEL - #define EVUNLOOP_ONE EVBREAK_ONE - #define EVUNLOOP_ALL EVBREAK_ALL - #if EV_PROTOTYPES - EV_INLINE void ev_loop (EV_P_ int flags) { ev_run (EV_A_ flags); } - EV_INLINE void ev_unloop (EV_P_ int how ) { ev_break (EV_A_ how ); } - EV_INLINE void ev_default_destroy (void) { ev_loop_destroy (EV_DEFAULT); } - EV_INLINE void ev_default_fork (void) { ev_loop_fork (EV_DEFAULT); } - #if EV_FEATURE_API - EV_INLINE unsigned int ev_loop_count (EV_P) { return ev_iteration (EV_A); } - EV_INLINE unsigned int ev_loop_depth (EV_P) { return ev_depth (EV_A); } - EV_INLINE void ev_loop_verify (EV_P) { ev_verify (EV_A); } - #endif - #endif -#else - typedef struct ev_loop ev_loop; -#endif - -#endif - -EV_CPP(}) - -#endif - diff --git a/vendor/node/node-0.4.7/include/node.h b/vendor/node/node-0.4.7/include/node.h deleted file mode 100644 index 14d726de2..000000000 --- a/vendor/node/node-0.4.7/include/node.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef SRC_NODE_H_ -#define SRC_NODE_H_ - -#include -#include -#include -#include /* struct stat */ -#include - -#include - -#ifndef NODE_STRINGIFY -#define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n) -#define NODE_STRINGIFY_HELPER(n) #n -#endif - -namespace node { - -int Start (int argc, char *argv[]); - -#define NODE_PSYMBOL(s) Persistent::New(String::NewSymbol(s)) - -/* Converts a unixtime to V8 Date */ -#define NODE_UNIXTIME_V8(t) v8::Date::New(1000*static_cast(t)) -#define NODE_V8_UNIXTIME(v) (static_cast((v)->NumberValue())/1000.0); - -#define NODE_DEFINE_CONSTANT(target, constant) \ - (target)->Set(v8::String::NewSymbol(#constant), \ - v8::Integer::New(constant), \ - static_cast(v8::ReadOnly|v8::DontDelete)) - -#define NODE_SET_METHOD(obj, name, callback) \ - obj->Set(v8::String::NewSymbol(name), \ - v8::FunctionTemplate::New(callback)->GetFunction()) - -#define NODE_SET_PROTOTYPE_METHOD(templ, name, callback) \ -do { \ - v8::Local __callback##_SIG = v8::Signature::New(templ); \ - v8::Local __callback##_TEM = \ - v8::FunctionTemplate::New(callback, v8::Handle(), \ - __callback##_SIG); \ - templ->PrototypeTemplate()->Set(v8::String::NewSymbol(name), \ - __callback##_TEM); \ -} while (0) - -enum encoding {ASCII, UTF8, BASE64, UCS2, BINARY}; -enum encoding ParseEncoding(v8::Handle encoding_v, - enum encoding _default = BINARY); -void FatalException(v8::TryCatch &try_catch); -void DisplayExceptionLine(v8::TryCatch &try_catch); // hack - -v8::Local Encode(const void *buf, size_t len, - enum encoding encoding = BINARY); - -// Returns -1 if the handle was not valid for decoding -ssize_t DecodeBytes(v8::Handle, - enum encoding encoding = BINARY); - -// returns bytes written. -ssize_t DecodeWrite(char *buf, - size_t buflen, - v8::Handle, - enum encoding encoding = BINARY); - -// Use different stat structs & calls on windows and posix; -// on windows, _stati64 is utf-8 and big file aware. -#if __POSIX__ -# define NODE_STAT stat -# define NODE_FSTAT fstat -# define NODE_STAT_STRUCT struct stat -#else // __MINGW32__ -# define NODE_STAT _stati64 -# define NODE_FSTAT _fstati64 -# define NODE_STAT_STRUCT struct _stati64 -#endif - -v8::Local BuildStatsObject(NODE_STAT_STRUCT *s); - - -/** - * Call this when your constructor is invoked as a regular function, e.g. Buffer(10) instead of new Buffer(10). - * @param constructorTemplate Constructor template to instantiate from. - * @param args The arguments object passed to your constructor. - * @see v8::Arguments::IsConstructCall - */ -v8::Handle FromConstructorTemplate(v8::Persistent& constructorTemplate, const v8::Arguments& args); - - -static inline v8::Persistent* cb_persist( - const v8::Local &v) { - v8::Persistent *fn = new v8::Persistent(); - *fn = v8::Persistent::New(v8::Local::Cast(v)); - return fn; -} - -static inline v8::Persistent* cb_unwrap(void *data) { - v8::Persistent *cb = - reinterpret_cast*>(data); - assert((*cb)->IsFunction()); - return cb; -} - -static inline void cb_destroy(v8::Persistent * cb) { - cb->Dispose(); - delete cb; -} - -v8::Local ErrnoException(int errorno, - const char *syscall = NULL, - const char *msg = "", - const char *path = NULL); - -const char *signo_string(int errorno); - -struct node_module_struct { - int version; - void *dso_handle; - const char *filename; - void (*register_func) (v8::Handle target); - const char *modname; -}; - -node_module_struct* get_builtin_module(const char *name); - -/** - * When this version number is changed, node.js will refuse - * to load older modules. This should be done whenever - * an API is broken in the C++ side, including in v8 or - * other dependencies - */ -#define NODE_MODULE_VERSION (1) - -#define NODE_STANDARD_MODULE_STUFF \ - NODE_MODULE_VERSION, \ - NULL, \ - __FILE__ - -#define NODE_MODULE(modname, regfunc) \ - node::node_module_struct modname ## _module = \ - { \ - NODE_STANDARD_MODULE_STUFF, \ - regfunc, \ - NODE_STRINGIFY(modname) \ - }; - -#define NODE_MODULE_DECL(modname) \ - extern node::node_module_struct modname ## _module; - - -} // namespace node -#endif // SRC_NODE_H_ diff --git a/vendor/node/node-0.4.7/include/node_buffer.h b/vendor/node/node-0.4.7/include/node_buffer.h deleted file mode 100644 index 91f93dc1d..000000000 --- a/vendor/node/node-0.4.7/include/node_buffer.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef NODE_BUFFER_H_ -#define NODE_BUFFER_H_ - -#include -#include -#include -#include - -namespace node { - -/* A buffer is a chunk of memory stored outside the V8 heap, mirrored by an - * object in javascript. The object is not totally opaque, one can access - * individual bytes with [] and slice it into substrings or sub-buffers - * without copying memory. - * - * // return an ascii encoded string - no memory is copied - * buffer.asciiSlice(0, 3) - */ - -/* - The C++ API for Buffer changed radically between v0.2 and v0.3, in fact - it was the reason for bumping the version. In v0.2 JavaScript Buffers and - C++ Buffers were in one-to-one correspondence via ObjectWrap. We found - that it was faster to expose the C++ Buffers to JavaScript as a - "SlowBuffer" which is used as a private backend to pure JavaScript - "Buffer" objects - a 'Buffer' in v0.3 might look like this: - - { _parent: s, - _offset: 520, - length: 5 } - - Migrating code C++ Buffer code from v0.2 to v0.3 is difficult. Here are - some tips: - - buffer->data() calls should become Buffer::Data(buffer) calls. - - buffer->length() calls should become Buffer::Length(buffer) calls. - - There should not be any ObjectWrap::Unwrap() calls. You should - not be storing pointers to Buffer objects at all - as they are - now considered internal structures. Instead consider making a - JavaScript reference to the buffer. - - See the source code node-png as an example of a module which successfully - compiles on both v0.2 and v0.3 while making heavy use of the C++ Buffer - API. - - */ - - -class Buffer : public ObjectWrap { - public: - - static bool HasInstance(v8::Handle val); - - static inline char* Data(v8::Handle obj) { - return (char*)obj->GetIndexedPropertiesExternalArrayData(); - } - - static inline char* Data(Buffer *b) { - return Buffer::Data(b->handle_); - } - - static inline size_t Length(v8::Handle obj) { - return (size_t)obj->GetIndexedPropertiesExternalArrayDataLength(); - } - - static inline size_t Length(Buffer *b) { - return Buffer::Length(b->handle_); - } - - - ~Buffer(); - - typedef void (*free_callback)(char *data, void *hint); - - // C++ API for constructing fast buffer - static v8::Handle New(v8::Handle string); - - static void Initialize(v8::Handle target); - static Buffer* New(size_t length); // public constructor - static Buffer* New(char *data, size_t len); // public constructor - static Buffer* New(char *data, size_t length, - free_callback callback, void *hint); // public constructor - - private: - static v8::Persistent constructor_template; - - static v8::Handle New(const v8::Arguments &args); - static v8::Handle BinarySlice(const v8::Arguments &args); - static v8::Handle AsciiSlice(const v8::Arguments &args); - static v8::Handle Base64Slice(const v8::Arguments &args); - static v8::Handle Utf8Slice(const v8::Arguments &args); - static v8::Handle Ucs2Slice(const v8::Arguments &args); - static v8::Handle BinaryWrite(const v8::Arguments &args); - static v8::Handle Base64Write(const v8::Arguments &args); - static v8::Handle AsciiWrite(const v8::Arguments &args); - static v8::Handle Utf8Write(const v8::Arguments &args); - static v8::Handle Ucs2Write(const v8::Arguments &args); - static v8::Handle ByteLength(const v8::Arguments &args); - static v8::Handle MakeFastBuffer(const v8::Arguments &args); - static v8::Handle Copy(const v8::Arguments &args); - - Buffer(v8::Handle wrapper, size_t length); - void Replace(char *data, size_t length, free_callback callback, void *hint); - - size_t length_; - char* data_; - free_callback callback_; - void* callback_hint_; -}; - - -} // namespace node buffer - -#endif // NODE_BUFFER_H_ diff --git a/vendor/node/node-0.4.7/include/node_config.h b/vendor/node/node-0.4.7/include/node_config.h deleted file mode 100644 index 3e092ad64..000000000 --- a/vendor/node/node-0.4.7/include/node_config.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef NODE_CONFIG_H -#define NODE_CONFIG_H - -#define NODE_CFLAGS "-rdynamic -D_GNU_SOURCE -DHAVE_CONFIG_H=1 -pthread -arch x86_64 -g -O3 -DHAVE_OPENSSL=1 -DEV_FORK_ENABLE=0 -DEV_EMBED_ENABLE=0 -DEV_MULTIPLICITY=0 -DX_STACKSIZE=65536 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DEV_MULTIPLICITY=0 -DHAVE_FDATASYNC=0 -DPLATFORM=\"darwin\" -D__POSIX__=1 -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -DNDEBUG -I/tmp/n47/include/node" -#define NODE_PREFIX "/tmp/n47" - -#endif /* NODE_CONFIG_H */ diff --git a/vendor/node/node-0.4.7/include/node_events.h b/vendor/node/node-0.4.7/include/node_events.h deleted file mode 100644 index fc8718937..000000000 --- a/vendor/node/node-0.4.7/include/node_events.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef SRC_EVENTS_H_ -#define SRC_EVENTS_H_ - -#include -#include - -namespace node { - -class EventEmitter : public ObjectWrap { - public: - static void Initialize(v8::Local ctemplate); - static v8::Persistent constructor_template; - - bool Emit(v8::Handle event, - int argc, - v8::Handle argv[]); - - protected: - EventEmitter() : ObjectWrap () { } -}; - -} // namespace node -#endif // SRC_EVENTS_H_ diff --git a/vendor/node/node-0.4.7/include/node_object_wrap.h b/vendor/node/node-0.4.7/include/node_object_wrap.h deleted file mode 100644 index b10755498..000000000 --- a/vendor/node/node-0.4.7/include/node_object_wrap.h +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef object_wrap_h -#define object_wrap_h - -#include -#include - -namespace node { - -class ObjectWrap { - public: - ObjectWrap ( ) { - refs_ = 0; - } - - - virtual ~ObjectWrap ( ) { - if (!handle_.IsEmpty()) { - assert(handle_.IsNearDeath()); - handle_.ClearWeak(); - handle_->SetInternalField(0, v8::Undefined()); - handle_.Dispose(); - handle_.Clear(); - } - } - - - template - static inline T* Unwrap (v8::Handle handle) { - assert(!handle.IsEmpty()); - assert(handle->InternalFieldCount() > 0); - return static_cast(handle->GetPointerFromInternalField(0)); - } - - - v8::Persistent handle_; // ro - - protected: - inline void Wrap (v8::Handle handle) { - assert(handle_.IsEmpty()); - assert(handle->InternalFieldCount() > 0); - handle_ = v8::Persistent::New(handle); - handle_->SetPointerInInternalField(0, this); - MakeWeak(); - } - - - inline void MakeWeak (void) { - handle_.MakeWeak(this, WeakCallback); - } - - /* Ref() marks the object as being attached to an event loop. - * Refed objects will not be garbage collected, even if - * all references are lost. - */ - virtual void Ref() { - assert(!handle_.IsEmpty()); - refs_++; - handle_.ClearWeak(); - } - - /* Unref() marks an object as detached from the event loop. This is its - * default state. When an object with a "weak" reference changes from - * attached to detached state it will be freed. Be careful not to access - * the object after making this call as it might be gone! - * (A "weak reference" means an object that only has a - * persistant handle.) - * - * DO NOT CALL THIS FROM DESTRUCTOR - */ - virtual void Unref() { - assert(!handle_.IsEmpty()); - assert(!handle_.IsWeak()); - assert(refs_ > 0); - if (--refs_ == 0) { MakeWeak(); } - } - - - int refs_; // ro - - - private: - static void WeakCallback (v8::Persistent value, void *data) { - ObjectWrap *obj = static_cast(data); - assert(value == obj->handle_); - assert(!obj->refs_); - assert(value.IsNearDeath()); - delete obj; - } -}; - -} // namespace node -#endif // object_wrap_h diff --git a/vendor/node/node-0.4.7/include/node_version.h b/vendor/node/node-0.4.7/include/node_version.h deleted file mode 100644 index d5c81d21e..000000000 --- a/vendor/node/node-0.4.7/include/node_version.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - -#include "node_config.h" - -#ifndef NODE_VERSION_H -#define NODE_VERSION_H - -#define NODE_MAJOR_VERSION 0 -#define NODE_MINOR_VERSION 4 -#define NODE_PATCH_VERSION 7 -#define NODE_VERSION_IS_RELEASE 1 - -#ifndef NODE_STRINGIFY -#define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n) -#define NODE_STRINGIFY_HELPER(n) #n -#endif - -#if NODE_VERSION_IS_RELEASE -# define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \ - NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ - NODE_STRINGIFY(NODE_PATCH_VERSION) -#else -# define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \ - NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ - NODE_STRINGIFY(NODE_PATCH_VERSION) "-pre" -#endif - -#define NODE_VERSION "v" NODE_VERSION_STRING - - -#define NODE_VERSION_AT_LEAST(major, minor, patch) \ - (( (major) < NODE_MAJOR_VERSION) \ - || ((major) == NODE_MAJOR_VERSION && (minor) < NODE_MINOR_VERSION) \ - || ((major) == NODE_MAJOR_VERSION && (minor) == NODE_MINOR_VERSION && (patch) <= NODE_PATCH_VERSION)) - -#endif /* NODE_VERSION_H */ diff --git a/vendor/node/node-0.4.7/include/v8-debug.h b/vendor/node/node-0.4.7/include/v8-debug.h deleted file mode 100644 index f17b84855..000000000 --- a/vendor/node/node-0.4.7/include/v8-debug.h +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright 2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef V8_V8_DEBUG_H_ -#define V8_V8_DEBUG_H_ - -#include "v8.h" - -#ifdef _WIN32 -typedef int int32_t; -typedef unsigned int uint32_t; -typedef unsigned short uint16_t; // NOLINT -typedef long long int64_t; // NOLINT - -// Setup for Windows DLL export/import. See v8.h in this directory for -// information on how to build/use V8 as a DLL. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define EXPORT __declspec(dllexport) -#elif USING_V8_SHARED -#define EXPORT __declspec(dllimport) -#else -#define EXPORT -#endif - -#else // _WIN32 - -// Setup for Linux shared library export. See v8.h in this directory for -// information on how to build/use V8 as shared library. -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) -#define EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - - -/** - * Debugger support for the V8 JavaScript engine. - */ -namespace v8 { - -// Debug events which can occur in the V8 JavaScript engine. -enum DebugEvent { - Break = 1, - Exception = 2, - NewFunction = 3, - BeforeCompile = 4, - AfterCompile = 5, - ScriptCollected = 6, - BreakForCommand = 7 -}; - - -class EXPORT Debug { - public: - /** - * A client object passed to the v8 debugger whose ownership will be taken by - * it. v8 is always responsible for deleting the object. - */ - class ClientData { - public: - virtual ~ClientData() {} - }; - - - /** - * A message object passed to the debug message handler. - */ - class Message { - public: - /** - * Check type of message. - */ - virtual bool IsEvent() const = 0; - virtual bool IsResponse() const = 0; - virtual DebugEvent GetEvent() const = 0; - - /** - * Indicate whether this is a response to a continue command which will - * start the VM running after this is processed. - */ - virtual bool WillStartRunning() const = 0; - - /** - * Access to execution state and event data. Don't store these cross - * callbacks as their content becomes invalid. These objects are from the - * debugger event that started the debug message loop. - */ - virtual Handle GetExecutionState() const = 0; - virtual Handle GetEventData() const = 0; - - /** - * Get the debugger protocol JSON. - */ - virtual Handle GetJSON() const = 0; - - /** - * Get the context active when the debug event happened. Note this is not - * the current active context as the JavaScript part of the debugger is - * running in it's own context which is entered at this point. - */ - virtual Handle GetEventContext() const = 0; - - /** - * Client data passed with the corresponding request if any. This is the - * client_data data value passed into Debug::SendCommand along with the - * request that led to the message or NULL if the message is an event. The - * debugger takes ownership of the data and will delete it even if there is - * no message handler. - */ - virtual ClientData* GetClientData() const = 0; - - virtual ~Message() {} - }; - - - /** - * An event details object passed to the debug event listener. - */ - class EventDetails { - public: - /** - * Event type. - */ - virtual DebugEvent GetEvent() const = 0; - - /** - * Access to execution state and event data of the debug event. Don't store - * these cross callbacks as their content becomes invalid. - */ - virtual Handle GetExecutionState() const = 0; - virtual Handle GetEventData() const = 0; - - /** - * Get the context active when the debug event happened. Note this is not - * the current active context as the JavaScript part of the debugger is - * running in it's own context which is entered at this point. - */ - virtual Handle GetEventContext() const = 0; - - /** - * Client data passed with the corresponding callbak whet it was registered. - */ - virtual Handle GetCallbackData() const = 0; - - /** - * Client data passed to DebugBreakForCommand function. The - * debugger takes ownership of the data and will delete it even if - * there is no message handler. - */ - virtual ClientData* GetClientData() const = 0; - - virtual ~EventDetails() {} - }; - - - /** - * Debug event callback function. - * - * \param event the type of the debug event that triggered the callback - * (enum DebugEvent) - * \param exec_state execution state (JavaScript object) - * \param event_data event specific data (JavaScript object) - * \param data value passed by the user to SetDebugEventListener - */ - typedef void (*EventCallback)(DebugEvent event, - Handle exec_state, - Handle event_data, - Handle data); - - /** - * Debug event callback function. - * - * \param event_details object providing information about the debug event - * - * A EventCallback2 does not take possession of the event data, - * and must not rely on the data persisting after the handler returns. - */ - typedef void (*EventCallback2)(const EventDetails& event_details); - - /** - * Debug message callback function. - * - * \param message the debug message handler message object - * \param length length of the message - * \param client_data the data value passed when registering the message handler - - * A MessageHandler does not take possession of the message string, - * and must not rely on the data persisting after the handler returns. - * - * This message handler is deprecated. Use MessageHandler2 instead. - */ - typedef void (*MessageHandler)(const uint16_t* message, int length, - ClientData* client_data); - - /** - * Debug message callback function. - * - * \param message the debug message handler message object - - * A MessageHandler does not take possession of the message data, - * and must not rely on the data persisting after the handler returns. - */ - typedef void (*MessageHandler2)(const Message& message); - - /** - * Debug host dispatch callback function. - */ - typedef void (*HostDispatchHandler)(); - - /** - * Callback function for the host to ensure debug messages are processed. - */ - typedef void (*DebugMessageDispatchHandler)(); - - // Set a C debug event listener. - static bool SetDebugEventListener(EventCallback that, - Handle data = Handle()); - static bool SetDebugEventListener2(EventCallback2 that, - Handle data = Handle()); - - // Set a JavaScript debug event listener. - static bool SetDebugEventListener(v8::Handle that, - Handle data = Handle()); - - // Schedule a debugger break to happen when JavaScript code is run. - static void DebugBreak(); - - // Remove scheduled debugger break if it has not happened yet. - static void CancelDebugBreak(); - - // Break execution of JavaScript (this method can be invoked from a - // non-VM thread) for further client command execution on a VM - // thread. Client data is then passed in EventDetails to - // EventCallback at the moment when the VM actually stops. - static void DebugBreakForCommand(ClientData* data = NULL); - - // Message based interface. The message protocol is JSON. NOTE the message - // handler thread is not supported any more parameter must be false. - static void SetMessageHandler(MessageHandler handler, - bool message_handler_thread = false); - static void SetMessageHandler2(MessageHandler2 handler); - static void SendCommand(const uint16_t* command, int length, - ClientData* client_data = NULL); - - // Dispatch interface. - static void SetHostDispatchHandler(HostDispatchHandler handler, - int period = 100); - - /** - * Register a callback function to be called when a debug message has been - * received and is ready to be processed. For the debug messages to be - * processed V8 needs to be entered, and in certain embedding scenarios this - * callback can be used to make sure V8 is entered for the debug message to - * be processed. Note that debug messages will only be processed if there is - * a V8 break. This can happen automatically by using the option - * --debugger-auto-break. - * \param provide_locker requires that V8 acquires v8::Locker for you before - * calling handler - */ - static void SetDebugMessageDispatchHandler( - DebugMessageDispatchHandler handler, bool provide_locker = false); - - /** - * Run a JavaScript function in the debugger. - * \param fun the function to call - * \param data passed as second argument to the function - * With this call the debugger is entered and the function specified is called - * with the execution state as the first argument. This makes it possible to - * get access to information otherwise not available during normal JavaScript - * execution e.g. details on stack frames. Receiver of the function call will - * be the debugger context global object, however this is a subject to change. - * The following example show a JavaScript function which when passed to - * v8::Debug::Call will return the current line of JavaScript execution. - * - * \code - * function frame_source_line(exec_state) { - * return exec_state.frame(0).sourceLine(); - * } - * \endcode - */ - static Local Call(v8::Handle fun, - Handle data = Handle()); - - /** - * Returns a mirror object for the given object. - */ - static Local GetMirror(v8::Handle obj); - - /** - * Enable the V8 builtin debug agent. The debugger agent will listen on the - * supplied TCP/IP port for remote debugger connection. - * \param name the name of the embedding application - * \param port the TCP/IP port to listen on - * \param wait_for_connection whether V8 should pause on a first statement - * allowing remote debugger to connect before anything interesting happened - */ - static bool EnableAgent(const char* name, int port, - bool wait_for_connection = false); - - /** - * Makes V8 process all pending debug messages. - * - * From V8 point of view all debug messages come asynchronously (e.g. from - * remote debugger) but they all must be handled synchronously: V8 cannot - * do 2 things at one time so normal script execution must be interrupted - * for a while. - * - * Generally when message arrives V8 may be in one of 3 states: - * 1. V8 is running script; V8 will automatically interrupt and process all - * pending messages (however auto_break flag should be enabled); - * 2. V8 is suspended on debug breakpoint; in this state V8 is dedicated - * to reading and processing debug messages; - * 3. V8 is not running at all or has called some long-working C++ function; - * by default it means that processing of all debug message will be deferred - * until V8 gets control again; however, embedding application may improve - * this by manually calling this method. - * - * It makes sense to call this method whenever a new debug message arrived and - * V8 is not already running. Method v8::Debug::SetDebugMessageDispatchHandler - * should help with the former condition. - * - * Technically this method in many senses is equivalent to executing empty - * script: - * 1. It does nothing except for processing all pending debug messages. - * 2. It should be invoked with the same precautions and from the same context - * as V8 script would be invoked from, because: - * a. with "evaluate" command it can do whatever normal script can do, - * including all native calls; - * b. no other thread should call V8 while this method is running - * (v8::Locker may be used here). - * - * "Evaluate" debug command behavior currently is not specified in scope - * of this method. - */ - static void ProcessDebugMessages(); - - /** - * Debugger is running in it's own context which is entered while debugger - * messages are being dispatched. This is an explicit getter for this - * debugger context. Note that the content of the debugger context is subject - * to change. - */ - static Local GetDebugContext(); -}; - - -} // namespace v8 - - -#undef EXPORT - - -#endif // V8_V8_DEBUG_H_ diff --git a/vendor/node/node-0.4.7/include/v8-preparser.h b/vendor/node/node-0.4.7/include/v8-preparser.h deleted file mode 100644 index 9425f7d46..000000000 --- a/vendor/node/node-0.4.7/include/v8-preparser.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2010 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef PREPARSER_H -#define PREPARSER_H - -#include "v8stdint.h" - -#ifdef _WIN32 - -// Setup for Windows DLL export/import. When building the V8 DLL the -// BUILDING_V8_SHARED needs to be defined. When building a program which uses -// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 -// static library or building a program which uses the V8 static library neither -// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define V8EXPORT __declspec(dllexport) -#elif USING_V8_SHARED -#define V8EXPORT __declspec(dllimport) -#else -#define V8EXPORT -#endif // BUILDING_V8_SHARED - -#else // _WIN32 - -// Setup for Linux shared library export. There is no need to distinguish -// between building or using the V8 shared library, but we should not -// export symbols when we are building a static library. -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) -#define V8EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define V8EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - - -namespace v8 { - - -class PreParserData { - public: - PreParserData(size_t size, const uint8_t* data) - : data_(data), size_(size) { } - - // Create a PreParserData value where stack_overflow reports true. - static PreParserData StackOverflow() { return PreParserData(NULL, 0); } - // Whether the pre-parser stopped due to a stack overflow. - // If this is the case, size() and data() should not be used. - - bool stack_overflow() { return size_ == 0u; } - - // The size of the data in bytes. - size_t size() const { return size_; } - - // Pointer to the data. - const uint8_t* data() const { return data_; } - - private: - const uint8_t* const data_; - const size_t size_; -}; - - -// Interface for a stream of Unicode characters. -class UnicodeInputStream { - public: - virtual ~UnicodeInputStream(); - - // Returns the next Unicode code-point in the input, or a negative value when - // there is no more input in the stream. - virtual int32_t Next() = 0; -}; - - -// Preparse a JavaScript program. The source code is provided as a -// UnicodeInputStream. The max_stack_size limits the amount of stack -// space that the preparser is allowed to use. If the preparser uses -// more stack space than the limit provided, the result's stack_overflow() -// method will return true. Otherwise the result contains preparser -// data that can be used by the V8 parser to speed up parsing. -PreParserData V8EXPORT Preparse(UnicodeInputStream* input, - size_t max_stack_size); - -} // namespace v8. - -#endif // PREPARSER_H diff --git a/vendor/node/node-0.4.7/include/v8-profiler.h b/vendor/node/node-0.4.7/include/v8-profiler.h deleted file mode 100644 index 675a22985..000000000 --- a/vendor/node/node-0.4.7/include/v8-profiler.h +++ /dev/null @@ -1,426 +0,0 @@ -// Copyright 2010 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef V8_V8_PROFILER_H_ -#define V8_V8_PROFILER_H_ - -#include "v8.h" - -#ifdef _WIN32 -// Setup for Windows DLL export/import. See v8.h in this directory for -// information on how to build/use V8 as a DLL. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define V8EXPORT __declspec(dllexport) -#elif USING_V8_SHARED -#define V8EXPORT __declspec(dllimport) -#else -#define V8EXPORT -#endif - -#else // _WIN32 - -// Setup for Linux shared library export. See v8.h in this directory for -// information on how to build/use V8 as shared library. -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) -#define V8EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define V8EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - - -/** - * Profiler support for the V8 JavaScript engine. - */ -namespace v8 { - - -/** - * CpuProfileNode represents a node in a call graph. - */ -class V8EXPORT CpuProfileNode { - public: - /** Returns function name (empty string for anonymous functions.) */ - Handle GetFunctionName() const; - - /** Returns resource name for script from where the function originates. */ - Handle GetScriptResourceName() const; - - /** - * Returns the number, 1-based, of the line where the function originates. - * kNoLineNumberInfo if no line number information is available. - */ - int GetLineNumber() const; - - /** - * Returns total (self + children) execution time of the function, - * in milliseconds, estimated by samples count. - */ - double GetTotalTime() const; - - /** - * Returns self execution time of the function, in milliseconds, - * estimated by samples count. - */ - double GetSelfTime() const; - - /** Returns the count of samples where function exists. */ - double GetTotalSamplesCount() const; - - /** Returns the count of samples where function was currently executing. */ - double GetSelfSamplesCount() const; - - /** Returns function entry UID. */ - unsigned GetCallUid() const; - - /** Returns child nodes count of the node. */ - int GetChildrenCount() const; - - /** Retrieves a child node by index. */ - const CpuProfileNode* GetChild(int index) const; - - static const int kNoLineNumberInfo = Message::kNoLineNumberInfo; -}; - - -/** - * CpuProfile contains a CPU profile in a form of two call trees: - * - top-down (from main() down to functions that do all the work); - * - bottom-up call graph (in backward direction). - */ -class V8EXPORT CpuProfile { - public: - /** Returns CPU profile UID (assigned by the profiler.) */ - unsigned GetUid() const; - - /** Returns CPU profile title. */ - Handle GetTitle() const; - - /** Returns the root node of the bottom up call tree. */ - const CpuProfileNode* GetBottomUpRoot() const; - - /** Returns the root node of the top down call tree. */ - const CpuProfileNode* GetTopDownRoot() const; -}; - - -/** - * Interface for controlling CPU profiling. - */ -class V8EXPORT CpuProfiler { - public: - /** - * A note on security tokens usage. As scripts from different - * origins can run inside a single V8 instance, it is possible to - * have functions from different security contexts intermixed in a - * single CPU profile. To avoid exposing function names belonging to - * other contexts, filtering by security token is performed while - * obtaining profiling results. - */ - - /** - * Returns the number of profiles collected (doesn't include - * profiles that are being collected at the moment of call.) - */ - static int GetProfilesCount(); - - /** Returns a profile by index. */ - static const CpuProfile* GetProfile( - int index, - Handle security_token = Handle()); - - /** Returns a profile by uid. */ - static const CpuProfile* FindProfile( - unsigned uid, - Handle security_token = Handle()); - - /** - * Starts collecting CPU profile. Title may be an empty string. It - * is allowed to have several profiles being collected at - * once. Attempts to start collecting several profiles with the same - * title are silently ignored. While collecting a profile, functions - * from all security contexts are included in it. The token-based - * filtering is only performed when querying for a profile. - */ - static void StartProfiling(Handle title); - - /** - * Stops collecting CPU profile with a given title and returns it. - * If the title given is empty, finishes the last profile started. - */ - static const CpuProfile* StopProfiling( - Handle title, - Handle security_token = Handle()); -}; - - -class HeapGraphNode; - - -/** - * HeapSnapshotEdge represents a directed connection between heap - * graph nodes: from retaners to retained nodes. - */ -class V8EXPORT HeapGraphEdge { - public: - enum Type { - kContextVariable = 0, // A variable from a function context. - kElement = 1, // An element of an array. - kProperty = 2, // A named object property. - kInternal = 3, // A link that can't be accessed from JS, - // thus, its name isn't a real property name - // (e.g. parts of a ConsString). - kHidden = 4, // A link that is needed for proper sizes - // calculation, but may be hidden from user. - kShortcut = 5 // A link that must not be followed during - // sizes calculation. - }; - - /** Returns edge type (see HeapGraphEdge::Type). */ - Type GetType() const; - - /** - * Returns edge name. This can be a variable name, an element index, or - * a property name. - */ - Handle GetName() const; - - /** Returns origin node. */ - const HeapGraphNode* GetFromNode() const; - - /** Returns destination node. */ - const HeapGraphNode* GetToNode() const; -}; - - -class V8EXPORT HeapGraphPath { - public: - /** Returns the number of edges in the path. */ - int GetEdgesCount() const; - - /** Returns an edge from the path. */ - const HeapGraphEdge* GetEdge(int index) const; - - /** Returns origin node. */ - const HeapGraphNode* GetFromNode() const; - - /** Returns destination node. */ - const HeapGraphNode* GetToNode() const; -}; - - -/** - * HeapGraphNode represents a node in a heap graph. - */ -class V8EXPORT HeapGraphNode { - public: - enum Type { - kHidden = 0, // Hidden node, may be filtered when shown to user. - kArray = 1, // An array of elements. - kString = 2, // A string. - kObject = 3, // A JS object (except for arrays and strings). - kCode = 4, // Compiled code. - kClosure = 5, // Function closure. - kRegExp = 6, // RegExp. - kHeapNumber = 7 // Number stored in the heap. - }; - - /** Returns node type (see HeapGraphNode::Type). */ - Type GetType() const; - - /** - * Returns node name. Depending on node's type this can be the name - * of the constructor (for objects), the name of the function (for - * closures), string value, or an empty string (for compiled code). - */ - Handle GetName() const; - - /** - * Returns node id. For the same heap object, the id remains the same - * across all snapshots. Not applicable to aggregated heap snapshots - * as they only contain aggregated instances. - */ - uint64_t GetId() const; - - /** - * Returns the number of instances. Only applicable to aggregated - * heap snapshots. - */ - int GetInstancesCount() const; - - /** Returns node's own size, in bytes. */ - int GetSelfSize() const; - - /** - * Returns node's retained size, in bytes. That is, self + sizes of - * the objects that are reachable only from this object. In other - * words, the size of memory that will be reclaimed having this node - * collected. - * - * Exact retained size calculation has O(N) (number of nodes) - * computational complexity, while approximate has O(1). It is - * assumed that initially heap profiling tools provide approximate - * sizes for all nodes, and then exact sizes are calculated for the - * most 'interesting' nodes. - */ - int GetRetainedSize(bool exact) const; - - /** Returns child nodes count of the node. */ - int GetChildrenCount() const; - - /** Retrieves a child by index. */ - const HeapGraphEdge* GetChild(int index) const; - - /** Returns retainer nodes count of the node. */ - int GetRetainersCount() const; - - /** Returns a retainer by index. */ - const HeapGraphEdge* GetRetainer(int index) const; - - /** Returns the number of simple retaining paths from the root to the node. */ - int GetRetainingPathsCount() const; - - /** Returns a retaining path by index. */ - const HeapGraphPath* GetRetainingPath(int index) const; - - /** - * Returns a dominator node. This is the node that participates in every - * path from the snapshot root to the current node. - */ - const HeapGraphNode* GetDominatorNode() const; -}; - - -class V8EXPORT HeapSnapshotsDiff { - public: - /** Returns the root node for added nodes. */ - const HeapGraphNode* GetAdditionsRoot() const; - - /** Returns the root node for deleted nodes. */ - const HeapGraphNode* GetDeletionsRoot() const; -}; - - -/** - * HeapSnapshots record the state of the JS heap at some moment. - */ -class V8EXPORT HeapSnapshot { - public: - enum Type { - kFull = 0, // Heap snapshot with all instances and references. - kAggregated = 1 // Snapshot doesn't contain individual heap entries, - // instead they are grouped by constructor name. - }; - enum SerializationFormat { - kJSON = 0 // See format description near 'Serialize' method. - }; - - /** Returns heap snapshot type. */ - Type GetType() const; - - /** Returns heap snapshot UID (assigned by the profiler.) */ - unsigned GetUid() const; - - /** Returns heap snapshot title. */ - Handle GetTitle() const; - - /** Returns the root node of the heap graph. */ - const HeapGraphNode* GetRoot() const; - - /** Returns a node by its id. */ - const HeapGraphNode* GetNodeById(uint64_t id) const; - - /** - * Returns a diff between this snapshot and another one. Only snapshots - * of the same type can be compared. - */ - const HeapSnapshotsDiff* CompareWith(const HeapSnapshot* snapshot) const; - - /** - * Prepare a serialized representation of the snapshot. The result - * is written into the stream provided in chunks of specified size. - * The total length of the serialized snapshot is unknown in - * advance, it is can be roughly equal to JS heap size (that means, - * it can be really big - tens of megabytes). - * - * For the JSON format, heap contents are represented as an object - * with the following structure: - * - * { - * snapshot: {title: "...", uid: nnn}, - * nodes: [ - * meta-info (JSON string), - * nodes themselves - * ], - * strings: [strings] - * } - * - * Outgoing node links are stored after each node. Nodes reference strings - * and other nodes by their indexes in corresponding arrays. - */ - void Serialize(OutputStream* stream, SerializationFormat format) const; -}; - - -/** - * Interface for controlling heap profiling. - */ -class V8EXPORT HeapProfiler { - public: - /** Returns the number of snapshots taken. */ - static int GetSnapshotsCount(); - - /** Returns a snapshot by index. */ - static const HeapSnapshot* GetSnapshot(int index); - - /** Returns a profile by uid. */ - static const HeapSnapshot* FindSnapshot(unsigned uid); - - /** - * Takes a heap snapshot and returns it. Title may be an empty string. - * See HeapSnapshot::Type for types description. - */ - static const HeapSnapshot* TakeSnapshot( - Handle title, - HeapSnapshot::Type type = HeapSnapshot::kFull, - ActivityControl* control = NULL); -}; - - -} // namespace v8 - - -#undef V8EXPORT - - -#endif // V8_V8_PROFILER_H_ diff --git a/vendor/node/node-0.4.7/include/v8-testing.h b/vendor/node/node-0.4.7/include/v8-testing.h deleted file mode 100644 index 4db30a440..000000000 --- a/vendor/node/node-0.4.7/include/v8-testing.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2010 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef V8_V8_TEST_H_ -#define V8_V8_TEST_H_ - -#include "v8.h" - -#ifdef _WIN32 -// Setup for Windows DLL export/import. See v8.h in this directory for -// information on how to build/use V8 as a DLL. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define V8EXPORT __declspec(dllexport) -#elif USING_V8_SHARED -#define V8EXPORT __declspec(dllimport) -#else -#define V8EXPORT -#endif - -#else // _WIN32 - -// Setup for Linux shared library export. See v8.h in this directory for -// information on how to build/use V8 as shared library. -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) -#define V8EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define V8EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - - -/** - * Testing support for the V8 JavaScript engine. - */ -namespace v8 { - -class V8EXPORT Testing { - public: - enum StressType { - kStressTypeOpt, - kStressTypeDeopt - }; - - /** - * Set the type of stressing to do. The default if not set is kStressTypeOpt. - */ - static void SetStressRunType(StressType type); - - /** - * Get the number of runs of a given test that is required to get the full - * stress coverage. - */ - static int GetStressRuns(); - - /** - * Indicate the number of the run which is about to start. The value of run - * should be between 0 and one less than the result from GetStressRuns() - */ - static void PrepareStressRun(int run); -}; - - -} // namespace v8 - - -#undef V8EXPORT - - -#endif // V8_V8_TEST_H_ diff --git a/vendor/node/node-0.4.7/include/v8.h b/vendor/node/node-0.4.7/include/v8.h deleted file mode 100644 index 83a574427..000000000 --- a/vendor/node/node-0.4.7/include/v8.h +++ /dev/null @@ -1,3846 +0,0 @@ -// Copyright 2007-2009 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/** \mainpage V8 API Reference Guide - * - * V8 is Google's open source JavaScript engine. - * - * This set of documents provides reference material generated from the - * V8 header file, include/v8.h. - * - * For other documentation see http://code.google.com/apis/v8/ - */ - -#ifndef V8_H_ -#define V8_H_ - -#include "v8stdint.h" - -#ifdef _WIN32 - -// Setup for Windows DLL export/import. When building the V8 DLL the -// BUILDING_V8_SHARED needs to be defined. When building a program which uses -// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 -// static library or building a program which uses the V8 static library neither -// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define V8EXPORT __declspec(dllexport) -#elif USING_V8_SHARED -#define V8EXPORT __declspec(dllimport) -#else -#define V8EXPORT -#endif // BUILDING_V8_SHARED - -#else // _WIN32 - -// Setup for Linux shared library export. There is no need to distinguish -// between building or using the V8 shared library, but we should not -// export symbols when we are building a static library. -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) -#define V8EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define V8EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - -/** - * The v8 JavaScript engine. - */ -namespace v8 { - -class Context; -class String; -class Value; -class Utils; -class Number; -class Object; -class Array; -class Int32; -class Uint32; -class External; -class Primitive; -class Boolean; -class Integer; -class Function; -class Date; -class ImplementationUtilities; -class Signature; -template class Handle; -template class Local; -template class Persistent; -class FunctionTemplate; -class ObjectTemplate; -class Data; -class AccessorInfo; -class StackTrace; -class StackFrame; - -namespace internal { - -class Arguments; -class Object; -class Heap; -class Top; -} - - -// --- W e a k H a n d l e s - - -/** - * A weak reference callback function. - * - * This callback should either explicitly invoke Dispose on |object| if - * V8 wrapper is not needed anymore, or 'revive' it by invocation of MakeWeak. - * - * \param object the weak global object to be reclaimed by the garbage collector - * \param parameter the value passed in when making the weak global object - */ -typedef void (*WeakReferenceCallback)(Persistent object, - void* parameter); - - -// --- H a n d l e s --- - -#define TYPE_CHECK(T, S) \ - while (false) { \ - *(static_cast(0)) = static_cast(0); \ - } - -/** - * An object reference managed by the v8 garbage collector. - * - * All objects returned from v8 have to be tracked by the garbage - * collector so that it knows that the objects are still alive. Also, - * because the garbage collector may move objects, it is unsafe to - * point directly to an object. Instead, all objects are stored in - * handles which are known by the garbage collector and updated - * whenever an object moves. Handles should always be passed by value - * (except in cases like out-parameters) and they should never be - * allocated on the heap. - * - * There are two types of handles: local and persistent handles. - * Local handles are light-weight and transient and typically used in - * local operations. They are managed by HandleScopes. Persistent - * handles can be used when storing objects across several independent - * operations and have to be explicitly deallocated when they're no - * longer used. - * - * It is safe to extract the object stored in the handle by - * dereferencing the handle (for instance, to extract the Object* from - * an Handle); the value will still be governed by a handle - * behind the scenes and the same rules apply to these values as to - * their handles. - */ -template class Handle { - public: - - /** - * Creates an empty handle. - */ - inline Handle(); - - /** - * Creates a new handle for the specified value. - */ - inline explicit Handle(T* val) : val_(val) { } - - /** - * Creates a handle for the contents of the specified handle. This - * constructor allows you to pass handles as arguments by value and - * to assign between handles. However, if you try to assign between - * incompatible handles, for instance from a Handle to a - * Handle it will cause a compiletime error. Assigning - * between compatible handles, for instance assigning a - * Handle to a variable declared as Handle, is legal - * because String is a subclass of Value. - */ - template inline Handle(Handle that) - : val_(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - - /** - * Returns true if the handle is empty. - */ - inline bool IsEmpty() const { return val_ == 0; } - - inline T* operator->() const { return val_; } - - inline T* operator*() const { return val_; } - - /** - * Sets the handle to be empty. IsEmpty() will then return true. - */ - inline void Clear() { this->val_ = 0; } - - /** - * Checks whether two handles are the same. - * Returns true if both are empty, or if the objects - * to which they refer are identical. - * The handles' references are not checked. - */ - template inline bool operator==(Handle that) const { - internal::Object** a = reinterpret_cast(**this); - internal::Object** b = reinterpret_cast(*that); - if (a == 0) return b == 0; - if (b == 0) return false; - return *a == *b; - } - - /** - * Checks whether two handles are different. - * Returns true if only one of the handles is empty, or if - * the objects to which they refer are different. - * The handles' references are not checked. - */ - template inline bool operator!=(Handle that) const { - return !operator==(that); - } - - template static inline Handle Cast(Handle that) { -#ifdef V8_ENABLE_CHECKS - // If we're going to perform the type check then we have to check - // that the handle isn't empty before doing the checked cast. - if (that.IsEmpty()) return Handle(); -#endif - return Handle(T::Cast(*that)); - } - - template inline Handle As() { - return Handle::Cast(*this); - } - - private: - T* val_; -}; - - -/** - * A light-weight stack-allocated object handle. All operations - * that return objects from within v8 return them in local handles. They - * are created within HandleScopes, and all local handles allocated within a - * handle scope are destroyed when the handle scope is destroyed. Hence it - * is not necessary to explicitly deallocate local handles. - */ -template class Local : public Handle { - public: - inline Local(); - template inline Local(Local that) - : Handle(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - template inline Local(S* that) : Handle(that) { } - template static inline Local Cast(Local that) { -#ifdef V8_ENABLE_CHECKS - // If we're going to perform the type check then we have to check - // that the handle isn't empty before doing the checked cast. - if (that.IsEmpty()) return Local(); -#endif - return Local(T::Cast(*that)); - } - - template inline Local As() { - return Local::Cast(*this); - } - - /** Create a local handle for the content of another handle. - * The referee is kept alive by the local handle even when - * the original handle is destroyed/disposed. - */ - inline static Local New(Handle that); -}; - - -/** - * An object reference that is independent of any handle scope. Where - * a Local handle only lives as long as the HandleScope in which it was - * allocated, a Persistent handle remains valid until it is explicitly - * disposed. - * - * A persistent handle contains a reference to a storage cell within - * the v8 engine which holds an object value and which is updated by - * the garbage collector whenever the object is moved. A new storage - * cell can be created using Persistent::New and existing handles can - * be disposed using Persistent::Dispose. Since persistent handles - * are passed by value you may have many persistent handle objects - * that point to the same storage cell. For instance, if you pass a - * persistent handle as an argument to a function you will not get two - * different storage cells but rather two references to the same - * storage cell. - */ -template class Persistent : public Handle { - public: - - /** - * Creates an empty persistent handle that doesn't point to any - * storage cell. - */ - inline Persistent(); - - /** - * Creates a persistent handle for the same storage cell as the - * specified handle. This constructor allows you to pass persistent - * handles as arguments by value and to assign between persistent - * handles. However, attempting to assign between incompatible - * persistent handles, for instance from a Persistent to a - * Persistent will cause a compiletime error. Assigning - * between compatible persistent handles, for instance assigning a - * Persistent to a variable declared as Persistent, - * is allowed as String is a subclass of Value. - */ - template inline Persistent(Persistent that) - : Handle(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - - template inline Persistent(S* that) : Handle(that) { } - - /** - * "Casts" a plain handle which is known to be a persistent handle - * to a persistent handle. - */ - template explicit inline Persistent(Handle that) - : Handle(*that) { } - - template static inline Persistent Cast(Persistent that) { -#ifdef V8_ENABLE_CHECKS - // If we're going to perform the type check then we have to check - // that the handle isn't empty before doing the checked cast. - if (that.IsEmpty()) return Persistent(); -#endif - return Persistent(T::Cast(*that)); - } - - template inline Persistent As() { - return Persistent::Cast(*this); - } - - /** - * Creates a new persistent handle for an existing local or - * persistent handle. - */ - inline static Persistent New(Handle that); - - /** - * Releases the storage cell referenced by this persistent handle. - * Does not remove the reference to the cell from any handles. - * This handle's reference, and any any other references to the storage - * cell remain and IsEmpty will still return false. - */ - inline void Dispose(); - - /** - * Make the reference to this object weak. When only weak handles - * refer to the object, the garbage collector will perform a - * callback to the given V8::WeakReferenceCallback function, passing - * it the object reference and the given parameters. - */ - inline void MakeWeak(void* parameters, WeakReferenceCallback callback); - - /** Clears the weak reference to this object.*/ - inline void ClearWeak(); - - /** - *Checks if the handle holds the only reference to an object. - */ - inline bool IsNearDeath() const; - - /** - * Returns true if the handle's reference is weak. - */ - inline bool IsWeak() const; - - private: - friend class ImplementationUtilities; - friend class ObjectTemplate; -}; - - - /** - * A stack-allocated class that governs a number of local handles. - * After a handle scope has been created, all local handles will be - * allocated within that handle scope until either the handle scope is - * deleted or another handle scope is created. If there is already a - * handle scope and a new one is created, all allocations will take - * place in the new handle scope until it is deleted. After that, - * new handles will again be allocated in the original handle scope. - * - * After the handle scope of a local handle has been deleted the - * garbage collector will no longer track the object stored in the - * handle and may deallocate it. The behavior of accessing a handle - * for which the handle scope has been deleted is undefined. - */ -class V8EXPORT HandleScope { - public: - HandleScope(); - - ~HandleScope(); - - /** - * Closes the handle scope and returns the value as a handle in the - * previous scope, which is the new current scope after the call. - */ - template Local Close(Handle value); - - /** - * Counts the number of allocated handles. - */ - static int NumberOfHandles(); - - /** - * Creates a new handle with the given value. - */ - static internal::Object** CreateHandle(internal::Object* value); - - private: - // Make it impossible to create heap-allocated or illegal handle - // scopes by disallowing certain operations. - HandleScope(const HandleScope&); - void operator=(const HandleScope&); - void* operator new(size_t size); - void operator delete(void*, size_t); - - // This Data class is accessible internally as HandleScopeData through a - // typedef in the ImplementationUtilities class. - class V8EXPORT Data { - public: - internal::Object** next; - internal::Object** limit; - int level; - - inline void Initialize() { - next = limit = NULL; - level = 0; - } - }; - - void Leave(); - - internal::Object** prev_next_; - internal::Object** prev_limit_; - - // Allow for the active closing of HandleScopes which allows to pass a handle - // from the HandleScope being closed to the next top most HandleScope. - bool is_closed_; - internal::Object** RawClose(internal::Object** value); - - friend class ImplementationUtilities; -}; - - -// --- S p e c i a l o b j e c t s --- - - -/** - * The superclass of values and API object templates. - */ -class V8EXPORT Data { - private: - Data(); -}; - - -/** - * Pre-compilation data that can be associated with a script. This - * data can be calculated for a script in advance of actually - * compiling it, and can be stored between compilations. When script - * data is given to the compile method compilation will be faster. - */ -class V8EXPORT ScriptData { // NOLINT - public: - virtual ~ScriptData() { } - - /** - * Pre-compiles the specified script (context-independent). - * - * \param input Pointer to UTF-8 script source code. - * \param length Length of UTF-8 script source code. - */ - static ScriptData* PreCompile(const char* input, int length); - - /** - * Pre-compiles the specified script (context-independent). - * - * NOTE: Pre-compilation using this method cannot happen on another thread - * without using Lockers. - * - * \param source Script source code. - */ - static ScriptData* PreCompile(Handle source); - - /** - * Load previous pre-compilation data. - * - * \param data Pointer to data returned by a call to Data() of a previous - * ScriptData. Ownership is not transferred. - * \param length Length of data. - */ - static ScriptData* New(const char* data, int length); - - /** - * Returns the length of Data(). - */ - virtual int Length() = 0; - - /** - * Returns a serialized representation of this ScriptData that can later be - * passed to New(). NOTE: Serialized data is platform-dependent. - */ - virtual const char* Data() = 0; - - /** - * Returns true if the source code could not be parsed. - */ - virtual bool HasError() = 0; -}; - - -/** - * The origin, within a file, of a script. - */ -class ScriptOrigin { - public: - inline ScriptOrigin( - Handle resource_name, - Handle resource_line_offset = Handle(), - Handle resource_column_offset = Handle()) - : resource_name_(resource_name), - resource_line_offset_(resource_line_offset), - resource_column_offset_(resource_column_offset) { } - inline Handle ResourceName() const; - inline Handle ResourceLineOffset() const; - inline Handle ResourceColumnOffset() const; - private: - Handle resource_name_; - Handle resource_line_offset_; - Handle resource_column_offset_; -}; - - -/** - * A compiled JavaScript script. - */ -class V8EXPORT Script { - public: - - /** - * Compiles the specified script (context-independent). - * - * \param source Script source code. - * \param origin Script origin, owned by caller, no references are kept - * when New() returns - * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() - * using pre_data speeds compilation if it's done multiple times. - * Owned by caller, no references are kept when New() returns. - * \param script_data Arbitrary data associated with script. Using - * this has same effect as calling SetData(), but allows data to be - * available to compile event handlers. - * \return Compiled script object (context independent; when run it - * will use the currently entered context). - */ - static Local - -### In node.js - - var uuid = require('node-uuid'); - -## Usage - -### Generate a String UUID - - var id = uuid(); // -> '92329D39-6F5C-4520-ABFC-AAB64544E172' - -### Generate a Binary UUID - - // Simple form - allocates a Buffer/Array for you - var buf = uuid('binary'); - // node.js -> - // browser -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] - - // Provide your own Buffer or Array - var buf = new Array(16); - uuid('binary', buf); // -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] - var buf = new Buffer(16); - uuid('binary', buf); // -> - - // Provide your own Buffer/Array, plus specify offset - // (e.g. here we fill an array with 3 uuids) - var buf = new Buffer(16 \* 3); - uuid('binary', id, 0); - uuid('binary', id, 16); - uuid('binary', id, 32); - -## Testing - -test/test.js generates performance data (similar to test/benchmark.js). It also verifies the syntax of 100K string UUIDs, and logs the distribution of hex digits found therein. For example: - - - - - Performance Data - - - - uuid(): 1052631 uuids/second - uuid('binary'): 680272 uuids/second - uuid('binary', buffer): 2702702 uuids/second - - - - - Distribution of Hex Digits (% deviation from ideal) - - - - 0 |================================| 187705 (0.11%) - 1 |================================| 187880 (0.2%) - 2 |================================| 186875 (-0.33%) - 3 |================================| 186847 (-0.35%) - 4 |==================================================| 287433 (-0.02%) - 5 |================================| 187910 (0.22%) - 6 |================================| 188172 (0.36%) - 7 |================================| 187350 (-0.08%) - 8 |====================================| 211994 (-0.24%) - 9 |====================================| 212664 (0.08%) - A |=====================================| 213185 (0.32%) - B |=====================================| 212877 (0.18%) - C |================================| 187445 (-0.03%) - D |================================| 186737 (-0.41%) - E |================================| 187155 (-0.18%) - F |================================| 187771 (0.14%) - -Note that the increased values for 4 and 8-B are expected as part of the RFC4122 syntax (and are accounted for in the deviation calculation). BTW, if someone wants to do the calculation to determine what a statistically significant deviation would be, I'll gladly add that to the test. - -### In browser - - Open test/test.html - -### In node.js - - > node test/test.js - -node.js users can also run the node-uuid .vs. uuid.js benchmark: - - > node test/benchmark.js - -## Performance - -### In node.js - -node-uuid is designed to be fast. That said, the target platform is node.js, where it is screaming fast. Here's what I get on my 2.66GHz Macbook Pro for the test/benchmark.js script: - - nodeuuid(): 1126126 uuids/second - nodeuuid('binary'): 782472 uuids/second - nodeuuid('binary', buffer): 2688172 uuids/second - uuidjs(): 620347 uuids/second - uuidjs('binary'): 1275510 uuids/second - -The uuidjs() entries are for Nikhil Marathe's [uuidjs module](https://bitbucket.org/nikhilm/uuidjs), and are provided for comparison. uuidjs is a wrapper around the native libuuid library. - -### In browser - -node-uuid performance varies dramatically across browsers. For comprehensive test results, please [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/package.json b/vendor/npm/npm-1.0.27/node_modules/node-uuid/package.json deleted file mode 100644 index bf70062ab..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name" : "node-uuid", - "description" : "Simple, fast generation of RFC4122(v4) UUIDs.", - "url" : "http://github.com/broofa/node-uuid", - "keywords" : ["uuid", "guid", "rfc4122"], - "author" : "Robert Kieffer ", - "contributors" : [], - "dependencies" : [], - "lib" : ".", - "main" : "./uuid.js", - "version" : "1.2.0" -} diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark-native.c b/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark-native.c deleted file mode 100644 index dbfc75f6d..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark.js b/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark.js deleted file mode 100644 index 2505dc4a2..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/benchmark.js +++ /dev/null @@ -1,27 +0,0 @@ -var nodeuuid = require('../uuid'), - uuidjs = require('uuid').generate, - N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid(); -rate('nodeuuid()', t); - -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary'); -rate('nodeuuid(\'binary\')', t); - -var buffer = new nodeuuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary', buffer); -rate('nodeuuid(\'binary\', buffer)', t); - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) uuidjs(); -rate('uuidjs()', t); - -for (var i = 0, t = Date.now(); i < N; i++) uuidjs('binary'); -rate('uuidjs(\'binary\')', t); diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.html b/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.html deleted file mode 100644 index 89e0f2c44..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.js b/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.js deleted file mode 100644 index 5037566ea..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,83 +0,0 @@ -if (typeof(uuid) == 'undefined') { - uuid = require('../uuid'); -} - -var UUID_FORMAT = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89a-fAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/; -var N = 1e5; - -function log(msg) { - if (typeof(document) != 'undefined') { - document.write('
' + msg + '
'); - } - if (typeof(console) != 'undefined') { - console.log(msg); - } -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids/second'); -} - -// Perf tests -log('- - - Performance Data - - -'); -for (var i = 0, t = Date.now(); i < N; i++) uuid(); -rate('uuid()', t); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); -rate('uuid(\'binary\')', t); -var buf = new uuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary', buf); -rate('uuid(\'binary\', buffer)', t); - -var counts = {}, max = 0; - -var b = new uuid.BufferClass(16); -for (var i = 0; i < N; i++) { - id = uuid(); - if (!UUID_FORMAT.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - throw Error(id + ' does not parse/unparse'); - } - - // Count digits for our randomness check - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } -} - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -log('
- - - Distribution of Hex Digits (% deviation from ideal) - - -'); - -// Check randomness -for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - log(c + ' |' + bar + '| ' + counts[c] + ' (' + d + '%)'); -} diff --git a/vendor/npm/npm-1.0.27/node_modules/node-uuid/uuid.js b/vendor/npm/npm-1.0.27/node_modules/node-uuid/uuid.js deleted file mode 100644 index fdf6c54fd..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,80 +0,0 @@ -(function() { - /* - * Generate a RFC4122(v4) UUID - * - * Documentation at https://github.com/broofa/node-uuid - */ - - // Use node.js Buffer class if available, otherwise use the Array class - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - - // Buffer used for generating string uuids - var _buf = new BufferClass(16); - - // Cache number <-> hex string for octet values - var toString = []; - var toNumber = {}; - for (var i = 0; i < 256; i++) { - toString[i] = (i + 0x100).toString(16).substr(1); - toNumber[toString[i]] = i; - } - - function parse(s) { - var buf = new BufferClass(16); - var i = 0, ton = toNumber; - s.toLowerCase().replace(/[0-9a-f][0-9a-f]/g, function(octet) { - buf[i++] = toNumber[octet]; - }); - return buf; - } - - function unparse(buf) { - var tos = toString, b = buf; - return tos[b[0]] + tos[b[1]] + tos[b[2]] + tos[b[3]] + '-' + - tos[b[4]] + tos[b[5]] + '-' + - tos[b[6]] + tos[b[7]] + '-' + - tos[b[8]] + tos[b[9]] + '-' + - tos[b[10]] + tos[b[11]] + tos[b[12]] + - tos[b[13]] + tos[b[14]] + tos[b[15]]; - } - - var b32 = 0x100000000, ff = 0xff; - function uuid(fmt, buf, offset) { - var b = fmt != 'binary' ? _buf : (buf ? buf : new BufferClass(16)); - var i = buf && offset || 0; - - var r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & 0x0f | 0x40; // See RFC4122 sect. 4.1.3 - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & 0x3f | 0x80; // See RFC4122 sect. 4.4 - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - - return fmt === undefined ? unparse(b) : b; - }; - - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - - if (typeof(module) != 'undefined') { - module.exports = uuid; - } else { - // In browser? Set as top-level function - this.uuid = uuid; - } -})(); diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/.gitignore b/vendor/npm/npm-1.0.27/node_modules/nopt/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/LICENSE b/vendor/npm/npm-1.0.27/node_modules/nopt/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/nopt/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/README.md b/vendor/npm/npm-1.0.27/node_modules/nopt/README.md deleted file mode 100644 index d6385a481..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/nopt/README.md +++ /dev/null @@ -1,182 +0,0 @@ -If you want to write an option parser, and have it be good, there are -two ways to do it. The Right Way, and the Wrong Way. - -The Wrong Way is to sit down and write an option parser. We've all done -that. - -The Right Way is to write some complex configurable program with so many -options that you go half-insane just trying to manage them all, and put -it off with duct-tape solutions until you see exactly to the core of the -problem, and finally snap and write an awesome option parser. - -If you want to write an option parser, don't write an option parser. -Write a package manager, or a source control system, or a service -restarter, or an operating system. You probably won't end up with a -good one of those, but if you don't give up, and you are relentless and -diligent enough in your procrastination, you may just end up with a very -nice option parser. - -## USAGE - - // my-program.js - var nopt = require("nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag"] - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - console.log(parsed) - -This would give you support for any of the following: - - $ node my-program.js --foo "blerp" --no-flag - { "foo" : "blerp", "flag" : false } - - $ node my-program.js ---bar 7 --foo "Mr. Hand" --flag - { bar: 7, foo: "Mr. Hand", flag: true } - - $ node my-program.js --foo "blerp" -f -----p - { foo: "blerp", flag: true, pick: true } - - $ node my-program.js -fp --foofoo - { foo: "Mr. Foo", flag: true, pick: true } - - $ node my-program.js --foofoo -- -fp # -- stops the flag parsing. - { foo: "Mr. Foo", argv: { remain: ["-fp"] } } - - $ node my-program.js --blatzk 1000 -fp # unknown opts are ok. - { blatzk: 1000, flag: true, pick: true } - - $ node my-program.js --blatzk true -fp # but they need a value - { blatzk: true, flag: true, pick: true } - - $ node my-program.js --no-blatzk -fp # unless they start with "no-" - { blatzk: false, flag: true, pick: true } - - $ node my-program.js --baz b/a/z # known paths are resolved. - { baz: "/Users/isaacs/b/a/z" } - -Read the tests at the bottom of `lib/nopt.js` for more examples of -what this puppy can do. - -## Types - -The following types are supported, and defined on `nopt.typeDefs` - -* String: A normal string. No parsing is done. -* path: A file system path. Gets resolved against cwd if not absolute. -* Number: Must be numeric. -* url: A url. If it doesn't parse, it isn't accepted. -* Boolean: Must be either `true` or `false`. If an option is a boolean, - then it does not need a value, and its presence will imply `true` as - the value. To negate boolean flags, do `--no-whatever` or `--whatever - false` -* NaN: Means that the option is strictly not allowed. Any value will - fail. -* Stream: An object matching the "Stream" class in node. Valuable - for use when validating programmatically. (npm uses this to let you - supply any WriteStream on the `outfd` and `logfd` config options.) - -If a type is an array of values not on this list, then those are -considered valid values. For instance, in the example above, the -`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, -and any other value will be rejected. - -When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be -interpreted as their JavaScript equivalents, and numeric values will be -interpreted as a number. - -You can also mix types and values, or multiple types, in a list. For -instance `{ blah: [Number, null] }` would allow a value to be set to -either a Number or null. - -To define a new type, add it to `nopt.typeDefs`. Each item in that -hash is an object with a `type` member and a `validate` method. The -`type` member is an object that matches what goes in the type list. The -`validate` method is a function that gets called with `validate(data, -key, val)`. Validate methods should assign `data[key]` to the valid -value of `val` if it can be handled properly, or return boolean -`false` if it cannot. - -You can also call `nopt.clean(data, types, typeDefs)` to clean up a -config object and remove its invalid properties. - -## Error Handling - -By default, nopt outputs a warning to standard error when invalid -options are found. You can change this behavior by assigning a method -to `nopt.invalidHandler`. This method will be called with -the offending `nopt.invalidHandler(key, val, types)`. - -If no `nopt.invalidHandler` is assigned, then it will console.error -its whining. If it is assigned to boolean `false` then the warning is -suppressed. - -## Abbreviations - -Yes, they are supported. If you define options like this: - - { "foolhardyelephants" : Boolean - , "pileofmonkeys" : Boolean } - -Then this will work: - - node program.js --foolhar --pil - node program.js --no-f --pileofmon - # etc. - -## Shorthands - -Shorthands are a hash of shorter option names to a snippet of args that -they expand to. - -If multiple one-character shorthands are all combined, and the -combination does not unambiguously match any other option or shorthand, -then they will be broken up into their constituent parts. For example: - - { "s" : ["--loglevel", "silent"] - , "g" : "--global" - , "f" : "--force" - , "p" : "--parseable" - , "l" : "--long" - } - - npm ls -sgflp - # just like doing this: - npm ls --loglevel silent --global --force --long --parseable - -## The Rest of the args - -The config object returned by nopt is given a special member called -`argv`, which is an object with the following fields: - -* `remain`: The remaining args after all the parsing has occurred. -* `original`: The args as they originally appeared. -* `cooked`: The args after flags and shorthands are expanded. - -## Slicing - -Node programs are called with more or less the exact argv as it appears -in C land, after the v8 and node-specific options have been plucked off. -As such, `argv[0]` is always `node` and `argv[1]` is always the -JavaScript program being run. - -That's usually not very useful to you. So they're sliced off by -default. If you want them, then you can pass in `0` as the last -argument, or any other number that you'd like to slice off the start of -the list. diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/examples/my-program.js b/vendor/npm/npm-1.0.27/node_modules/nopt/examples/my-program.js deleted file mode 100755 index 142447e18..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/nopt/examples/my-program.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node - -//process.env.DEBUG_NOPT = 1 - -// my-program.js -var nopt = require("../lib/nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag", "true"] - , "g" : ["--flag"] - , "s" : "--flag" - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - -console.log("parsed =\n"+ require("util").inspect(parsed)) diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/lib/nopt.js b/vendor/npm/npm-1.0.27/node_modules/nopt/lib/nopt.js deleted file mode 100644 index e646710c6..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/nopt/lib/nopt.js +++ /dev/null @@ -1,395 +0,0 @@ -// info about each config option. - -var debug = process.env.DEBUG_NOPT - ? function () { console.error.apply(console, arguments) } - : function () {} - -var url = require("url") - , path = require("path") - , Stream = require("stream").Stream - , abbrev = require("abbrev") - -module.exports = exports = nopt -exports.clean = clean - -exports.typeDefs = - { String : { type: String, validate: validateString } - , Boolean : { type: Boolean, validate: validateBoolean } - , url : { type: url, validate: validateUrl } - , Number : { type: Number, validate: validateNumber } - , path : { type: path, validate: validatePath } - , Stream : { type: Stream, validate: validateStream } - } - -function nopt (types, shorthands, args, slice) { - args = args || process.argv - types = types || {} - shorthands = shorthands || {} - if (typeof slice !== "number") slice = 2 - - debug(types, shorthands, args, slice) - - args = args.slice(slice) - var data = {} - , key - , remain = [] - , cooked = args - , original = args.slice(0) - - parse(args, data, remain, types, shorthands) - // now data is full - clean(data, types, exports.typeDefs) - data.argv = {remain:remain,cooked:cooked,original:original} - data.argv.toString = function () { - return this.original.map(JSON.stringify).join(" ") - } - return data -} - -function clean (data, types, typeDefs) { - typeDefs = typeDefs || exports.typeDefs - Object.keys(data).forEach(function (k) { - var val = data[k] - // if it's an unknown value, then parse false/true/null/numbers - if (typeof val === "string") { - val = val.trim() - if (val === "null" || val === "true" || val === "false") { - val = JSON.parse(val) - } else if (!isNaN(val)) { - val = +val - } - } - if (!types.hasOwnProperty(k)) { - data[k] = val - return - } - if (!validate(data, k, val, types[k], typeDefs)) { - if (exports.invalidHandler) { - exports.invalidHandler(k, val, types[k], data) - } else if (exports.invalidHandler !== false) { - debug("invalid: "+k+"="+val, types[k]) - } - } - }) -} - -function validateString (data, k, val) { - data[k] = String(val) -} - -function validatePath (data, k, val) { - data[k] = path.resolve(String(val)) -} - -function validateNumber (data, k, val) { - debug("validate Number %j %j %j", k, val, isNaN(val)) - if (isNaN(val)) return false - data[k] = +val -} - -function validateBoolean (data, k, val) { - if (val instanceof Boolean) val = val.valueOf() - else if (typeof val === "string") { - if (!isNaN(val)) val = !!(+val) - else if (val === "null" || val === "false") val = false - else val = true - } else val = !!val - data[k] = val -} - -function validateUrl (data, k, val) { - val = url.parse(String(val)) - if (!val.host) return false - data[k] = val.href -} - -function validateStream (data, k, val) { - if (!(val instanceof Stream)) return false - data[k] = val -} - -function validate (data, k, val, type, typeDefs) { - // arrays are lists of types. - if (Array.isArray(type)) { - for (var i = 0, l = type.length; i < l; i ++) { - if (validate(data, k, val, type[i], typeDefs)) return true - } - delete data[k] - return false - } - - // NaN is poisonous. Means that something is not allowed. - if (type !== type) { - debug("Poison NaN", k, val, type) - delete data[k] - return false - } - - // explicit list of values - if (val === type) { - debug("Explicitly allowed %j", val) - data[k] = val - return true - } - - // now go through the list of typeDefs, validate against each one. - var ok = false - , types = Object.keys(typeDefs) - for (var i = 0, l = types.length; i < l; i ++) { - debug("test type %j %j %j", k, val, types[i]) - var t = typeDefs[types[i]] - if (t && type === t.type) { - ok = false !== t.validate(data, k, val) - if (ok) break - } - } - debug("OK? %j (%j %j %j)", ok, k, val, types[i]) - - if (!ok) delete data[k] - return ok -} - -function parse (args, data, remain, types, shorthands) { - debug("parse", args, data, remain) - - var key = null - , abbrevs = abbrev(Object.keys(types)) - , shortAbbr = abbrev(Object.keys(shorthands)) - - for (var i = 0; i < args.length; i ++) { - var arg = args[i] - debug("arg", arg) - - if (arg.match(/^-{2,}$/)) { - // done with keys. - // the rest are args. - remain.push.apply(remain, args.slice(i + 1)) - args[i] = "--" - break - } - if (arg.charAt(0) === "-") { - if (arg.indexOf("=") !== -1) { - var v = arg.split("=") - arg = v.shift() - v = v.join("=") - args.splice.apply(args, [i, 1].concat([arg, v])) - } - // see if it's a shorthand - // if so, splice and back up to re-parse it. - var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) - debug("arg=%j shRes=%j", arg, shRes) - if (shRes) { - debug(arg, shRes) - args.splice.apply(args, [i, 1].concat(shRes)) - if (arg !== shRes[0]) { - i -- - continue - } - } - arg = arg.replace(/^-+/, "") - var no = false - while (arg.toLowerCase().indexOf("no-") === 0) { - no = !no - arg = arg.substr(3) - } - var isBool = no || types[arg] === Boolean || - Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 - if (abbrevs[arg]) arg = abbrevs[arg] - if (isBool) { - // just set and move along - data[arg] = !no - // however, also support --bool true or --bool false - var la = args[i + 1] - if (la === "true" || la === "false") { - data[arg] = JSON.parse(la) - if (no) data[arg] = !data[arg] - i ++ - } - continue - } - var la = args[i + 1] - if (la && la.match(/^-{2,}$/)) { - la = undefined - i -- - } - data[arg] = la === undefined ? true : la - i ++ - continue - } - remain.push(arg) - } -} - -function resolveShort (arg, shorthands, shortAbbr, abbrevs) { - // handle single-char shorthands glommed together, like - // npm ls -glp, but only if there is one dash, and only if - // all of the chars are single-char shorthands, and it's - // not a match to some other abbrev. - arg = arg.replace(/^-+/, '') - if (abbrevs[arg] && !shorthands[arg]) { - return null - } - if (shortAbbr[arg]) { - arg = shortAbbr[arg] - } else { - var singles = shorthands.___singles - if (!singles) { - singles = Object.keys(shorthands).filter(function (s) { - return s.length === 1 - }).reduce(function (l,r) { l[r] = true ; return l }, {}) - shorthands.___singles = singles - } - var chrs = arg.split("").filter(function (c) { - return singles[c] - }) - if (chrs.join("") === arg) return chrs.map(function (c) { - return shorthands[c] - }).reduce(function (l, r) { - return l.concat(r) - }, []) - } - - if (shorthands[arg] && !Array.isArray(shorthands[arg])) { - shorthands[arg] = shorthands[arg].split(/\s+/) - } - return shorthands[arg] -} - -if (module === require.main) { -var assert = require("assert") - , sys = require("sys") - - , shorthands = - { s : ["--loglevel", "silent"] - , d : ["--loglevel", "info"] - , dd : ["--loglevel", "verbose"] - , ddd : ["--loglevel", "silly"] - , noreg : ["--no-registry"] - , reg : ["--registry"] - , "no-reg" : ["--no-registry"] - , silent : ["--loglevel", "silent"] - , verbose : ["--loglevel", "verbose"] - , h : ["--usage"] - , H : ["--usage"] - , "?" : ["--usage"] - , help : ["--usage"] - , v : ["--version"] - , f : ["--force"] - , desc : ["--description"] - , "no-desc" : ["--no-description"] - , "local" : ["--no-global"] - , l : ["--long"] - , p : ["--parseable"] - , porcelain : ["--parseable"] - , g : ["--global"] - } - - , types = - { argv : NaN - , browser : String - , cache : path - , color : ["always", Boolean] - , depth : Number - , description : Boolean - , dev : Boolean - , editor : path - , force : Boolean - , global : Boolean - , globalconfig : path - , group : [String, Number] - , gzipbin : String - , logfd : [Number, Stream] - , loglevel : ["silent","win","error","warn","info","verbose","silly"] - , long : Boolean - , "node-version" : [false, String] - , npaturl : url - , npat : Boolean - , "onload-script" : [false, String] - , outfd : [Number, Stream] - , parseable : Boolean - , pre: Boolean - , prefix: path - , proxy : url - , "rebuild-bundle" : Boolean - , registry : url - , searchopts : String - , searchexclude: [null, String] - , shell : path - , tag : String - , tar : String - , tmp : path - , "unsafe-perm" : Boolean - , usage : Boolean - , user : String - , username : String - , userconfig : path - , version : Boolean - , viewer: path - , _exit : Boolean - } - -; [["-v", {version:true}, []] - ,["---v", {version:true}, []] - ,["ls -s --no-reg connect -d", - {loglevel:"info",registry:null},["ls","connect"]] - ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] - ,["ls --registry blargle", {}, ["ls"]] - ,["--no-registry", {registry:null}, []] - ,["--no-color true", {color:false}, []] - ,["--no-color false", {color:true}, []] - ,["--no-color", {color:false}, []] - ,["--color false", {color:false}, []] - ,["--color --logfd 7", {logfd:7,color:true}, []] - ,["--color=true", {color:true}, []] - ,["--logfd=10", {logfd:10}, []] - ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] - ,["--tmp=tmp -tar=gtar", - {tmp:path.join(process.cwd(), "tmp"),tar:"gtar"},[]] - ,["--logfd x", {}, []] - ,["a -true -- -no-false", {true:true},["a","-no-false"]] - ,["a -no-false", {false:false},["a"]] - ,["a -no-no-true", {true:true}, ["a"]] - ,["a -no-no-no-false", {false:false}, ["a"]] - ,["---NO-no-No-no-no-no-nO-no-no"+ - "-No-no-no-no-no-no-no-no-no"+ - "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ - "-no-body-can-do-the-boogaloo-like-I-do" - ,{"body-can-do-the-boogaloo-like-I-do":false}, []] - ,["we are -no-strangers-to-love "+ - "--you-know the-rules --and so-do-i "+ - "---im-thinking-of=a-full-commitment "+ - "--no-you-would-get-this-from-any-other-guy "+ - "--no-gonna-give-you-up "+ - "-no-gonna-let-you-down=true "+ - "--no-no-gonna-run-around false "+ - "--desert-you=false "+ - "--make-you-cry false "+ - "--no-tell-a-lie "+ - "--no-no-and-hurt-you false" - ,{"strangers-to-love":false - ,"you-know":"the-rules" - ,"and":"so-do-i" - ,"you-would-get-this-from-any-other-guy":false - ,"gonna-give-you-up":false - ,"gonna-let-you-down":false - ,"gonna-run-around":false - ,"desert-you":false - ,"make-you-cry":false - ,"tell-a-lie":false - ,"and-hurt-you":false - },["we", "are"]] - ].forEach(function (test) { - var argv = test[0].split(/\s+/) - , opts = test[1] - , rem = test[2] - , actual = nopt(types, shorthands, argv, 0) - , parsed = actual.argv - delete actual.argv - console.log(parsed.remain) - console.log(sys.inspect(actual, false, 2, true)) - for (var i in opts) { - assert.equal(opts[i], actual[i]) - } - assert.deepEqual(rem, parsed.remain) - }) -} diff --git a/vendor/npm/npm-1.0.27/node_modules/nopt/package.json b/vendor/npm/npm-1.0.27/node_modules/nopt/package.json deleted file mode 100644 index 55561b3e9..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/nopt/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ "name" : "nopt" -, "version" : "1.0.5" -, "description" : "Option parsing for Node, supporting types, shorthands, etc. Used by npm." -, "author" : "Isaac Z. Schlueter (http://blog.izs.me/)" -, "main" : "lib/nopt.js" -, "scripts" : { "test" : "node lib/nopt.js" } -, "repository" : "http://github.com/isaacs/nopt" -, "license" : - { "type" : "MIT" - , "url" : "https://github.com/isaacs/nopt/raw/master/LICENSE" } -, "dependencies" : { "abbrev" : "1" }} diff --git a/vendor/npm/npm-1.0.27/node_modules/proto-list/LICENSE b/vendor/npm/npm-1.0.27/node_modules/proto-list/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/proto-list/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/npm/npm-1.0.27/node_modules/proto-list/README.md b/vendor/npm/npm-1.0.27/node_modules/proto-list/README.md deleted file mode 100644 index 43cfa3589..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/proto-list/README.md +++ /dev/null @@ -1,3 +0,0 @@ -A list of objects, bound by their prototype chain. - -Used in npm's config stuff. diff --git a/vendor/npm/npm-1.0.27/node_modules/proto-list/package.json b/vendor/npm/npm-1.0.27/node_modules/proto-list/package.json deleted file mode 100644 index 5cab34bef..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/proto-list/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ "name" : "proto-list" -, "version" : "1.0.0" -, "description" : "A utility for managing a prototype chain" -, "main" : "./proto-list.js" -, "author" : "Isaac Z. Schlueter (http://blog.izs.me/)" -, "scripts" : { "test" : "node proto-list.js" } -, "repository": { "type": "git", "url": "https://github.com/isaacs/proto-list" } -, "license": { "type": "MIT", "url": "https://github.com/isaacs/proto-list/blob/master/LICENSE" } -, "devDependencies" : { "tap" : "0" } } diff --git a/vendor/npm/npm-1.0.27/node_modules/proto-list/proto-list.js b/vendor/npm/npm-1.0.27/node_modules/proto-list/proto-list.js deleted file mode 100644 index 759d82738..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/proto-list/proto-list.js +++ /dev/null @@ -1,94 +0,0 @@ - -module.exports = ProtoList - -function ProtoList () { this.list = [] } -ProtoList.prototype = - { get length () { return this.list.length } - , get keys () { - var k = [] - for (var i in this.list[0]) k.push(i) - return k - } - , get snapshot () { - var o = {} - this.keys.forEach(function (k) { o[k] = this.get(k) }, this) - return o - } - , push : function (obj) { - if (typeof obj !== "object") obj = {valueOf:obj} - if (this.list.length >= 1) { - this.list[this.list.length - 1].__proto__ = obj - } - obj.__proto__ = Object.prototype - return this.list.push(obj) - } - , pop : function () { - if (this.list.length >= 2) { - this.list[this.list.length - 2].__proto__ = Object.prototype - } - return this.list.pop() - } - , unshift : function (obj) { - obj.__proto__ = this.list[0] || Object.prototype - return this.list.unshift(obj) - } - , shift : function () { - if (this.list.length >= 1) { - this.list[0].__proto__ = Object.prototype - } - return this.list.shift() - } - , get : function (key) { - return this.list[0][key] - } - , set : function (key, val, save) { - if (!this.length) this.push({}) - if (save && this.list[0].hasOwnProperty(key)) this.push({}) - return this.list[0][key] = val - } - , forEach : function (fn, thisp) { - for (var key in this.list[0]) fn.call(thisp, key, this.list[0][key]) - } - , slice : function () { - return this.list.slice.apply(this.list, arguments) - } - , splice : function () { - return this.list.splice.apply(this.list, arguments) - } - } - -if (module === require.main) { - -var tap = require("tap") - , test = tap.test - -tap.plan(1) - -tap.test("protoList tests", function (t) { - var p = new ProtoList - p.push({foo:"bar"}) - p.push({}) - p.set("foo", "baz") - t.equal(p.get("foo"), "baz") - - var p = new ProtoList - p.push({foo:"bar"}) - p.set("foo", "baz") - t.equal(p.get("foo"), "baz") - t.equal(p.length, 1) - p.pop() - t.equal(p.length, 0) - p.set("foo", "asdf") - t.equal(p.length, 1) - t.equal(p.get("foo"), "asdf") - p.push({bar:"baz"}) - t.equal(p.length, 2) - t.equal(p.get("foo"), "asdf") - p.shift() - t.equal(p.length, 1) - t.equal(p.get("foo"), undefined) - t.end() -}) - - -} diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/AUTHORS b/vendor/npm/npm-1.0.27/node_modules/rimraf/AUTHORS deleted file mode 100644 index d0f15f615..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# Authors sorted by whether or not they're me. -Isaac Z. Schlueter (http://blog.izs.me) -Wayne Larsen (http://github.com/wvl) -ritch diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/LICENSE b/vendor/npm/npm-1.0.27/node_modules/rimraf/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/README.md b/vendor/npm/npm-1.0.27/node_modules/rimraf/README.md deleted file mode 100644 index 99983dc43..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/README.md +++ /dev/null @@ -1,32 +0,0 @@ -A `rm -rf` for node. - -Install with `npm install rimraf`, or just drop rimraf.js somewhere. - -## API - -`rimraf(f, [options,] callback)` - -The callback will be called with an error if there is one. Certain -errors are handled for you: - -* `EBUSY` - rimraf will back off a maximum of opts.maxBusyTries times - before giving up. -* `EMFILE` - If too many file descriptors get opened, rimraf will - patiently wait until more become available. - -## Options - -The options object is optional. These fields are respected: - -* `maxBusyTries` - The number of times to retry a file or folder in the - event of an `EBUSY` error. The default is 3. -* `gently` - If provided a `gently` path, then rimraf will only delete - files and folders that are beneath this path, and only delete symbolic - links that point to a place within this path. (This is very important - to npm's use-case, and shows rimraf's pedigree.) - - -## rimraf.sync - -It can remove stuff synchronously, too. But that's not so good. Use -the async API. It's better. diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/package.json b/vendor/npm/npm-1.0.27/node_modules/rimraf/package.json deleted file mode 100644 index 78eef7d80..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{"name":"rimraf" -,"version":"1.0.4" -,"main":"rimraf.js" -,"description":"A deep deletion module for node (like `rm -rf`)" -,"author":"Isaac Z. Schlueter (http://blog.izs.me/)" -,"license": - {"type":"MIT", "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"} -,"repository":"git://github.com/isaacs/rimraf.git" -,"scripts":{"test":"cd test && bash run.sh"}} diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/rimraf.js b/vendor/npm/npm-1.0.27/node_modules/rimraf/rimraf.js deleted file mode 100644 index ff81e3ff7..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,127 +0,0 @@ -module.exports = rimraf -rimraf.sync = rimrafSync - -var path = require("path") - , fs - -try { - // optional dependency - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -// for EBUSY handling -var waitBusy = {} - -// for EMFILE handling -var resetTimer = null - , timeout = 0 - -function rimraf (p, opts, cb) { - if (typeof opts === "function") cb = opts, opts = {} - - opts.maxBusyTries = opts.maxBusyTries || 3 - - rimraf_(p, opts, function (er) { - if (er) { - if (er.message.match(/^EBUSY/)) { - // windows is annoying. - if (!waitBusy.hasOwnProperty(p)) waitBusy[p] = opts.maxBusyTries - if (waitBusy[p]) { - waitBusy[p] -- - // give it 100ms more each time - var time = (opts.maxBusyTries - waitBusy[p]) * 100 - return setTimeout(function () { rimraf_(p, opts, cb) }, time) - } - } - - // this one won't happen if graceful-fs is used. - if (er.message.match(/^EMFILE/)) { - return setTimeout(function () { - rimraf_(p, opts, cb) - }, timeout ++) - } - } - timeout = 0 - cb(er) - }) -} - -function asyncForEach (list, fn, cb) { - if (!list.length) cb() - var c = list.length - , errState = null - list.forEach(function (item, i, list) { - fn(item, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (-- c === 0) return cb() - }) - }) -} - -function rimraf_ (p, opts, cb) { - fs.lstat(p, function (er, s) { - // if the stat fails, then assume it's already gone. - if (er) return cb() - - // don't delete that don't point actually live in the "gently" path - if (opts.gently) return clobberTest(p, s, opts, cb) - return rm_(p, s, opts, cb) - }) -} - -function rm_ (p, s, opts, cb) { - if (!s.isDirectory()) return fs.unlink(p, cb) - fs.readdir(p, function (er, files) { - if (er) return cb(er) - asyncForEach(files.map(function (f) { - return path.join(p, f) - }), function (file, cb) { - rimraf(file, opts, cb) - }, function (er) { - if (er) return cb(er) - fs.rmdir(p, cb) - }) - }) -} - -function clobberTest (p, s, opts, cb) { - var gently = opts.gently - if (!s.isSymbolicLink()) next(null, path.resolve(p)) - else realish(p, next) - - function next (er, rp) { - if (er) return rm_(p, s, cb) - if (rp.indexOf(gently) !== 0) return clobberFail(p, gently, cb) - else return rm_(p, s, opts, cb) - } -} - -function realish (p, cb) { - fs.readlink(p, function (er, r) { - if (er) return cb(er) - return cb(null, path.resolve(path.dirname(p), r)) - }) -} - -function clobberFail (p, g, cb) { - var er = new Error("Refusing to delete: "+p+" not in "+g) - , constants = require("constants") - er.errno = constants.EEXIST - er.code = "EEXIST" - er.path = p - return cb(er) -} - -// this looks simpler, but it will fail with big directory trees, -// or on slow stupid awful windows filesystems -function rimrafSync (p) { - var s = fs.lstatSync(p) - if (!s.isDirectory()) return fs.unlinkSync(p) - fs.readdirSync(p).forEach(function (f) { - rimrafSync(path.join(p, f)) - }) - fs.rmdirSync(p) -} diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/run.sh b/vendor/npm/npm-1.0.27/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163b..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -e -for i in test-*.js; do - echo -n $i ... - bash setup.sh - node $i - ! [ -d target ] - echo "pass" -done -rm -rf target diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/setup.sh b/vendor/npm/npm-1.0.27/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e6316..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -set -e - -files=10 -folders=2 -depth=4 -target="$PWD/target" - -rm -rf target - -fill () { - local depth=$1 - local files=$2 - local folders=$3 - local target=$4 - - if ! [ -d $target ]; then - mkdir -p $target - fi - - local f - - f=$files - while [ $f -gt 0 ]; do - touch "$target/f-$depth-$f" - let f-- - done - - let depth-- - - if [ $depth -le 0 ]; then - return 0 - fi - - f=$folders - while [ $f -gt 0 ]; do - mkdir "$target/folder-$depth-$f" - fill $depth $files $folders "$target/d-$depth-$f" - let f-- - done -} - -fill $depth $files $folders $target - -# sanity assert -[ -d $target ] diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-async.js b/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7be..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-sync.js b/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f1047..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/vendor/npm/npm-1.0.27/node_modules/semver/LICENSE b/vendor/npm/npm-1.0.27/node_modules/semver/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/semver/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/npm/npm-1.0.27/node_modules/semver/README.md b/vendor/npm/npm-1.0.27/node_modules/semver/README.md deleted file mode 100644 index 6fa37a3d8..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/semver/README.md +++ /dev/null @@ -1,119 +0,0 @@ -semver(1) -- The semantic versioner for npm -=========================================== - -## Usage - - $ npm install semver - - semver.valid('1.2.3') // true - semver.valid('a.b.c') // false - semver.clean(' =v1.2.3 ') // '1.2.3' - semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true - semver.gt('1.2.3', '9.8.7') // false - semver.lt('1.2.3', '9.8.7') // true - -As a command-line utility: - - $ semver -h - - Usage: semver -v [-r ] - Test if version(s) satisfy the supplied range(s), - and sort them. - - Multiple versions or ranges may be supplied. - - Program exits successfully if any valid version satisfies - all supplied ranges, and prints all satisfying versions. - - If no versions are valid, or ranges are not satisfied, - then exits failure. - - Versions are printed in ascending order, so supplying - multiple versions to the utility will just sort them. - -## Versions - -A version is the following things, in this order: - -* a number (Major) -* a period -* a number (minor) -* a period -* a number (patch) -* OPTIONAL: a hyphen, followed by a number (build) -* OPTIONAL: a collection of pretty much any non-whitespace characters - (tag) - -A leading `"="` or `"v"` character is stripped off and ignored. - -## Comparisons - -The ordering of versions is done using the following algorithm, given -two versions and asked to find the greater of the two: - -* If the majors are numerically different, then take the one - with a bigger major number. `2.3.4 > 1.3.4` -* If the minors are numerically different, then take the one - with the bigger minor number. `2.3.4 > 2.2.4` -* If the patches are numerically different, then take the one with the - bigger patch number. `2.3.4 > 2.3.3` -* If only one of them has a build number, then take the one with the - build number. `2.3.4-0 > 2.3.4` -* If they both have build numbers, and the build numbers are numerically - different, then take the one with the bigger build number. - `2.3.4-10 > 2.3.4-9` -* If only one of them has a tag, then take the one without the tag. - `2.3.4 > 2.3.4-beta` -* If they both have tags, then take the one with the lexicographically - larger tag. `2.3.4-beta > 2.3.4-alpha` -* At this point, they're equal. - -## Ranges - -The following range styles are supported: - -* `>1.2.3` Greater than a specific version. -* `<1.2.3` Less than -* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` -* `~1.2.3` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <2.0.0` -* `~1` := `>=1.0.0 <2.0.0` -* `1.2.x` := `>=1.2.0 <1.3.0` -* `1.x` := `>=1.0.0 <2.0.0` - -Ranges can be joined with either a space (which implies "and") or a -`||` (which implies "or"). - -## Functions - -* valid(v): Return the parsed version, or null if it's not valid. -* inc(v, release): Return the version incremented by the release type - (major, minor, patch, or build), or null if it's not valid. - -### Comparison - -* gt(v1, v2): `v1 > v2` -* gte(v1, v2): `v1 >= v2` -* lt(v1, v2): `v1 < v2` -* lte(v1, v2): `v1 <= v2` -* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent, - even if they're not the exact same string. You already know how to - compare strings. -* neq(v1, v2): `v1 != v2` The opposite of eq. -* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call - the corresponding function above. `"==="` and `"!=="` do simple - string comparison, but are included for completeness. Throws if an - invalid comparison string is provided. -* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if - v2 is greater. Sorts in ascending order if passed to Array.sort(). -* rcompare(v1, v2): The reverse of compare. Sorts an array of versions - in descending order when passed to Array.sort(). - - -### Ranges - -* validRange(range): Return the valid range or null if it's not valid -* satisfies(version, range): Return true if the version satisfies the - range. -* maxSatisfying(versions, range): Return the highest version in the list - that satisfies the range, or null if none of them do. diff --git a/vendor/npm/npm-1.0.27/node_modules/semver/bin/semver b/vendor/npm/npm-1.0.27/node_modules/semver/bin/semver deleted file mode 100755 index 3e6afb40d..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/semver/bin/semver +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env node -// Standalone semver comparison program. -// Exits successfully and prints matching version(s) if -// any supplied version is valid and passes all tests. - -var argv = process.argv.slice(2) - , versions = [] - , range = [] - , gt = [] - , lt = [] - , eq = [] - , semver = require("../semver") - -main() - -function main () { - if (!argv.length) return help() - while (argv.length) { - var a - switch (a = argv.shift()) { - case "-v": case "--version": - versions.push(argv.shift()) - break - case "-r": case "--range": - range.push(argv.shift()) - break - case "-h": case "--help": case "-?": - return help() - default: - versions.push(a) - break - } - } - - versions = versions.filter(semver.valid) - for (var i = 0, l = range.length; i < l ; i ++) { - versions = versions.filter(function (v) { - return semver.satisfies(v, range[i]) - }) - if (!versions.length) return fail() - } - return success(versions) -} - -function fail () { process.exit(1) } - -function success () { - versions.sort(semver.compare) - .map(semver.clean) - .forEach(function (v,i,_) { console.log(v) }) -} - -function help () { - console.log(["Usage: semver -v [-r ]" - ,"Test if version(s) satisfy the supplied range(s)," - ,"and sort them." - ,"" - ,"Multiple versions or ranges may be supplied." - ,"" - ,"Program exits successfully if any valid version satisfies" - ,"all supplied ranges, and prints all satisfying versions." - ,"" - ,"If no versions are valid, or ranges are not satisfied," - ,"then exits failure." - ,"" - ,"Versions are printed in ascending order, so supplying" - ,"multiple versions to the utility will just sort them." - ].join("\n")) -} - - diff --git a/vendor/npm/npm-1.0.27/node_modules/semver/package.json b/vendor/npm/npm-1.0.27/node_modules/semver/package.json deleted file mode 100644 index 3b0dbf5c6..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/semver/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ "name" : "semver" -, "version" : "1.0.9" -, "description" : "The semantic version parser used by npm." -, "main" : "semver.js" -, "scripts" : { "test" : "tap semver.js" } -, "devDependencies": { "tap" : "0.x >=0.0.4" } -, "license" : - { "type" : "MIT" - , "url" : "https://github.com/isaacs/semver/raw/master/LICENSE" } -, "repository" : "git://github.com/isaacs/node-semver.git" -, "bin" : { "semver" : "./bin/semver" } } diff --git a/vendor/npm/npm-1.0.27/node_modules/semver/semver.js b/vendor/npm/npm-1.0.27/node_modules/semver/semver.js deleted file mode 100644 index b3a6a4320..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/semver/semver.js +++ /dev/null @@ -1,518 +0,0 @@ - -// See http://semver.org/ -// This implementation is a *hair* less strict in that it allows -// v1.2.3 things, and also tags that don't begin with a char. - -var semver = "\\s*[v=]*\\s*([0-9]+)" // major - + "\\.([0-9]+)" // minor - + "\\.([0-9]+)" // patch - + "(-[0-9]+-?)?" // build - + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?" // tag - , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$" - , xRangePlain = "[v=]*([0-9]+|x|X)(?:\\.([0-9]+|x|X)(?:\\.([0-9]+|x|X))?)?" - , xRange = "((?:<|>)?=?)?\\s*" + xRangePlain - , exprSpermy = "(?:~>?)"+xRange - , expressions = exports.expressions = - { parse : new RegExp("^\\s*"+semver+"\\s*$") - , parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$") - , parseRange : new RegExp( - "^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$") - , validComparator : new RegExp("^"+exprComparator+"$") - , parseXRange : new RegExp("^"+xRange+"$") - , parseSpermy : new RegExp("^"+exprSpermy+"$") - } -Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { return (str || "").match(expressions[i]) } -}) - -exports.rangeReplace = ">=$1 <=$7" -exports.clean = clean -exports.compare = compare -exports.satisfies = satisfies -exports.gt = gt -exports.gte = gte -exports.lt = lt -exports.lte = lte -exports.eq = eq -exports.neq = neq -exports.cmp = cmp -exports.inc = inc - -exports.valid = valid -exports.validPackage = validPackage -exports.validRange = validRange -exports.maxSatisfying = maxSatisfying - -function stringify (version) { - var v = version - return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'') -} - -function clean (version) { - version = exports.parse(version) - if (!version) return version - return stringify(version) -} - -function valid (version) { - return exports.parse(version) && version.trim().replace(/^[v=]+/, '') -} - -function validPackage (version) { - return version.match(expressions.parsePackage) && version.trim() -} - -// range can be one of: -// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0" -// ">1.0.2" like 1.0.3 - 9999.9999.9999 -// ">=1.0.2" like 1.0.2 - 9999.9999.9999 -// "<2.0.0" like 0.0.0 - 1.9999.9999 -// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999 -var starExpression = /(<|>)?=?\s*\*/g - , starReplace = "" - , compTrimExpression = new RegExp("((<|>)?=?)\\s*(" - +semver+"|"+xRangePlain+")", "g") - , compTrimReplace = "$1$3" - -function toComparators (range) { - var ret = (range || "").trim() - .replace(expressions.parseRange, exports.rangeReplace) - .replace(compTrimExpression, compTrimReplace) - .split(/\s+/) - .join(" ") - .split("||") - .map(function (orchunk) { - return orchunk - .split(" ") - .map(replaceXRanges) - .map(replaceSpermies) - .map(replaceStars) - .join(" ").trim() - }) - .map(function (orchunk) { - return orchunk - .trim() - .split(/\s+/) - .filter(function (c) { return c.match(expressions.validComparator) }) - }) - .filter(function (c) { return c.length }) - //console.error("comparators", range, ret) - return ret -} - -function replaceStars (stars) { - return stars.replace(starExpression, starReplace) -} - -// "2.x","2.x.x" --> ">=2.0.0 <2.1" -// "2.3.x" --> ">=2.3.0 <2.4.0" -function replaceXRanges (ranges) { - return ranges.split(/\s+/) - .map(replaceXRange) - .join(" ") -} - -function replaceXRange (version) { - return version.trim().replace(expressions.parseXRange, - function (v, gtlt, M, m, p) { - var anyX = !M || M.toLowerCase() === "x" - || !m || m.toLowerCase() === "x" - || !p || p.toLowerCase() === "x" - , ret = v - - if (gtlt && anyX) { - // just replace x'es with zeroes - ;(!M || M.toLowerCase() === "x") && (M = 0) - ;(!m || m.toLowerCase() === "x") && (m = 0) - ;(!p || p.toLowerCase() === "x") && (p = 0) - ret = gtlt + M+"."+m+"."+p - } else if (!M || M.toLowerCase() === "x") { - ret = "*" // allow any - } else if (!m || m.toLowerCase() === "x") { - // append "-" onto the version, otherwise - // "1.x.x" matches "2.0.0beta", since the tag - // *lowers* the version value - ret = ">="+M+".0.0- <"+(+M+1)+".0.0-" - } else if (!p || p.toLowerCase() === "x") { - ret = ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" - } - //console.error("parseXRange", [].slice.call(arguments), ret) - return ret - }) -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceSpermies (version) { - return version.trim().replace(expressions.parseSpermy, - function (v, gtlt, M, m, p) { - if (gtlt) throw new Error( - "Using '"+gtlt+"' with ~ makes no sense. Don't do it.") - if (!M || M.toLowerCase() === "x") { - return "*" - } - // ~1 == >=1.0.0 <2.0.0 - if (!m || m.toLowerCase() === "x") { - return ">="+M+".0.0 <"+(+M+1)+".0.0" - } - // ~1.2 == >=1.2.0 <1.3.0 - if (!p || p.toLowerCase() === "x") { - return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0" - } - // ~1.2.3 == >=1.2.3 <1.3.0 - return ">="+M+"."+m+"."+p+" <"+M+"."+(+m+1)+".0" - }) -} - -function validRange (range) { - range = range.trim().replace(starExpression, starReplace) - var c = toComparators(range) - return (c.length === 0) - ? null - : c.map(function (c) { return c.join(" ") }).join("||") -} - -// returns the highest satisfying version in the list, or undefined -function maxSatisfying (versions, range) { - return versions - .filter(function (v) { return satisfies(v, range) }) - .sort(compare) - .pop() -} -function satisfies (version, range) { - version = valid(version) - if (!version) return false - range = toComparators(range) - for (var i = 0, l = range.length ; i < l ; i ++) { - var ok = false - for (var j = 0, ll = range[i].length ; j < ll ; j ++) { - var r = range[i][j] - , gtlt = r.charAt(0) === ">" ? gt - : r.charAt(0) === "<" ? lt - : false - , eq = r.charAt(!!gtlt) === "=" - , sub = (!!eq) + (!!gtlt) - if (!gtlt) eq = true - r = r.substr(sub) - r = (r === "") ? r : valid(r) - ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r)) - if (!ok) break - } - if (ok) return true - } - return false -} - -// return v1 > v2 ? 1 : -1 -function compare (v1, v2) { - var g = gt(v1, v2) - return g === null ? 0 : g ? 1 : -1 -} - -function rcompare (v1, v2) { - return compare(v2, v1) -} - -function lt (v1, v2) { return gt(v2, v1) } -function gte (v1, v2) { return !lt(v1, v2) } -function lte (v1, v2) { return !gt(v1, v2) } -function eq (v1, v2) { return gt(v1, v2) === null } -function neq (v1, v2) { return gt(v1, v2) !== null } -function cmp (v1, c, v2) { - switch (c) { - case ">": return gt(v1, v2) - case "<": return lt(v1, v2) - case ">=": return gte(v1, v2) - case "<=": return lte(v1, v2) - case "==": return eq(v1, v2) - case "!=": return neq(v1, v2) - case "===": return v1 === v2 - case "!==": return v1 !== v2 - default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c) - } -} - -// return v1 > v2 -function num (v) { - return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10) -} -function gt (v1, v2) { - v1 = exports.parse(v1) - v2 = exports.parse(v2) - if (!v1 || !v2) return false - - for (var i = 1; i < 5; i ++) { - v1[i] = num(v1[i]) - v2[i] = num(v2[i]) - if (v1[i] > v2[i]) return true - else if (v1[i] !== v2[i]) return false - } - // no tag is > than any tag, or use lexicographical order. - var tag1 = v1[5] || "" - , tag2 = v2[5] || "" - - // kludge: null means they were equal. falsey, and detectable. - // embarrassingly overclever, though, I know. - return tag1 === tag2 ? null - : !tag1 ? true - : !tag2 ? false - : tag1 > tag2 -} - -function inc (version, release) { - version = exports.parse(version) - if (!version) return null - - var parsedIndexLookup = - { 'major': 1 - , 'minor': 2 - , 'patch': 3 - , 'build': 4 } - var incIndex = parsedIndexLookup[release] - if (incIndex === undefined) return null - - var current = num(version[incIndex]) - version[incIndex] = current === -1 ? 1 : current + 1 - - for (var i = incIndex + 1; i < 5; i ++) { - if (num(version[i]) !== -1) version[i] = "0" - } - - if (version[4]) version[4] = "-" + version[4] - version[5] = "" - - return stringify(version) -} - -if (module === require.main) { // tests below - -var tap = require("tap") - , test = tap.test - -tap.plan(5) - -test("\ncomparison tests", function (t) { -; [ ["0.0.0", "0.0.0foo"] - , ["0.0.1", "0.0.0"] - , ["1.0.0", "0.9.9"] - , ["0.10.0", "0.9.0"] - , ["0.99.0", "0.10.0"] - , ["2.0.0", "1.2.3"] - , ["v0.0.0", "0.0.0foo"] - , ["v0.0.1", "0.0.0"] - , ["v1.0.0", "0.9.9"] - , ["v0.10.0", "0.9.0"] - , ["v0.99.0", "0.10.0"] - , ["v2.0.0", "1.2.3"] - , ["0.0.0", "v0.0.0foo"] - , ["0.0.1", "v0.0.0"] - , ["1.0.0", "v0.9.9"] - , ["0.10.0", "v0.9.0"] - , ["0.99.0", "v0.10.0"] - , ["2.0.0", "v1.2.3"] - , ["1.2.3", "1.2.3-asdf"] - , ["1.2.3-4", "1.2.3"] - , ["1.2.3-4-foo", "1.2.3"] - , ["1.2.3-5", "1.2.3-5-foo"] - , ["1.2.3-5", "1.2.3-4"] - , ["1.2.3-5-foo", "1.2.3-5-Foo"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')") - t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')") - t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')") - t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')") - t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')") - t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')") - t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')") - t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')") - }) - t.end() -}) - -test("\nequality tests", function (t) { -; [ ["1.2.3", "v1.2.3"] - , ["1.2.3", "=1.2.3"] - , ["1.2.3", "v 1.2.3"] - , ["1.2.3", "= 1.2.3"] - , ["1.2.3", " v1.2.3"] - , ["1.2.3", " =1.2.3"] - , ["1.2.3", " v 1.2.3"] - , ["1.2.3", " = 1.2.3"] - , ["1.2.3-0", "v1.2.3-0"] - , ["1.2.3-0", "=1.2.3-0"] - , ["1.2.3-0", "v 1.2.3-0"] - , ["1.2.3-0", "= 1.2.3-0"] - , ["1.2.3-0", " v1.2.3-0"] - , ["1.2.3-0", " =1.2.3-0"] - , ["1.2.3-0", " v 1.2.3-0"] - , ["1.2.3-0", " = 1.2.3-0"] - , ["1.2.3-01", "v1.2.3-1"] - , ["1.2.3-01", "=1.2.3-1"] - , ["1.2.3-01", "v 1.2.3-1"] - , ["1.2.3-01", "= 1.2.3-1"] - , ["1.2.3-01", " v1.2.3-1"] - , ["1.2.3-01", " =1.2.3-1"] - , ["1.2.3-01", " v 1.2.3-1"] - , ["1.2.3-01", " = 1.2.3-1"] - , ["1.2.3beta", "v1.2.3beta"] - , ["1.2.3beta", "=1.2.3beta"] - , ["1.2.3beta", "v 1.2.3beta"] - , ["1.2.3beta", "= 1.2.3beta"] - , ["1.2.3beta", " v1.2.3beta"] - , ["1.2.3beta", " =1.2.3beta"] - , ["1.2.3beta", " v 1.2.3beta"] - , ["1.2.3beta", " = 1.2.3beta"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')") - t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")") - t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")") - t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")") - t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")") - t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')") - t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')") - }) - t.end() -}) - - -test("\nrange tests", function (t) { -; [ ["1.0.0 - 2.0.0", "1.2.3"] - , ["1.0.0", "1.0.0"] - , [">=*", "0.2.4"] - , ["", "1.0.0"] - , ["*", "1.2.3"] - , ["*", "v1.2.3-foo"] - , [">=1.0.0", "1.0.0"] - , [">=1.0.0", "1.0.1"] - , [">=1.0.0", "1.1.0"] - , [">1.0.0", "1.0.1"] - , [">1.0.0", "1.1.0"] - , ["<=2.0.0", "2.0.0"] - , ["<=2.0.0", "1.9999.9999"] - , ["<=2.0.0", "0.2.9"] - , ["<2.0.0", "1.9999.9999"] - , ["<2.0.0", "0.2.9"] - , [">= 1.0.0", "1.0.0"] - , [">= 1.0.0", "1.0.1"] - , [">= 1.0.0", "1.1.0"] - , ["> 1.0.0", "1.0.1"] - , ["> 1.0.0", "1.1.0"] - , ["<= 2.0.0", "2.0.0"] - , ["<= 2.0.0", "1.9999.9999"] - , ["<= 2.0.0", "0.2.9"] - , ["< 2.0.0", "1.9999.9999"] - , ["<\t2.0.0", "0.2.9"] - , [">=0.1.97", "v0.1.97"] - , [">=0.1.97", "0.1.97"] - , ["0.1.20 || 1.2.4", "1.2.4"] - , [">=0.2.3 || <0.0.1", "0.0.0"] - , [">=0.2.3 || <0.0.1", "0.2.3"] - , [">=0.2.3 || <0.0.1", "0.2.4"] - , ["||", "1.3.4"] - , ["2.x.x", "2.1.3"] - , ["1.2.x", "1.2.3"] - , ["1.2.x || 2.x", "2.1.3"] - , ["1.2.x || 2.x", "1.2.3"] - , ["x", "1.2.3"] - , ["2", "2.1.2"] - , ["2.3", "2.3.1"] - , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.4.5"] - , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0 - , ["~1", "1.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "1.2.3"] - , ["~> 1", "1.2.3"] - , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0 - , ["~ 1.0", "1.0.2"] - , ["<1", "1.0.0beta"] - , ["< 1", "1.0.0beta"] - , [">=1", "1.0.0"] - , [">= 1", "1.0.0"] - , ["<1.2", "1.1.1"] - , ["< 1.2", "1.1.1"] - , ["1", "1.0.0beta"] - ].forEach(function (v) { - t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1]) - }) - t.end() -}) - -test("\nnegative range tests", function (t) { -; [ ["1.0.0 - 2.0.0", "2.2.3"] - , ["1.0.0", "1.0.1"] - , [">=1.0.0", "0.0.0"] - , [">=1.0.0", "0.0.1"] - , [">=1.0.0", "0.1.0"] - , [">1.0.0", "0.0.1"] - , [">1.0.0", "0.1.0"] - , ["<=2.0.0", "3.0.0"] - , ["<=2.0.0", "2.9999.9999"] - , ["<=2.0.0", "2.2.9"] - , ["<2.0.0", "2.9999.9999"] - , ["<2.0.0", "2.2.9"] - , [">=0.1.97", "v0.1.93"] - , [">=0.1.97", "0.1.93"] - , ["0.1.20 || 1.2.4", "1.2.3"] - , [">=0.2.3 || <0.0.1", "0.0.3"] - , [">=0.2.3 || <0.0.1", "0.2.2"] - , ["2.x.x", "1.1.3"] - , ["2.x.x", "3.1.3"] - , ["1.2.x", "1.3.3"] - , ["1.2.x || 2.x", "3.1.3"] - , ["1.2.x || 2.x", "1.1.3"] - , ["2", "1.1.2"] - , ["2.3", "2.4.1"] - , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.3.9"] - , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0 - , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0 - , ["~1", "0.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "2.2.3"] - , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0 - , ["<1", "1.0.0"] - , [">=1.2", "1.1.1"] - , ["1", "2.0.0beta"] - ].forEach(function (v) { - t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1]) - }) - t.end() -}) - -test("\nincrement versions test", function (t) { -; [ [ "1.2.3", "major", "2.0.0" ] - , [ "1.2.3", "minor", "1.3.0" ] - , [ "1.2.3", "patch", "1.2.4" ] - , [ "1.2.3", "build", "1.2.3-1" ] - , [ "1.2.3-4", "build", "1.2.3-5" ] - - , [ "1.2.3tag", "major", "2.0.0" ] - , [ "1.2.3-tag", "major", "2.0.0" ] - , [ "1.2.3tag", "build", "1.2.3-1" ] - , [ "1.2.3-tag", "build", "1.2.3-1" ] - , [ "1.2.3-4-tag", "build", "1.2.3-5" ] - , [ "1.2.3-4tag", "build", "1.2.3-5" ] - - , [ "1.2.3", "fake", null ] - , [ "fake", "major", null ] - ].forEach(function (v) { - t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2]) - }) - - t.end() -}) - -} diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/README.md b/vendor/npm/npm-1.0.27/node_modules/slide/README.md deleted file mode 100644 index ed0905f40..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Slide - a tiny flow control library - -Callbacks are simple and easy if you keep the pattern consistent. - -Check out the [slide presentation](http://github.com/isaacs/slide-flow-control/raw/master/nodejs-controlling-flow.pdf). - -You'll laugh when you see how little code is actually in this thing. -It's so not-enterprisey, you won't believe it. It does almost nothing, -but it's super handy. - -I actually use an earlier version of this util in -[a real world program](http://npmjs.org/). - -## Installation - -Just copy the files into your project, and use them that way, or -you can do this: - - npm install slide - -and then: - - var asyncMap = require("slide").asyncMap - , chain = require("slide").chain - // use the power! - -Enjoy! diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/index.js b/vendor/npm/npm-1.0.27/node_modules/slide/index.js deleted file mode 100644 index 0a9277f6e..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports=require("./lib/slide") diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map-ordered.js b/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map-ordered.js deleted file mode 100644 index 5cca79a82..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map-ordered.js +++ /dev/null @@ -1,65 +0,0 @@ - -throw new Error("TODO: Not yet implemented.") - -/* -usage: - -Like asyncMap, but only can take a single cb, and guarantees -the order of the results. -*/ - -module.exports = asyncMapOrdered - -function asyncMapOrdered (list, fn, cb_) { - if (typeof cb_ !== "function") throw new Error( - "No callback provided to asyncMapOrdered") - - if (typeof fn !== "function") throw new Error( - "No map function provided to asyncMapOrdered") - - if (list === undefined || list === null) return cb_(null, []) - if (!Array.isArray(list)) list = [list] - if (!list.length) return cb_(null, []) - - var errState = null - , l = list.length - , a = l - , res = [] - , resCount = 0 - , maxArgLen = 0 - - function cb (index) { return function () { - if (errState) return - var er = arguments[0] - var argLen = arguments.length - maxArgLen = Math.max(maxArgLen, argLen) - res[index] = argLen === 1 ? [er] : Array.apply(null, arguments) - - // see if any new things have been added. - if (list.length > l) { - var newList = list.slice(l) - a += (list.length - l) - var oldLen = l - l = list.length - process.nextTick(function () { - newList.forEach(function (ar, i) { fn(ar, cb(i + oldLen)) }) - }) - } - - if (er || --a === 0) { - errState = er - cb_.apply(null, [errState].concat(flip(res, resCount, maxArgLen))) - } - }} - // expect the supplied cb function to be called - // "n" times for each thing in the array. - list.forEach(function (ar) { - steps.forEach(function (fn, i) { fn(ar, cb(i)) }) - }) -} - -function flip (res, resCount, argLen) { - var flat = [] - // res = [[er, x, y], [er, x1, y1], [er, x2, y2, z2]] - // return [[x, x1, x2], [y, y1, y2], [undefined, undefined, z2]] - diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map.js b/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map.js deleted file mode 100644 index 1ced158e0..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/lib/async-map.js +++ /dev/null @@ -1,56 +0,0 @@ - -/* -usage: - -// do something to a list of things -asyncMap(myListOfStuff, function (thing, cb) { doSomething(thing.foo, cb) }, cb) -// do more than one thing to each item -asyncMap(list, fooFn, barFn, cb) - -*/ - -module.exports = asyncMap - -function asyncMap () { - var steps = Array.prototype.slice.call(arguments) - , list = steps.shift() || [] - , cb_ = steps.pop() - if (typeof cb_ !== "function") throw new Error( - "No callback provided to asyncMap") - if (!list) return cb_(null, []) - if (!Array.isArray(list)) list = [list] - var n = steps.length - , data = [] // 2d array - , errState = null - , l = list.length - , a = l * n - if (!a) return cb_(null, []) - function cb (er) { - if (errState) return - var argLen = arguments.length - for (var i = 1; i < argLen; i ++) if (arguments[i] !== undefined) { - data[i - 1] = (data[i - 1] || []).concat(arguments[i]) - } - // see if any new things have been added. - if (list.length > l) { - var newList = list.slice(l) - a += (list.length - l) * n - l = list.length - process.nextTick(function () { - newList.forEach(function (ar) { - steps.forEach(function (fn) { fn(ar, cb) }) - }) - }) - } - - if (er || --a === 0) { - errState = er - cb_.apply(null, [errState].concat(data)) - } - } - // expect the supplied cb function to be called - // "n" times for each thing in the array. - list.forEach(function (ar) { - steps.forEach(function (fn) { fn(ar, cb) }) - }) -} diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/lib/bind-actor.js b/vendor/npm/npm-1.0.27/node_modules/slide/lib/bind-actor.js deleted file mode 100644 index 6a3707274..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/lib/bind-actor.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = bindActor -function bindActor () { - var args = - Array.prototype.slice.call - (arguments) // jswtf. - , obj = null - , fn - if (typeof args[0] === "object") { - obj = args.shift() - fn = args.shift() - if (typeof fn === "string") - fn = obj[ fn ] - } else fn = args.shift() - return function (cb) { - fn.apply(obj, args.concat(cb)) } -} diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/lib/chain.js b/vendor/npm/npm-1.0.27/node_modules/slide/lib/chain.js deleted file mode 100644 index 17b371149..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/lib/chain.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = chain -var bindActor = require("./bind-actor.js") -chain.first = {} ; chain.last = {} -function chain (things, cb) { - var res = [] - ;(function LOOP (i, len) { - if (i >= len) return cb(null,res) - if (Array.isArray(things[i])) - things[i] = bindActor.apply(null, - things[i].map(function(i){ - return (i===chain.first) ? res[0] - : (i===chain.last) - ? res[res.length - 1] : i })) - if (!things[i]) return LOOP(i + 1, len) - things[i](function (er, data) { - if (er) return cb(er, res) - if (data !== undefined) res = res.concat(data) - LOOP(i + 1, len) - }) - })(0, things.length) } diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/lib/slide.js b/vendor/npm/npm-1.0.27/node_modules/slide/lib/slide.js deleted file mode 100644 index 6e9ec2327..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/slide/lib/slide.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.asyncMap = require("./async-map") -exports.bindActor = require("./bind-actor") -exports.chain = require("./chain") diff --git a/vendor/npm/npm-1.0.27/node_modules/slide/nodejs-controlling-flow.pdf b/vendor/npm/npm-1.0.27/node_modules/slide/nodejs-controlling-flow.pdf deleted file mode 100644 index ca12d60cb2e25177f94d07364bf172a5fd4066d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167502 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[M-agNJQiojy^|IsvlBQ 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%0D9}jH}h$8;8 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 (http://blog.izs.me/)", - "contributors": [ - "S. Sriram (http://www.565labs.com)" - ], - "description": "A flow control lib small enough to fit on in a slide presentation. Derived live at Oak.JS", - "main": "./lib/slide.js", - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/slide-flow-control.git" - } -} diff --git a/vendor/npm/npm-1.0.27/node_modules/which/README.md b/vendor/npm/npm-1.0.27/node_modules/which/README.md deleted file mode 100644 index ff1eb531a..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/which/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The "which" util from npm's guts. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. diff --git a/vendor/npm/npm-1.0.27/node_modules/which/bin/which b/vendor/npm/npm-1.0.27/node_modules/which/bin/which deleted file mode 100755 index 8432ce2f6..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/which/bin/which +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env node -var which = require("../") -if (process.argv.length < 3) { - console.error("Usage: which ") - process.exit(1) -} - -which(process.argv[2], function (er, thing) { - if (er) { - console.error(er.message) - process.exit(er.errno || 127) - } - console.log(thing) -}) diff --git a/vendor/npm/npm-1.0.27/node_modules/which/package.json b/vendor/npm/npm-1.0.27/node_modules/which/package.json deleted file mode 100644 index a01c042da..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/which/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.0", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": "./bin/which", - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": {} -} diff --git a/vendor/npm/npm-1.0.27/node_modules/which/which.js b/vendor/npm/npm-1.0.27/node_modules/which/which.js deleted file mode 100644 index e5ef62d4a..000000000 --- a/vendor/npm/npm-1.0.27/node_modules/which/which.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - -try { - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -// console.log(process.execPath) -// console.log(process.argv) - -function isExe (mod, uid, gid) { - return (mod & 0001) - || (mod & 0010) && gid === process.getgid() - || (mod & 0100) && uid === process.getuid() -} -function which (cmd, cb) { - if (cmd.charAt(0) === "/") return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.join(pathEnv[i], cmd) - if (p === process.execPath) return cb(null, p) - fs.stat(p, function (er, stat) { - if (!er && stat && isExe(stat.mode, stat.uid, stat.gid)) { - return cb(null, p) - } - return F(i+1, l) - }) - })(0, pathEnv.length) -} - - -function whichSync (cmd) { - if (cmd.charAt(0) === "/") return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - if (p === process.execPath) return p - var stat - try { stat = fs.statSync(p) } catch (ex) {} - if (stat && isExe(stat.mode, stat.uid, stat.gid)) return p - } - throw new Error("not found: "+cmd) -} diff --git a/vendor/npm/npm-1.0.27/npm.js b/vendor/npm/npm-1.0.27/npm.js deleted file mode 100644 index 808d620f1..000000000 --- a/vendor/npm/npm-1.0.27/npm.js +++ /dev/null @@ -1,334 +0,0 @@ - -process.title = "npm" - -var EventEmitter = require("events").EventEmitter - , npm = module.exports = new EventEmitter - , config = require("./lib/config.js") - , set = require("./lib/utils/set.js") - , get = require("./lib/utils/get.js") - , ini = require("./lib/utils/ini.js") - , log = require("./lib/utils/log.js") - , fs = require("graceful-fs") - , path = require("path") - , abbrev = require("abbrev") - , which = require("which") - , semver = require("semver") - , findPrefix = require("./lib/utils/find-prefix.js") - , getUid = require("./lib/utils/uid-number.js") - -npm.commands = {} -npm.ELIFECYCLE = {} -npm.E404 = {} -npm.EPUBLISHCONFLICT = {} -npm.EJSONPARSE = {} -npm.EISGIT = {} -npm.ECYCLE = {} -npm.EENGINE = {} - - -try { - // startup, ok to do this synchronously - var j = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"))+"") - npm.version = j.version - npm.nodeVersionRequired = j.engines.node - if (!semver.satisfies(process.version, j.engines.node)) { - log.error(["" - ,"npm requires node version: "+j.engines.node - ,"And you have: "+process.version - ,"which is not satisfactory." - ,"" - ,"Bad things will likely happen. You have been warned." - ,""].join("\n"), "unsupported version") - } -} catch (ex) { - try { - log(ex, "error reading version") - } catch (er) {} - npm.version = ex -} - -var commandCache = {} - // short names for common things - , aliases = { "rm" : "uninstall" - , "r" : "uninstall" - , "un" : "uninstall" - , "unlink" : "uninstall" - , "remove" : "uninstall" - , "rb" : "rebuild" - , "list" : "ls" - , "la" : "ls" - , "ll" : "ls" - , "ln" : "link" - , "i" : "install" - , "up" : "update" - , "c" : "config" - , "info" : "view" - , "find" : "search" - , "s" : "search" - , "se" : "search" - , "author" : "owner" - , "home" : "docs" - } - - , aliasNames = Object.keys(aliases) - // these are filenames in ./lib - , cmdList = [ "install" - , "uninstall" - , "cache" - , "config" - , "set" - , "get" - , "update" - , "outdated" - , "prune" - , "submodule" - , "pack" - - , "rebuild" - , "link" - - , "publish" - , "tag" - , "adduser" - , "unpublish" - , "owner" - , "deprecate" - - , "help" - , "help-search" - , "ls" - , "search" - , "view" - , "init" - , "version" - , "edit" - , "explore" - , "docs" - , "faq" - , "root" - , "prefix" - , "bin" - , "whoami" - - , "test" - , "stop" - , "start" - , "restart" - , "run-script" - , "completion" - ] - , plumbing = [ "build" - , "unbuild" - , "xmas" - ] - , fullList = npm.fullList = cmdList.concat(aliasNames).filter(function (c) { - return plumbing.indexOf(c) === -1 - }) - , abbrevs = abbrev(fullList) - -Object.keys(abbrevs).concat(plumbing).forEach(function addCommand (c) { - Object.defineProperty(npm.commands, c, { get : function () { - if (!loaded) throw new Error( - "Call npm.load(conf, cb) before using this command.\n"+ - "See the README.md or cli.js for example usage.") - var a = npm.deref(c) - if (c === "la" || c === "ll") { - npm.config.set("long", true) - } - if (commandCache[a]) return commandCache[a] - var cmd = require(__dirname+"/lib/"+a+".js") - commandCache[a] = function () { - var args = Array.prototype.slice.call(arguments, 0) - if (typeof args[args.length - 1] !== "function") { - args.push(defaultCb) - } - if (args.length === 1) args.unshift([]) - cmd.apply(npm, args) - } - Object.keys(cmd).forEach(function (k) { - commandCache[a][k] = cmd[k] - }) - return commandCache[a] - }, enumerable: fullList.indexOf(c) !== -1 }) - - // make css-case commands callable via camelCase as well - if (c.match(/\-([a-z])/)) { - addCommand(c.replace(/\-([a-z])/g, function (a, b) { - return b.toUpperCase() - })) - } -}) - -function defaultCb (er, data) { - if (er) console.error(er.stack || er.message) - else console.log(data) -} - -npm.deref = function (c) { - if (!c) return "" - if (c.match(/[A-Z]/)) c = c.replace(/([A-Z])/g, function (m) { - return "-" + m.toLowerCase() - }) - if (plumbing.indexOf(c) !== -1) return c - var a = abbrevs[c] - if (aliases[a]) a = aliases[a] - return a -} - -var loaded = false - , loading = false - , loadErr = null - , loadListeners = [] - -function loadCb (er) { - loadListeners.forEach(function (cb) { - process.nextTick(cb.bind(npm, er, npm)) - }) - loadListeners.length = 0 -} - - -npm.load = function (conf, cb_) { - if (!cb_ && typeof conf === "function") cb_ = conf , conf = {} - if (!cb_) cb_ = function () {} - if (!conf) conf = {} - loadListeners.push(cb_) - if (loaded || loadErr) return cb(loadErr) - if (loading) return - loading = true - var onload = true - - function cb (er) { - if (loadErr) return - loaded = true - loadCb(loadErr = er) - if (onload = onload && npm.config.get("onload-script")) { - require(onload) - onload = false - } - } - - log.waitForConfig() - - load(npm, conf, cb) -} - - -function load (npm, conf, cb) { - which(process.argv[0], function (er, node) { - if (!er && node !== process.execPath) { - log.verbose("node symlink", node) - process.execPath = node - process.installPrefix = path.resolve(node, "..", "..") - } - - // look up configs - ini.resolveConfigs(conf, function (er) { - if (er) return cb(er) - - var n = 2 - , errState - - loadPrefix(npm, conf, next) - loadUid(npm, conf, next) - - function next (er) { - if (errState) return - if (er) return cb(errState = er) - if (-- n <= 0) return cb() - } - }) - }) -} - - -function loadPrefix (npm, conf, cb) { - // try to guess at a good node_modules location. - var p - if (!npm.config.get("global") - && !conf.hasOwnProperty("prefix")) { - p = process.cwd() - } else { - p = npm.config.get("prefix") - } - - findPrefix(p, function (er, p) { - Object.defineProperty(npm, "prefix", - { get : function () { return p } - , set : function (r) { return p = r } - , enumerable : true - }) - cb() - }) -} - - -function loadUid (npm, conf, cb) { - // if we're not in unsafe-perm mode, then figure out who - // to run stuff as. Do this first, to support `npm update npm -g` - if (!npm.config.get("unsafe-perm")) { - getUid(npm.config.get("user"), npm.config.get("group"), cb) - } else cb() -} - - -npm.config = - { get : function (key) { return ini.get(key) } - , set : function (key, val) { return ini.set(key, val, "cli") } - , del : function (key, val) { return ini.del(key, val, "cli") } - } - -Object.defineProperty(npm, "dir", - { get : function () { - if (npm.config.get("global")) { - return path.resolve(npm.prefix, "lib", "node_modules") - } else { - return path.resolve(npm.prefix, "node_modules") - } - } - , enumerable : true - }) - -Object.defineProperty(npm, "root", - { get : function () { return npm.dir } }) - -Object.defineProperty(npm, "cache", - { get : function () { return npm.config.get("cache") } - , set : function (r) { return npm.config.set("cache", r) } - , enumerable : true - }) - -var tmpFolder -Object.defineProperty(npm, "tmp", - { get : function () { - if (!tmpFolder) tmpFolder = "npm-"+Date.now() - return path.resolve(npm.config.get("tmp"), tmpFolder) - } - , enumerable : true - }) - -// the better to repl you with -Object.getOwnPropertyNames(npm.commands).forEach(function (n) { - if (npm.hasOwnProperty(n)) return - - Object.defineProperty(npm, n, { get: function () { - return function () { - var args = Array.prototype.slice.call(arguments, 0) - , cb = defaultCb - - if (args.length === 1 && Array.isArray(args[0])) { - args = args[0] - } - - if (typeof args[args.length - 1] === "function") { - cb = args.pop() - } - - npm.commands[n](args, cb) - } - }, enumerable: false, configurable: true }) -}) - -if (require.main === module) { - require("./bin/npm.js") -} diff --git a/vendor/npm/npm-1.0.27/package.json b/vendor/npm/npm-1.0.27/package.json deleted file mode 100644 index 69537ed4c..000000000 --- a/vendor/npm/npm-1.0.27/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ "name" : "npm" -, "description" : "A package manager for node" -, "keywords" : [ "package manager", "modules", "install", "package.json" ] -, "version" : "1.0.27" -, "preferGlobal" : true -, "config" : { "publishtest" : false } -, "homepage" : "http://npmjs.org/" -, "author" : "Isaac Z. Schlueter (http://blog.izs.me)" -, "repository" : - { "type" : "git" - , "url" : "https://github.com/isaacs/npm.git" - } -, "bugs" : - { "mail" : "npm-@googlegroups.com" - , "web" : "http://github.com/isaacs/npm/issues" - } -, "directories" : { "doc" : "./doc" - , "man" : "./man1" - , "lib" : "./lib" - , "bin" : "./bin" - } -, "main" : "npm" -, "bin" : { "npm" : "./bin/npm.js" - , "npm_g" : "./bin/npm.js" - , "npm-g" : "./bin/npm.js" } -, "dependencies" : - { "semver" : "1" - , "ini" : "1" - , "slide" : "1" - , "abbrev" : "1" - , "graceful-fs" : "1" - , "minimatch" : "0" - , "nopt" : "1" - , "node-uuid" : "1.2" - , "proto-list": "1" - , "rimraf" : "1" - , "which" : "1" } -, "bundleDependencies" : - [ "slide" - , "ini" - , "semver" - , "abbrev" - , "graceful-fs" - , "minimatch" - , "nopt" - , "node-uuid" - , "rimraf" - , "proto-list" - , "which" ] -, "devDependencies" : { "ronn" : "" } -, "engines" : { "node" : "0.4 || 0.5", "npm" : "1" } -, "scripts" : { "test" : "./test/run.sh" - , "prepublish" : "make doc" - } -, "licenses" : - [ { "type" : "MIT" - , "url" : "http://github.com/isaacs/npm/raw/master/LICENSE" - } - ] -} diff --git a/vendor/npm/npm-1.0.27/scripts/clean-old.sh b/vendor/npm/npm-1.0.27/scripts/clean-old.sh deleted file mode 100644 index 98b44e711..000000000 --- a/vendor/npm/npm-1.0.27/scripts/clean-old.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/sh - -# look for old 0.x cruft, and get rid of it. -# Should already be sitting in the npm folder. - -# Sorry, if readlink isn't available, then this is just too tricky. -# However, greadlink is fine, so Solaris can join the party, too. -readlink="readlink" -which $readlink >/dev/null 2>/dev/null -if [ $? -ne 0 ]; then - readlink="greadlink" - which $readlink >/dev/null 2>/dev/null - if [ $? -ne 0 ]; then - echo "Can't find the readlink or greadlink command. Aborting." - exit 1 - fi -fi - -if [ "x$npm_config_prefix" != "x" ]; then - PREFIXES=$npm_config_prefix -else - node="$NODE" - if [ "x$node" = "x" ]; then - node=`which node` - fi - if [ "x$node" = "x" ]; then - echo "Can't find node to determine prefix. Aborting." - exit 1 - fi - - - PREFIX=`dirname $node` - PREFIX=`dirname $PREFIX` - echo "cleanup prefix=$PREFIX" - PREFIXES=$PREFIX - - altprefix=`"$node" -e process.installPrefix` - if [ "x$altprefix" != "x" ] && [ "x$altprefix" != "x$PREFIX" ]; then - echo "altprefix=$altprefix" - PREFIXES="$PREFIX $altprefix" - fi -fi - -# now prefix is where npm would be rooted by default -# go hunting. - -packages= -for prefix in $PREFIXES; do - packages="$packages - "`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache` -done - -packages=`echo $packages` - -echo "" -echo "This script will find and eliminate any shims, symbolic" -echo "links, and other cruft that was installed by npm 0.x." -echo "" - -if [ "x$packages" != "x" ]; then - echo "The following packages appear to have been installed with" - echo "an old version of npm, and will be removed forcibly:" - for pkg in $packages; do - echo " $pkg" - done - echo "Make a note of these. You may want to install them" - echo "with npm 1.0 when this process is completed." - echo "" -fi - -OK= -if [ "x$1" = "x-y" ]; then - OK="yes" -fi - -while [ "$OK" != "y" ] && [ "$OK" != "yes" ] && [ "$OK" != "no" ]; do - echo "Is this OK? enter 'yes' or 'no' " - read OK -done -if [ "$OK" = "no" ]; then - echo "Aborting" - exit 1 -fi - -filelist="" - -for prefix in $PREFIXES; do - # remove any links into the .npm dir, or links to - # version-named shims/symlinks. - for folder in share/man bin lib/node; do - find $prefix/$folder -type l | while read file; do - target=`$readlink $file | grep '/\.npm/'` - if [ "x$target" != "x" ]; then - # found one! - echo rm -rf "$file" - rm -rf "$file" - # also remove any symlinks to this file. - base=`basename "$file"` - base=`echo "$base" | awk -F@ '{print $1}'` - if [ "x$base" != "x" ]; then - find "`dirname $file`" -type l -name "$base"'*' \ - | while read l; do - target=`$readlink "$l" | grep "$base"` - if [ "x$target" != "x" ]; then - echo rm -rf $l - rm -rf $l - fi - done - fi - fi - done - - # Scour for shim files. These are relics of 0.2 npm installs. - # note: grep -r is not portable. - find $prefix/$folder -type f \ - | xargs grep -sl '// generated by npm' \ - | while read file; do - echo rm -rf $file - rm -rf $file - done - done - - # now remove the package modules, and the .npm folder itself. - if [ "x$packages" != "x" ]; then - for pkg in $packages; do - echo rm -rf $prefix/lib/node/$pkg - rm -rf $prefix/lib/node/$pkg - echo rm -rf $prefix/lib/node/$pkg\@* - rm -rf $prefix/lib/node/$pkg\@* - done - fi - - for folder in lib/node/.npm lib/npm share/npm; do - if [ -d $prefix/$folder ]; then - echo rm -rf $prefix/$folder - rm -rf $prefix/$folder - fi - done -done - -echo "" -echo 'All clean!' - -exit 0 diff --git a/vendor/npm/npm-1.0.27/scripts/install.sh b/vendor/npm/npm-1.0.27/scripts/install.sh deleted file mode 100644 index 36c913562..000000000 --- a/vendor/npm/npm-1.0.27/scripts/install.sh +++ /dev/null @@ -1,159 +0,0 @@ -#!/bin/sh - -if [ "x$0" = "xsh" ]; then - # run as curl | sh - # on some systems, you can just do cat>npm-install.sh - # which is a bit cuter. But on others, &1 is already closed, - # so catting to another script file won't do anything. - curl -s http://npmjs.org/install.sh > npm-install-$$.sh - sh npm-install-$$.sh - ret=$? - rm npm-install-$$.sh - exit $ret -fi - -npm_config_loglevel="error" -if ! [ "x$npm_debug" = "x" ]; then - set -x - npm_config_loglevel="verbose" -fi -export npm_config_loglevel - -# make sure that node exists -node=`which node 2>&1` -ret=$? -if [ $ret -ne 0 ] || ! [ -x "$node" ]; then - echo "npm cannot be installed without nodejs." >&2 - echo "Install node first, and then try again." >&2 - echo "" >&2 - echo "Maybe node is installed, but not in the PATH?" >&2 - echo "Note that running as sudo can change envs." >&2 - echo "" - echo "PATH=$PATH" >&2 - exit $ret -fi - -# set the temp dir -TMP="${TMPDIR}" -if [ "x$TMP" = "x" ]; then - TMP="/tmp" -fi -TMP="${TMP}/npm.$$" -rm -rf "$TMP" || true -mkdir "$TMP" -if [ $? -ne 0 ]; then - echo "failed to mkdir $TMP" >&2 - exit 1 -fi - -BACK="$PWD" - -# sniff for gtar/gegrep/gmake -# use which, but don't trust it very much. - -tar="${TAR}" -if [ -z "$tar" ]; then - tar=tar -fi - -egrep=`which gegrep 2>&1` -if [ $? -ne 0 ] || ! [ -x $egrep ]; then - egrep=egrep -fi - -make=`which gmake 2>&1` -if [ $? -ne 0 ] || ! [ -x $make ]; then - make=`which make 2>&1` - if [ $? -ne 0 ] || ! [ -x $make ]; then - make=NOMAKE - echo "Installing without make. This may fail." >&2 - fi -fi - -t="${npm_install}" -if [ -z "$t" ]; then - t="latest" -fi - -url=`curl -s -L http://registry.npmjs.org/npm/$t \ - | $egrep -o 'tarball":"[^"]+' \ - | head -n 1 \ - | $egrep -o 'http://.*'` -echo "fetching: $url" >&2 - -ret=$? -if [ $ret -ne 0 ]; then - echo "Failed to get tarball url" >&2 - exit $ret -fi - -cd "$TMP" \ - && curl -s -L "$url" | gzip --decompress --stdout | $tar -xf - \ - && cd * \ - && (node_version=`"$node" --version 2>&1` - ret=$? - if [ $ret -eq 0 ]; then - req=`"$node" bin/read-package-json.js package.json engines.node` - if [ -e node_modules ]; then - "$node" node_modules/semver/bin/semver -v "$node_version" -r "$req" - ret=$? - else - "$node" bin/semver.js -v "$node_version" -r "$req" - ret=$? - fi - fi - if [ $ret -ne 0 ]; then - echo "You need node $req to run this program." >&2 - echo "node --version reports: $node_version" >&2 - echo "Please upgrade node before continuing." - exit $ret - fi) \ - && (ver=`"$node" bin/read-package-json.js package.json version` - isnpm10=0 - if [ $ret -eq 0 ]; then - req=`"$node" bin/read-package-json.js package.json engines.node` - if [ -e node_modules ]; then - if "$node" node_modules/semver/bin/semver -v "$ver" -r "1" - then - isnpm10=1 - fi - else - if "$node" bin/semver -v "$ver" -r ">=1.0"; then - isnpm10=1 - fi - fi - fi - - ret=0 - if [ $isnpm10 -eq 1 ] && [ -f "scripts/clean-old.sh" ]; then - if ! [ "x$skipclean" = "x" ] \ - || [ "x$clean" = "xno" ] \ - || [ "x$clean" = "xn" ]; then - echo "Skipping 0.x cruft clean" >&2 - ret=0 - elif [ "x$clean" = "xy" ] || [ "x$clean" = "xyes" ]; then - NODE="$node" /bin/sh "scripts/clean-old.sh" "-y" - ret=$? - else - NODE="$node" /bin/sh "scripts/clean-old.sh" &2 - exit $ret - fi) \ - && (if [ "$make" = "NOMAKE" ] || ! $make clean install; then - "$node" cli.js rm npm -gf - "$node" cli.js install -gf - fi) \ - && cd "$BACK" \ - && rm -rf "$TMP" \ - && echo "It worked" - -ret=$? -if [ $ret -ne 0 ]; then - echo "It failed" >&2 -fi -exit $ret diff --git a/vendor/npm/npm-1.0.27/test/common.js b/vendor/npm/npm-1.0.27/test/common.js deleted file mode 100644 index 2755056b1..000000000 --- a/vendor/npm/npm-1.0.27/test/common.js +++ /dev/null @@ -1,7 +0,0 @@ - -// whatever, it's just tests. -;["util","assert"].forEach(function (thing) { - thing = require("thing") - for (var i in thing) global[i] = thing[i] -} - diff --git a/vendor/npm/npm-1.0.27/test/disabled/bundlerecurs/package.json b/vendor/npm/npm-1.0.27/test/disabled/bundlerecurs/package.json deleted file mode 100644 index d87041170..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/bundlerecurs/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name" : "bundletest" -, "version" : "1.0.0" -, "dependencies" : { "bundletest" : "*" } -} diff --git a/vendor/npm/npm-1.0.27/test/disabled/failer/package.json b/vendor/npm/npm-1.0.27/test/disabled/failer/package.json deleted file mode 100644 index e1f8e946b..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/failer/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name" : "failer" -, "version" : "9999.999.99" -, "dependencies" : { "base64" : "*" } -, "scripts" : { "preinstall" : "exit 1" } -} diff --git a/vendor/npm/npm-1.0.27/test/disabled/fast/package.json b/vendor/npm/npm-1.0.27/test/disabled/fast/package.json deleted file mode 100644 index 9de6b81c3..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/fast/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "name" : "fast" -, "description" : "does nothing, and not very fast" -, "version" : "1.2.3" -, "scripts" : -{ "preinstall" : "sleep 1 && echo fast 1 $(date +%s) && echo fast 2" -, "install" : "sleep 1 && echo fast 2 $(date +%s) && echo fast 3" -, "postinstall" : "sleep 1 && echo fast 3 $(date +%s) && echo fast 4" -, "preactivate" : "sleep 1 && echo fast 4 $(date +%s) && echo fast 5" -, "activate" : "sleep 1 && echo fast 5 $(date +%s) && echo fast 6" -, "postactivate" : "sleep 1 && echo fast 6 $(date +%s) && echo fast 7" -} -} diff --git a/vendor/npm/npm-1.0.27/test/disabled/package-config/package.json b/vendor/npm/npm-1.0.27/test/disabled/package-config/package.json deleted file mode 100644 index 7ec97d380..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/package-config/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"package-config" -,"version":"1.2.3" -,"config":{"foo":"bar"} -,"scripts":{"test":"./test.js"}} diff --git a/vendor/npm/npm-1.0.27/test/disabled/package-config/test.js b/vendor/npm/npm-1.0.27/test/disabled/package-config/test.js deleted file mode 100755 index 7337b237b..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/package-config/test.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var env = process.env - , orig = require(process.env.npm_package_name+"/package.json").config - , assert = require("assert") - -console.log("Before running this test, do:\n" - +" npm config set package-config:foo boo\n" - +"or else it's about to fail.") -assert.equal(env.npm_package_config_foo, "boo", "foo != boo") -assert.equal(orig.foo, "bar", "original foo != bar") -assert.equal(env["npm_config_package-config:foo"], "boo", - "package-config:foo != boo") -console.log({ foo: env.npm_package_config_foo - , orig_foo: orig.foo - , "package-config:foo": env["npm_config_package-config:foo"] - }) diff --git a/vendor/npm/npm-1.0.27/test/disabled/slow/package.json b/vendor/npm/npm-1.0.27/test/disabled/slow/package.json deleted file mode 100644 index 75c404606..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/slow/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "name" : "slow" -, "description" : "just like fast, but even slower" -, "version" : "1.2.3" -, "scripts" : - { "preinstall" : "sleep 1 && echo slow 1 $(date +%s) && sleep 1 && echo slow 2 $(date +%s)" - , "install" : "sleep 1 && echo slow 2 $(date +%s) && sleep 1 && echo slow 3 $(date +%s)" - , "postinstall" : "sleep 1 && echo slow 3 $(date +%s) && sleep 1 && echo slow 4 $(date +%s)" - , "preactivate" : "sleep 1 && echo slow 4 $(date +%s) && sleep 1 && echo slow 5 $(date +%s)" - , "activate" : "sleep 1 && echo slow 5 $(date +%s) && sleep 1 && echo slow 6 $(date +%s)" - , "postactivate" : "sleep 1 && echo slow 6 $(date +%s) && sleep 1 && echo slow 7 $(date +%s)" - } -} diff --git a/vendor/npm/npm-1.0.27/test/disabled/startstop/package.json b/vendor/npm/npm-1.0.27/test/disabled/startstop/package.json deleted file mode 100644 index bee2a2fd3..000000000 --- a/vendor/npm/npm-1.0.27/test/disabled/startstop/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name":"startstop" -,"version":"1.2.3" -,"scripts":{"start":"echo 'start'","stop":"echo 'stop'"}} diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/package.json deleted file mode 100644 index 374b4432b..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-blerg" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -} diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/test.js b/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/test.js deleted file mode 100644 index f548458ac..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-blerg/test.js +++ /dev/null @@ -1,5 +0,0 @@ - -var assert = require("assert") -assert.equal(undefined, process.env.npm_config__password, "password exposed!") -assert.equal(undefined, process.env.npm_config__auth, "auth exposed!") -assert.equal(undefined, process.env.npm_config__authCrypt, "authCrypt exposed!") diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/package.json deleted file mode 100644 index 01153a2df..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ "name":"npm-test-env-reader" -, "version" : "1.2.3" -, "dependencies" : { "connect":"*", "fab":"*", "glob":"*" } -, "scripts" : - { "install" : "./test.sh" - , "preinstall" : "./test.sh" - , "activate" : "./test.sh" - , "postactivate" : "./test.sh" - , "preuninstall" : "./test.sh" - , "postuninstall" : "./test.sh" - , "predeactivate" : "./test.sh" - , "test" : "./test.sh" - , "stop" : "./test.sh" - , "start" : "./test.sh" - , "restart" : "./test.sh" - , "foo" : "./test.sh" - } -} diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/test.sh b/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/test.sh deleted file mode 100755 index b4ca4374e..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-env-reader/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh -env | grep npm | sort | uniq -echo PATH=$PATH diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/package.json deleted file mode 100644 index 49e26742d..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-missing-bindir" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -, "directories": { "bin" : "./not-found" } } diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/test.js b/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/test.js deleted file mode 100644 index f548458ac..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-missing-bindir/test.js +++ /dev/null @@ -1,5 +0,0 @@ - -var assert = require("assert") -assert.equal(undefined, process.env.npm_config__password, "password exposed!") -assert.equal(undefined, process.env.npm_config__auth, "auth exposed!") -assert.equal(undefined, process.env.npm_config__authCrypt, "authCrypt exposed!") diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-private/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-private/package.json deleted file mode 100644 index 3d95a37af..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-private/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"npm-test-private" -,"version":"9.9.9-9" -,"homepage":"http://www.youtube.com/watch?v=1MLry6Cn_D4" -,"private":"true"} diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-test-package/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-test-package/package.json deleted file mode 100644 index c5c5aeabc..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-test-package/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-test-package" -, "author" : "Testy McMock" -, "version" : "1.2.3-99-b" -, "description" : "This is a test package used for debugging. It has some random data and that's all." -} diff --git a/vendor/npm/npm-1.0.27/test/packages/npm-test-url-dep/package.json b/vendor/npm/npm-1.0.27/test/packages/npm-test-url-dep/package.json deleted file mode 100644 index b19a167c8..000000000 --- a/vendor/npm/npm-1.0.27/test/packages/npm-test-url-dep/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "name":"npm-test-url-dep" -, "version" : "1.2.3" -, "files" : [] -, "dependencies" : - { "express" : "*" - , "npm" : "https://github.com/isaacs/npm/tarball/master" } } diff --git a/vendor/npm/npm-1.0.27/test/run.sh b/vendor/npm/npm-1.0.27/test/run.sh deleted file mode 100755 index 9b4189acc..000000000 --- a/vendor/npm/npm-1.0.27/test/run.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash - -# the "npm" command is set to a custom function here so that we can -# test the code in this repo, rather than whichever version of npm -# happens to be installed. - -main () { - # setup - FAILURES=0 - - cd "$TESTDIR" - - npm config ls - - # install - npm install "$NPMPKG" || exit 1 - - # used in test later - npm config set package-config:foo boo || exit 1 - - npm install $( ls packages | awk '{print "packages/" $1 }' ) || exit 1 - (ls packages | while read pkg; do - npm test "$pkg" - done) || exit 1 - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - if ! [ "$npm_package_config_publishtest" == "true" ]; then - echo_err "To test publishing: npm config set npm:publishtest true" - else - # attempt to publish and unpublish each of them. - npm install "$NPMPKG" || exit 1 - - (ls packages | grep -v 'npm-test-private' | while read pkg; do - npm publish packages/$pkg || exit 1 - npm install $pkg || exit 1 - npm unpublish $pkg || exit 1 - done) || exit 1 - - # verify that the private package can't be published - # bypass the test-harness npm function. - "$NPMCLI" publish packages/npm-test-private && ( - npm unpublish npm-test-private - exit 1000 - ) - if [ $? -eq 1000 ]; then - fail "Private package shouldn't be publishable" >&2 - fi - - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - fi - - if [ $FAILURES -eq 0 ]; then - echo_err "ok" - rm -rf $TMP - else - echo_err "FAILED: $FAILURES" - fi - exit $FAILURES -} - - - -#################### -# Test Harness below - -# fake functions -npm () { - echo -e "npm $@" - "$NPMCLI" "$@" \ - || fail npm "$@" -} - -# get the absolute path of the executable -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")" -NPMCLI="$NPMPKG/cli.js" -TESTDIR="$NPMPKG/test/" -TMP=${TMPDIR:-/tmp} -rm -rf $TMP/npm* -TMP=$TMP/npm-test-$$ -echo "Testing in $TMP ..." -ROOTDIR="$TMP/root" - -cleanup () { - if [ "$FAILURES" != "0" ] && [ "$FAILURES" != "" ]; then - return - fi - [ -d "$ROOTDIR" ] && rm -rf -- "$ROOTDIR" - mkdir -p -- "$ROOTDIR" -} - -export npm_config_prefix="$ROOTDIR" -export npm_config_color="always" -export npm_config_global=true -# have to set this to false, or it'll try to test itself forever -export npm_config_npat=false -export PATH="$PATH":"$ROOTDIR/bin":"$ROOTDIR/node_modules/.bin" -export NODE_PATH="$ROOTDIR/node_modules" - -echo_err () { - echo "$@" >&2 -} -fail () { - let 'FAILURES += 1' - echo_err "" - echo_err -e "\033[33mFailure: $@\033[m" - exit 1 -} - -cleanup -main diff --git a/vendor/npm/npm-1.0.27/test/update-test.sh b/vendor/npm/npm-1.0.27/test/update-test.sh deleted file mode 100755 index f72c90dd9..000000000 --- a/vendor/npm/npm-1.0.27/test/update-test.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") - -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -DIR=$( dirname -- "$SELF_PATH" ) - -export npm_config_root=$DIR/root -export npm_config_binroot=$DIR/bin - -rm -rf $DIR/{root,bin} -mkdir -p $DIR/root -mkdir -p $DIR/bin -npm ls installed 2>/dev/null | grep -v npm | awk '{print $1}' | xargs npm rm &>/dev/null -npm install \ - base64@1.0.0 \ - eyes@0.1.1 \ - vows@0.2.5 \ - websocket-server@1.0.5 &>/dev/null -npm install ./test/packages/blerg &>/dev/null -npm install vows@0.3.0 &>/dev/null - -echo "" -echo "##" -echo "## starting update" -echo "##" -echo "" - -npm update - -echo "" -echo "##" -echo "## update done, all should be 'latest'" -echo "##" -echo "" - -list=$( npm ls installed remote 2>/dev/null ) -echo "$list" -notlatest=$( echo "$list" | grep -v latest ) -if [ "$notlatest" != "" ]; then - echo "Failed: not latest" - echo $notlatest -else - echo "ok" -fi diff --git a/vendor/npm/npm-1.0.3/.gitignore b/vendor/npm/npm-1.0.3/.gitignore deleted file mode 100644 index 76d8e6813..000000000 --- a/vendor/npm/npm-1.0.3/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*.swp -test/bin -test/output.log -test/packages/*/node_modules -test/packages/npm-test-depends-on-spark/which-spark.log -test/packages/test-package/random-data.txt -test/root -node_modules/ronn -node_modules/node-uuid -node_modules/.bin -npm-debug.log diff --git a/vendor/npm/npm-1.0.3/.gitmodules b/vendor/npm/npm-1.0.3/.gitmodules deleted file mode 100644 index cd1a43bd2..000000000 --- a/vendor/npm/npm-1.0.3/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "node_modules/semver"] - path = node_modules/semver - url = git://github.com/isaacs/node-semver.git -[submodule "node_modules/abbrev"] - path = node_modules/abbrev - url = git://github.com/isaacs/abbrev-js.git -[submodule "node_modules/nopt"] - path = node_modules/nopt - url = git://github.com/isaacs/nopt.git diff --git a/vendor/npm/npm-1.0.3/AUTHORS b/vendor/npm/npm-1.0.3/AUTHORS deleted file mode 100644 index d9b570ff3..000000000 --- a/vendor/npm/npm-1.0.3/AUTHORS +++ /dev/null @@ -1,31 +0,0 @@ -# Authors ordered by first contribution. -Isaac Z. Schlueter (http://blog.izs.me/) -Steve Steiner (http://websaucesoftware.com/blog/) -Mikeal Rogers (http://www.mikealrogers.com/) -Aaron Blohowiak (http://aaronblohowiak.com/) -Martyn Smith (http://dollyfish.net.nz/) -Mathias Pettersson (http://mape.me/) -Brian Hammond (http://fictorial.com/) -Charlie Robbins (http://www.charlierobbins.com/) -Francisco Treacy (http://franciscotreacy.com/) -Cliffano Subagio (http://blog.cliffano.com/) -Christian Eager (http://perpenduum.com) -Dav Glass (http://blog.davglass.com) -Alex K. Wolfe -James Sanders (http://james-sanders.com/) -Reid Burke (http://reidburke.com/) -Arlo Breault (http://thoughtherder.com/) -Timo Derstappen (http://teemow.com) -Bradley Meck -Bart Teeuwisse (http://thecodemill.biz/) -Ben Noordhuis (http://bnoordhuis.nl/) -Tor Valamo (http://www.magnimedia.no/) -Whyme.Lyu <5longluna@gmail.com> (http://whyme.kuantu.com/) -Olivier Melcher -Tomaž Muraus (http://www.tomaz-muraus.info) -Evan Meagher (http://evanmeagher.net/) -Orlando Vazquez (http://2wycked.net/) -George Miroshnykov -Geoff Flarity (http://ca.linkedin.com/pub/geoff-flarity/a/536/43a) -Pete Kruckenberg -Chris Wong diff --git a/vendor/npm/npm-1.0.3/CHANGES b/vendor/npm/npm-1.0.3/CHANGES deleted file mode 120000 index 0dade3591..000000000 --- a/vendor/npm/npm-1.0.3/CHANGES +++ /dev/null @@ -1 +0,0 @@ -doc/changelog.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/LICENSE b/vendor/npm/npm-1.0.3/LICENSE deleted file mode 100644 index f7501dc27..000000000 --- a/vendor/npm/npm-1.0.3/LICENSE +++ /dev/null @@ -1,32 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -"Node.js" and "node" trademark Joyent, Inc. npm is not officially -part of the Node.js project, and is neither owned by nor -officially affiliated with Joyent, Inc. - -Packages published in the npm registry are not part of npm -itself, and are the sole property of their respective -maintainers. diff --git a/vendor/npm/npm-1.0.3/Makefile b/vendor/npm/npm-1.0.3/Makefile deleted file mode 100644 index cce45b19f..000000000 --- a/vendor/npm/npm-1.0.3/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -SHELL = bash - -docs = $(shell find doc -name '*.md' \ - |sed 's|.md|.1|g' \ - |sed 's|doc/|man1/|g' ) - -doc_subfolders = $(shell find doc -type d \ - |sed 's|doc/|man1/|g' ) - -# This is the default make target. -# Since 'make' typically does non-installation build stuff, -# it seems appropriate. -submodules: - ! [ -d .git ] || git submodule update --init - -latest: submodules - @echo "Installing latest published npm" - @echo "Use 'make install' or 'make link' to install the code" - @echo "in this folder that you're looking at right now." - node cli.js install - -install: submodules - node cli.js install -g -f - -# backwards compat -dev: install - -link: uninstall - node cli.js link -f - -clean: uninstall - -uninstall: submodules - node cli.js cache clean - node cli.js rm npm -g -f --loglevel error - -man: man1 - -man1: $(doc_subfolders) - [ -d man1 ] || mkdir -p man1 - -doc: man1 $(docs) - -# use `npm install ronn` for this to work. -man1/%.1: doc/%.md - @[ -x ./node_modules/.bin/ronn ] || node cli.js install ronn - ./node_modules/.bin/ronn --roff $< > $@ - -man1/%/: doc/%/ - @[ -d $@ ] || mkdir -p $@ - -test: submodules - node cli.js test - -version: link - git add package.json &&\ - git ci -m v$(shell npm -v) - -publish: link - git tag -s -m v$(shell npm -v) v$(shell npm -v) &&\ - git push origin master &&\ - npm publish - -.PHONY: latest install dev link doc clean uninstall test man diff --git a/vendor/npm/npm-1.0.3/README.md b/vendor/npm/npm-1.0.3/README.md deleted file mode 100644 index 326899e54..000000000 --- a/vendor/npm/npm-1.0.3/README.md +++ /dev/null @@ -1,172 +0,0 @@ -# npm - -This is just enough info to get you up and running. - -Much more info available via `npm help` once it's installed. - -## IMPORTANT - -**You need node v0.4 or higher to run this program.** - -To install an old **and unsupported** version of npm that works on node 0.3 -and prior: - - git clone git://github.com/isaacs/npm.git ./npm - cd npm - git checkout origin/0.2 - make dev - -## Simple Install - -To install npm with one command, do this: - - curl http://npmjs.org/install.sh | sh - -To skip the npm 0.x cleanup, do this: - - curl http://npmjs.org/install.sh | clean=no sh - -To say "yes" to the 0.x cleanup, but skip the prompt: - - curl http://npmjs.org/install.sh | clean=yes sh - -If that fails, try this: - - git clone http://github.com/isaacs/npm.git - cd npm - sudo make install - -If you're sitting in the code folder reading this document in your -terminal, then you've already got the code. Just do: - - sudo make install - -and npm will install itself. - -If you don't have make, and don't have curl or git, and ALL you have is -this code and node, you can probably do this: - - sudo node ./cli.js install -g - -However, note that github tarballs **do not contain submodules**, so -those won't work. You'll have to also fetch the appropriate submodules -listed in the .gitmodules file. - -## Permissions - -**tl;dr** - -* Use `sudo` for greater safety. Or don't, if you prefer not to. -* npm will downgrade permissions if it's root before running any build - scripts that package authors specified. - -### More details... - -As of version 0.3, it is recommended to run npm as root. -This allows npm to change the user identifier to the `nobody` user prior -to running any package build or test commands. - -If you are not the root user, or if you are on a platform that does not -support uid switching, then npm will not attempt to change the userid. - -If you would like to ensure that npm **always** runs scripts as the -"nobody" user, and have it fail if it cannot downgrade permissions, then -set the following configuration param: - - npm config set unsafe-perm false - -to prevent it from ever running in unsafe mode, even as non-root users. - -## Uninstalling - -So sad to see you go. - - sudo npm uninstall npm -g - -Or, if that fails, - - sudo make uninstall - -## More Severe Uninstalling - -Usually, the above instructions are sufficient. That will remove -npm, but leave behind anything you've installed. - -If you would like to remove all the packages that you have installed, -then you can use the `npm ls` command to find them, and then `npm rm` to -remove them. - -To remove cruft left behind by npm 0.x, you can use the included -`clean-old.sh` script file. You can run it conveniently like this: - - npm explore npm -g -- sh scripts/clean-old.sh - -## Using npm Programmatically - -If you would like to use npm programmatically, you can do that. -It's not very well documented, but it IS rather simple. - - var npm = require("npm") - npm.load(myConfigObject, function (er) { - if (er) return handlError(er) - npm.commands.install(["some", "args"], function (er, data) { - if (er) return commandFailed(er) - // command succeeded, and data might have some info - }) - npm.on("log", function (message) { .... }) - }) - -See `./bin/npm.js` for an example of pulling config values off of the -command line arguments using nopt. You may also want to check out `npm -help config` to learn about all the options you can set there. - -## More Docs - -Check out the [docs](http://github.com/isaacs/npm/blob/master/doc/), -especially the -[faq](http://github.com/isaacs/npm/blob/master/doc/faq.md#readme). - -You can use the `npm help` command to read any of them. - -If you're a developer, and you want to use npm to publish your program, -you should -[read this](http://github.com/isaacs/npm/blob/master/doc/developers.md#readme) - -## Legal Stuff - -"npm" and "the npm registry" are owned by Isaac Z. Schlueter. All -rights not explicitly granted in the MIT license are reserved. See the -included LICENSE file for more details. - -"Node.js" and "node" are trademarks owned by Joyent, Inc. npm is not -officially part of the Node.js project, and is neither owned by nor -officially affiliated with Joyent, Inc. - -The packages in the npm registry are not part of npm itself, and are the -sole property of their respective maintainers. While every effort is -made to ensure accountability, there is absolutely no guarantee, -warrantee, or assertion made as to the quality, fitness for a specific -purpose, or lack of malice in any given npm package. Modules -published on the npm registry are not affiliated with or endorsed by -Joyent, Inc., Isaac Z. Schlueter, Ryan Dahl, or the Node.js project. - -If you have a complaint about a package in the npm registry, and cannot -resolve it with the package owner, please express your concerns to -Isaac Z. Schlueter at . - -### In plain english - -This is mine; not my employer's, not Node's, not Joyent's, not Ryan -Dahl's. - -If you publish something, it's yours, and you are solely accountable -for it. Not me, not Node, not Joyent, not Ryan Dahl. - -If other people publish something, it's theirs. Not mine, not Node's, -not Joyent's, not Ryan Dahl's. - -Yes, you can publish something evil. It will be removed promptly if -reported, and we'll lose respect for you. But there is no vetting -process for published modules. - -If this concerns you, inspect the source before using packages. diff --git a/vendor/npm/npm-1.0.3/bin/npm-get-uid-gid.js b/vendor/npm/npm-1.0.3/bin/npm-get-uid-gid.js deleted file mode 100755 index 390e0f2fc..000000000 --- a/vendor/npm/npm-1.0.3/bin/npm-get-uid-gid.js +++ /dev/null @@ -1,16 +0,0 @@ -var argv = process.argv.slice(2) - , user = argv[0] || process.getuid() - , group = argv[1] || process.getgid() - -if (!isNaN(user)) user = +user -if (!isNaN(group)) group = +group - -console.error([user, group]) - -try { - process.setgid(group) - process.setuid(user) - console.log(JSON.stringify({uid:+process.getuid(), gid:+process.getgid()})) -} catch (ex) { - console.log(JSON.stringify({error:ex.message,errno:ex.errno})) -} diff --git a/vendor/npm/npm-1.0.3/bin/npm.js b/vendor/npm/npm-1.0.3/bin/npm.js deleted file mode 100755 index b50875734..000000000 --- a/vendor/npm/npm-1.0.3/bin/npm.js +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env node -;(function () { // wrapper in case we're in module_context mode -var log = require("../lib/utils/log") -log.waitForConfig() -log.info("ok", "it worked if it ends with") - -var fs = require("../lib/utils/graceful-fs") - , path = require("path") - , sys = require("../lib/utils/sys") - , npm = require("../npm") - , ini = require("../lib/utils/ini") - , rm = require("../lib/utils/rm-rf") - , errorHandler = require("../lib/utils/error-handler") - - , configDefs = require("../lib/utils/config-defs") - , shorthands = configDefs.shorthands - , types = configDefs.types - , nopt = require("nopt") - -log.verbose(process.argv, "cli") - -var conf = nopt(types, shorthands) -npm.argv = conf.argv.remain -if (npm.deref(npm.argv[0])) npm.command = npm.argv.shift() -else conf.usage = true - - -if (conf.version) { - console.log(npm.version) - return -} else log("npm@"+npm.version, "using") -log("node@"+process.version, "using") - -// make sure that this version of node works with this version of npm. -var semver = require("semver") - , nodeVer = process.version - , reqVer = npm.nodeVersionRequired -if (reqVer && !semver.satisfies(nodeVer, reqVer)) { - return errorHandler(new Error( - "npm doesn't work with node " + nodeVer - + "\nRequired: node@" + reqVer), true) -} - -process.on("uncaughtException", errorHandler) - -if (conf.usage && npm.command !== "help") { - npm.argv.unshift(npm.command) - npm.command = "help" -} - -// now actually fire up npm and run the command. -// this is how to use npm programmatically: -conf._exit = true -npm.load(conf, function (er) { - if (er) return errorHandler(er) - npm.commands[npm.command](npm.argv, errorHandler) -}) -})() diff --git a/vendor/npm/npm-1.0.3/bin/read-package-json.js b/vendor/npm/npm-1.0.3/bin/read-package-json.js deleted file mode 100755 index 8c95d86e8..000000000 --- a/vendor/npm/npm-1.0.3/bin/read-package-json.js +++ /dev/null @@ -1,22 +0,0 @@ -var argv = process.argv -if (argv.length < 3) { - console.error("Usage: read-package.json [ ...]") - process.exit(1) -} - -var fs = require("fs") - , file = argv[2] - , readJson = require("../lib/utils/read-json") - -readJson(file, function (er, data) { - if (er) throw er - if (argv.length === 3) console.log(data) - else argv.slice(3).forEach(function (field) { - field = field.split(".") - var val = data - field.forEach(function (f) { - val = val[f] - }) - console.log(val) - }) -}) diff --git a/vendor/npm/npm-1.0.3/cli.js b/vendor/npm/npm-1.0.3/cli.js deleted file mode 100755 index f9478d85a..000000000 --- a/vendor/npm/npm-1.0.3/cli.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require("./bin/npm.js") diff --git a/vendor/npm/npm-1.0.3/config b/vendor/npm/npm-1.0.3/config deleted file mode 100755 index 27fd1b0eb..000000000 --- a/vendor/npm/npm-1.0.3/config +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# this is a wicked hack, but whatever. - -CONFIGS=() -i=0 - -while [ $# -gt 0 ]; do - conf="$1" - case $conf in - --help) - echo "./config --param=value ..." - exit 0 - ;; - --*) - CONFIGS[$i]="${conf:2}" - ;; - *) - CONFIGS[$i]="$conf" - ;; - esac - let i++ - shift -done - -for c in "${CONFIGS[@]}"; do - echo '+node ./bin/npm.js config set "'"$c"'"' - node ./bin/npm.js config set "$c" -done -echo - -echo +node ./bin/npm.js config ls -echo -node ./bin/npm.js config ls diff --git a/vendor/npm/npm-1.0.3/doc/adduser.md b/vendor/npm/npm-1.0.3/doc/adduser.md deleted file mode 100644 index c6136814d..000000000 --- a/vendor/npm/npm-1.0.3/doc/adduser.md +++ /dev/null @@ -1,29 +0,0 @@ -npm-adduser(1) -- Add a registry user account -============================================= - -## SYNOPSIS - - npm adduser - -## DESCRIPTION - -Create or verify a user named `` in the npm registry, and -save the credentials to the `.npmrc` file. - -The username, password, and email are read in from prompts. - -You may use this command to change your email address, but not username -or password. - -To reset your password, go to - -You may use this command multiple times with the same user account to -authorize on a new machine. - -## CONFIGURATION - -### registry - -Default: http://registry.npmjs.org/ - -The base URL of the npm package registry. diff --git a/vendor/npm/npm-1.0.3/doc/author.md b/vendor/npm/npm-1.0.3/doc/author.md deleted file mode 120000 index b7a53cb66..000000000 --- a/vendor/npm/npm-1.0.3/doc/author.md +++ /dev/null @@ -1 +0,0 @@ -owner.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/bin.md b/vendor/npm/npm-1.0.3/doc/bin.md deleted file mode 100644 index 5e260647c..000000000 --- a/vendor/npm/npm-1.0.3/doc/bin.md +++ /dev/null @@ -1,10 +0,0 @@ -npm-bin(1) -- Display npm bin folder -==================================== - -## SYNOPSIS - - npm bin - -## DESCRIPTION - -Print the folder where npm will install executables. diff --git a/vendor/npm/npm-1.0.3/doc/build.md b/vendor/npm/npm-1.0.3/doc/build.md deleted file mode 100644 index 978f4a6d6..000000000 --- a/vendor/npm/npm-1.0.3/doc/build.md +++ /dev/null @@ -1,22 +0,0 @@ -npm-build(1) -- Build a package -=============================== - -## SYNOPSIS - - npm build - -* ``: - A folder containing a `package.json` file in its root. - -## DESCRIPTION - -This is the plumbing command called by `npm link` and `npm install`. - -It should generally not be called directly. - -## SEE ALSO - -* npm-install(1) -* npm-link(1) -* npm-scripts(1) -* npm-json(1) diff --git a/vendor/npm/npm-1.0.3/doc/cache.md b/vendor/npm/npm-1.0.3/doc/cache.md deleted file mode 100644 index 5c2680812..000000000 --- a/vendor/npm/npm-1.0.3/doc/cache.md +++ /dev/null @@ -1,60 +0,0 @@ -npm-cache(1) -- install a package -=================================== - -## SYNOPSIS - - npm cache add - npm cache add - npm cache add - npm cache add @ - - npm cache ls [] - - npm cache clean [] - -## DESCRIPTION - -* add: - Add the specified package to the local cache. This command is primarily - intended to be used internally by npm, but it can provide a way to - add data to the local installation cache explicitly. - -* ls: - Show the data in the cache. Argument is a path to show in the cache - folder. Works a bit like the `find` program, but limited by the - `depth` config. - -* clean: - Delete data out of the cache folder. If an argument is provided, then - it specifies a subpath to delete. If no argument is provided, then - the entire cache is cleared. - -## DETAILS - -npm stores cache data in `$HOME/.npm`. For each package that is added -to the cache, three pieces of information are stored in -`{cache}/{name}/{version}`: - -* .../package/: - A folder containing the package contents as they appear in the tarball. -* .../package.json: - The package.json file, as npm sees it, with overlays applied and a _id attribute. -* .../package.tgz: - The tarball for that version. - -Additionally, whenever a registry request is made, a `.cache.json` file -is placed at the corresponding URI, to store the ETag and the requested -data. - -Commands that make non-essential registry requests (such as `search` and -`view`, or the completion scripts) generally specify a minimum timeout. -If the `.cache.json` file is younger than the specified timeout, then -they do not make an HTTP request to the registry. - -## CONFIGURATION - -### cache - -Default: `$HOME/.npm` on Posix, or `$HOME/npm-cache` on Windows. - -The root cache folder. diff --git a/vendor/npm/npm-1.0.3/doc/changelog.md b/vendor/npm/npm-1.0.3/doc/changelog.md deleted file mode 100644 index fd8fff783..000000000 --- a/vendor/npm/npm-1.0.3/doc/changelog.md +++ /dev/null @@ -1,31 +0,0 @@ -npm-changelog(1) -- Changes -=========================== - -## HISTORY - -* 0.0 - Lots of sketches and false starts. Abandoned a few times. - Core functionality established. - -* 0.1 - push to beta, and announce - Solaris and Cygwin support - -* 0.2 - First allegedly "stable" release. - Most functionality implemented. - Used shim files and `name@version` symlinks - Feature explosion - Kind of a mess. - -* 0.3 - More correct permission/uid handling when running as root - Require node 0.4.0 - Reduce featureset - Packages without "main" modules don't export modules. - Remove support for invalid JSON (since node doesn't support it) - -* 1.0 - Simplify folder structure greatly. - Install locally (bundle by default) - Drastic rearchitecture diff --git a/vendor/npm/npm-1.0.3/doc/coding-style.md b/vendor/npm/npm-1.0.3/doc/coding-style.md deleted file mode 100644 index d09d4ea44..000000000 --- a/vendor/npm/npm-1.0.3/doc/coding-style.md +++ /dev/null @@ -1,184 +0,0 @@ -npm-coding-style(1) -- npm's "funny" coding style -================================================= - -## DESCRIPTION - -npm's coding style is a bit unconventional. It is not different for -difference's sake, but rather a carefully crafted style that is -designed to reduce visual clutter and make bugs more apparent. - -If you want to contribute to npm (which is very encouraged), you should -make your code conform to npm's style. - -## Line Length - -Keep lines shorter than 80 characters. It's better for lines to be -too short than to be too long. Break up long lists, objects, and other -statements onto multiple lines. - -## Indentation - -Two-spaces. Tabs are better, but they look like hell in web browsers -(and on github), and node uses 2 spaces, so that's that. - -Configure your editor appropriately. - -## Curly braces - -Curly braces belong on the same line as the thing that necessitates them. - -Bad: - - function () - { - -Good: - - function () { - -If a block needs to wrap to the next line, use a curly brace. Don't -use it if it doesn't. - -Bad: - - if (foo) { bar() } - while (foo) - bar() - -Good: - - if (foo) bar() - while (foo) { - bar() - } - -## Semicolons - -Don't use them except in four situations: - -* `for (;;)` loops. They're actually required. -* null loops like: `while (something) ;` (But you'd better have a good - reason for doing that.) -* case "foo": doSomething(); break -* In front of a leading ( or [ at the start of the line. - This prevents the expression from being interpreted - as a function call or property access, respectively. - -Some examples of good semicolon usage: - - ;(x || y).doSomething() - ;[a, b, c].forEach(doSomething) - for (var i = 0; i < 10; i ++) { - switch (state) { - case "begin": start(); continue - case "end": finish(); break - default: throw new Error("unknown state") - } - end() - } - -Note that starting lines with `-` and `+` also should be prefixed -with a semicolon, but this is much less common. - -## Comma First - -If there is a list of things separated by commas, and it wraps -across multiple lines, put the comma at the start of the next -line, directly below the token that starts the list. Put the -final token in the list on a line by itself. For example: - - var magicWords = [ "abracadabra" - , "gesundheit" - , "ventrilo" - ] - , spells = { "fireball" : function () { setOnFire() } - , "water" : function () { putOut() } - } - , a = 1 - , b = "abc" - , etc - , somethingElse - -## Whitespace - -Put a single space in front of ( for anything other than a function call. -Also use a single space wherever it makes things more readable. - -Don't leave trailing whitespace at the end of lines. Don't indent empty -lines. Don't use more spaces than are helpful. - -## Functions - -Use named functions. They make stack traces a lot easier to read. - -## Callbacks, Sync/async Style - -Use the asynchronous/non-blocking versions of things as much as possible. -It might make more sense for npm to use the synchronous fs APIs, but this -way, the fs and http and child process stuff all uses the same callback-passing -methodology. - -The callback should always be the last argument in the list. Its first -argument is the Error or null. - -Be very careful never to ever ever throw anything. It's worse than useless. -Just send the error message back as the first argument to the callback. - -## Errors - -Always create a new Error object with your message. Don't just return a -string message to the callback. Stack traces are handy. - -Use the `require("./utils/log").er` function. It takes a callback and an -error message, and returns an object that will report the message in the -event of a failure. It's quite handy. - - function myThing (args, cb) { - getData(args, function (er, data) { - if (er) return log.er(cb, "Couldn't get data")(er) - doSomethingElse(data, cb) - }) - } - function justHasToWork (cb) { - doSomething(log.er(cb, "the doSomething failed.")) - } - -## Logging - -Please clean up logs when they are no longer helpful. In particular, -logging the same object over and over again is not helpful. Logs should -report what's happening so that it's easier to track down where a fault -occurs. - -Use appropriate log levels. The default log() function logs at the -"info" level. See `npm help config` and search for "loglevel". - -## Case, naming, etc. - -Use lowerCamelCase for multiword identifiers when they refer to objects, -functions, methods, members, or anything not specified in this section. - -Use UpperCamelCase for class names (things that you'd pass to "new"). - -Use all-lower-hyphen-css-case for multiword filenames and config keys. - -Use named functions. They make stack traces easier to follow. - -Use CAPS_SNAKE_CASE for constants, things that should never change -and are rarely used. - -Use a single uppercase letter for function names where the function -would normally be anonymous, but needs to call itself recursively. It -makes it clear that it's a "throwaway" function. - -## null, undefined, false, 0 - -Boolean variables and functions should always be either `true` or -`false`. Don't set it to 0 unless it's supposed to be a number. - -When something is intentionally missing or removed, set it to `null`. - -Don't set things to `undefined`. Reserve that value to mean "not yet -set to anything." - -Boolean objects are verboten. diff --git a/vendor/npm/npm-1.0.3/doc/completion.md b/vendor/npm/npm-1.0.3/doc/completion.md deleted file mode 100644 index 2f80be395..000000000 --- a/vendor/npm/npm-1.0.3/doc/completion.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-completion(1) -- Tab Completion for npm -=========================================== - -## SYNOPSIS - - npm completion >> ~/.bashrc - npm completion >> ~/.zshrc - -## DESCRIPTION - -Sets up a function that enables tab-completion in all npm commands. - -You may of course also pipe the relevant script to a file such as -`/usr/local/etc/bash_completion.d/npm` if you have a system that will -read that file for you. - -When `COMP_CWORD`, `COMP_LINE`, and `COMP_POINT` are defined in the -environment, `npm completion` acts in "plumbing mode", and outputs -completions based on the arguments. diff --git a/vendor/npm/npm-1.0.3/doc/config.md b/vendor/npm/npm-1.0.3/doc/config.md deleted file mode 100644 index 1184fa997..000000000 --- a/vendor/npm/npm-1.0.3/doc/config.md +++ /dev/null @@ -1,491 +0,0 @@ -npm-config(1) -- Manage the npm configuration file -================================================== - -## SYNOPSIS - - npm config set [--global] - npm config get - npm config delete - npm config list - npm config edit - npm get - npm set [--global] - -## DESCRIPTION - -npm gets its configuration values from 5 sources, in this priority: - -* cli: - The command line flags. Putting `--foo bar` on the command line sets the - `foo` configuration parameter to `"bar"`. A `--` argument tells the cli - parser to stop reading flags. A `--flag` parameter that is at the *end* of - the command will be given the value of `true`. -* env: - Any environment variables that start with `npm_config_` will be interpreted - as a configuration parameter. For example, putting `npm_config_foo=bar` in - your environment will set the `foo` configuration parameter to `bar`. Any - environment configurations that are not given a value will be given the value - of `true`. Config values are case-insensitive, so `NPM_CONFIG_FOO=bar` will - work the same. -* $HOME/.npmrc (or the `userconfig` param, if set above): - This file is an ini-file formatted list of `key = value` parameters. -* $PREFIX/etc/npmrc (or the `globalconfig` param, if set above): - This file is an ini-file formatted list of `key = value` parameters -* default configs: - This is a set of configuration parameters that are internal to npm, and are - defaults if nothing else is specified. - -## Sub-commands - -Config supports the following sub-commands: - -### set - - npm config set key value - -Sets the config key to the value. - -If value is omitted, then it sets it to "true". - -### get - - npm config get key - -Echo the config value to stdout. - -### list - - npm config list - -Show all the config settings. - -### delete - - npm config delete key - -Deletes the key from all configuration files. - -### edit - - npm config edit - -Opens the config file in an editor. Use the `--global` flag to edit the -global config. - -## Shorthands and Other CLI Niceties - -The following shorthands are parsed on the command-line: - -* `-v`: `--version` -* `-h`, `-?`, `--help`, `-H`: `--usage` -* `-s`, `--silent`: `--loglevel silent` -* `-d`: `--loglevel info` -* `-dd`, `--verbose`: `--loglevel verbose` -* `-ddd`: `--loglevel silly` -* `-g`: `--global` -* `-l`: `--long` -* `-p`, `--porcelain`: `--parseable` -* `-reg`: `--registry` -* `-v`: `--version` -* `-f`: `--force` -* `-l`: `--long` -* `-desc`: `--description` -* `ll` and `la` commands: `ls --long` - -If the specified configuration param resolves unambiguously to a known -configuration parameter, then it is expanded to that configuration -parameter. For example: - - npm ls --par - # same as: - npm ls --parseable - -If multiple single-character shorthands are strung together, and the -resulting combination is unambiguously not some other configuration -param, then it is expanded to its various component pieces. For -example: - - npm ls -gpld - # same as: - npm ls --global --parseable --long --loglevel info - -## Per-Package Config Settings - -When running scripts (see `npm help scripts`) -the package.json "config" keys are overwritten in the environment if -there is a config param of `[@]:`. For example, if -the package.json has this: - - { "name" : "foo" - , "config" : { "port" : "8080" } - , "scripts" : { "start" : "node server.js" } } - -and the server.js is this: - - http.createServer(...).listen(process.env.npm_package_config_port) - -then the user could change the behavior by doing: - - npm config set foo:port 80 - -## Config Settings - -### always-auth - -* Default: false -* Type: Boolean - -Force npm to always require authentication when accessing the registry, -even for `GET` requests. - -### bindist - -* Default: Unstable node versions, `null`, otherwise - `"--"` -* Type: String or `null` - -Experimental: on stable versions of node, binary distributions will be -created with this tag. If a user then installs that package, and their -`bindist` tag is found in the list of binary distributions, they will -get that prebuilt version. - -Pre-build node packages have their preinstall, install, and postinstall -scripts stripped (since they are run prior to publishing), and do not -have their `build` directories automatically ignored. - -It's yet to be seen if this is a good idea. - -### browser - -* Default: OS X: `"open"`, others: `"google-chrome"` -* Type: String - -The browser that is called by the `npm docs` command to open websites. - -### cache - -* Default: Windows: `~/npm-cache`, Posix: `~/.npm` -* Type: path - -The location of npm's cache directory. See `npm help cache` - -### color - -* Default: true -* Type: Boolean or `"always"` - -If false, never shows colors. If `"always"` then always shows colors. -If true, then only prints color codes for tty file descriptors. - -### depth - -* Default: Infinity -* Type: Number - -The depth to go when recursing directories for `npm ls` and -`npm cache ls`. - -### description - -* Default: true -* Type: Boolean - -Show the description in `npm search` - -### dev - -* Default: false -* Type: Boolean - -Install `dev-dependencies` along with packages. - -Note that `dev-dependencies` are also installed if the `npat` flag is -set. - -### editor - -* Default: `EDITOR` environment variable if set, or `"vi"` -* Type: path - -The command to run for `npm edit` or `npm config edit`. - -### force - -* Default: false -* Type: Boolean - -Makes various commands more forceful. - -* lifecycle script failure does not block progress. -* publishing clobbers previously published versions. -* skips cache when requesting from the registry. -* prevents checks against clobbering non-npm files. - -### global - -* Default: false -* Type: Boolean - -Operates in "global" mode, so that packages are installed into the -`prefix` folder instead of the current working directory. See -`npm help folders` for more on the differences in behavior. - -* packages are installed into the `prefix/node_modules` folder, instead of the - current working directory. -* bin files are linked to `prefix/bin` -* man pages are linked to `prefix/share/man` - -### globalconfig - -* Default: {prefix}/etc/npmrc -* Type: path - -The config file to read for global config options. - -### group - -* Default: GID of the current process -* Type: String or Number - -The group to use when running package scripts in global mode as the root -user. - -### gzipbin - -* Default: "gzip" -* Type: path - -The gzip binary - -### init.version - -* Default: "0.0.0" -* Type: semver - -The value `npm init` should use by default for the package version. - -### init.author.name - -* Default: "0.0.0" -* Type: String - -The value `npm init` should use by default for the package author's name. - -### init.author.email - -* Default: "" -* Type: String - -The value `npm init` should use by default for the package author's email. - -### init.author.url - -* Default: "" -* Type: String - -The value `npm init` should use by default for the package author's homepage. - -### logfd - -* Default: stderr file descriptor -* Type: Number or Stream - -The location to write log output. - -### loglevel - -* Default: "warn" -* Type: String -* Values: "silent", "win", "error", "warn", "info", "verbose", "silly" - -What level of logs to report. On failure, *all* logs are written to -`npm-debug.log` in the current working directory. - -### long - -* Default: false -* Type: Boolean - -Show extended information in `npm ls` - -### node-version - -* Default: process.version -* Type: semver or false - -The node version to use when checking package's "engines" hash. - -### npat - -* Default: false -* Type: Boolean - -Run tests on installation and report results to the -`npaturl`. - -### npaturl - -* Default: Not yet implemented -* Type: url - -The url to report npat test results. - -### onload-script - -* Default: false -* Type: path - -A node module to `require()` when npm loads. Useful for programmatic -usage. - -### outfd - -* Default: standard output file descriptor -* Type: Number or Stream - -Where to write "normal" output. This has no effect on log output. - -### parseable - -* Default: false -* Type: Boolean - -Output parseable results from commands that write to -standard output. - -### prefix - -* Default: node's process.installPrefix -* Type: path - -The location to install global items. If set on the command line, then -it forces non-global commands to run in the specified folder. - -### proxy - -* Default: "HTTP_PROXY" or "http_proxy" environment variable, or null -* Type: url - -A proxy to use for outgoing http requests. - -### rebuild-bundle - -* Default: true -* Type: Boolean - -Rebuild bundled dependencies after installation. - -### registry - -* Default: https://registry.npmjs.org/ -* Type: url - -The base URL of the npm package registry. - -### rollback - -* Default: true -* Type: Boolean - -Remove failed installs. - -### searchopts - -* Default: "" -* Type: String - -Space-separated options that are always passed to search. - -### searchexclude - -* Default: "" -* Type: String - -Space-separated options that limit the results from search. - -### shell - -* Default: SHELL environment variable, or "bash" -* Type: path - -The shell to run for the `npm explore` command. - -### tag - -* Default: latest -* Type: String - -If you ask npm to install a package and don't tell it a specific version, then -it will install the specified tag. - -Also the tag that is added to the package@version specified by the `npm -tag` command, if no explicit tag is given. - -### tar - -* Default: TAR environment variable, or "tar" -* Type: path - -The tar executable - -### tmp - -* Default: TMPDIR environment variable, or "/tmp" -* Type: path - -Where to store temporary files and folders. All temp files are deleted -on success, but left behind on failure for forensic purposes. - -### unsafe-perm - -* Default: false if running as root, true otherwise -* Type: Boolean - -Set to true to suppress the UID/GID switching when running package -scripts. If set explicitly to false, then installing as a non-root user -will fail. - -### usage - -* Default: false -* Type: Boolean - -Set to show short usage output (like the -H output) -instead of complete help when doing `npm help`. - -### user - -* Default: "nobody" -* Type: String or Number - -The UID to set to when running package scripts as root. - -### username - -* Default: null -* Type: String - -The username on the npm registry. Set with `npm adduser` - -### userconfig - -* Default: ~/.npmrc on Posix, or ~/npm-config on Windows -* Type: path - -The location of user-level configuration settings. - -### version - -* Default: false -* Type: boolean - -If true, output the npm version and exit successfully. - -Only relevant when specified explicitly on the command line. - -### viewer - -* Default: "man" -* Type: path - -The program to use to view help content. diff --git a/vendor/npm/npm-1.0.3/doc/deprecate.md b/vendor/npm/npm-1.0.3/doc/deprecate.md deleted file mode 100644 index a6d7c74e7..000000000 --- a/vendor/npm/npm-1.0.3/doc/deprecate.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-deprecate(1) -- Deprecate a version of a package -==================================================== - -## SYNOPSIS - - npm deprecate [@] - -## DESCRIPTION - -This command will update the npm registry entry for a package, providing -a deprecation warning to all who attempt to install it. - -It works on version ranges as well as specific versions, so you can do -something like this: - - npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3" - -Note that you must be the package owner to deprecate something. See the -`owner` and `adduser` help topics. diff --git a/vendor/npm/npm-1.0.3/doc/developers.md b/vendor/npm/npm-1.0.3/doc/developers.md deleted file mode 100644 index eab9b8aa8..000000000 --- a/vendor/npm/npm-1.0.3/doc/developers.md +++ /dev/null @@ -1,167 +0,0 @@ -npm-developers(1) -- Developer Guide -==================================== - -## DESCRIPTION - -So, you've decided to use npm to develop (and maybe publish/deploy) -your project. - -Fantastic! - -There are a few things that you need to do above the simple steps -that your users will do to install your program. - -## About These Documents - -These are man pages. If you install npm, you should be able to -then do `man npm-thing` to get the documentation on a particular -topic. - -Any time you see "see npm-whatever(1)", you can do `man npm-whatever` -or `npm help whatever` to get at the docs. - -## What is a `package` - -A package is: - -* a) a folder containing a program described by a package.json file -* b) a gzipped tarball containing (a) -* c) a url that resolves to (b) -* d) a `@` that is published on the registry with (c) -* e) a `@` that points to (d) -* f) a `` that has a "latest" tag satisfying (e) - -Even if you never publish your package, you can still get a lot of -benefits of using npm if you just want to write a node program (a), and -perhaps if you also want to be able to easily install it elsewhere -after packing it up into a tarball (b). - -## The package.json File - -You need to have a `package.json` file in the root of your project to do -much of anything with npm. That is basically the whole interface. - -See npm-json(1) for details about what goes in that file. At the very -least, you need: - -* name: - This should be a string that identifies your project. Please do not - use the name to specify that it runs on node, or is in JavaScript. - You can use the "engines" field to explicitly state the versions of - node (or whatever else) that your program requires, and it's pretty - well assumed that it's javascript. - - It does not necessarily need to match your github repository name. - - So, `node-foo` and `bar-js` are bad names. `foo` or `bar` are better. - -* version: - A semver-compatible version. - -* engines: - Specify the versions of node (or whatever else) that your program - runs on. The node API changes a lot, and there may be bugs or new - functionality that you depend on. Be explicit. - -* author: - Take some credit. - -* scripts: - If you have a special compilation or installation script, then you - should put it in the `scripts` hash. You should definitely have at - least a basic smoke-test command as the "scripts.test" field. - See npm-scripts(1). - -* main: - If you have a single module that serves as the entry point to your - program (like what the "foo" package gives you at require("foo")), - then you need to specify that in the "main" field. - -* directories: - This is a hash of folders. The best ones to include are "lib" and - "doc", but if you specify a folder full of man pages in "man", then - they'll get installed just like these ones. - -You can use `npm init` in the root of your package in order to get you -started with a pretty basic package.json file. See `npm-init(1)` for -more info. - -## Keeping files *out* of your package - -Use a `.npmignore` file to keep stuff out of your package. If there's -no .npmignore file, but there *is* a .gitignore file, then npm will -ignore the stuff matched by the .gitignore file. If you *want* to -include something that is excluded by your .gitignore file, you can -create an empty .npmignore file to override it. - -## Link Packages - -`npm link` is designed to install a development package and see the -changes in real time without having to keep re-installing it. (You do -need to either re-link or `npm rebuild -g` to update compiled packages, -of course.) - -More info at `npm-link(1)`. - -## Before Publishing: Make Sure Your Package Installs and Works - -**This is important.** - -If you can not install it locally, you'll have -problems trying to publish it. Or, worse yet, you'll be able to -publish it, but you'll be publishing a broken or pointless package. -So don't do that. - -In the root of your package, do this: - - npm install . -g - -That'll show you that it's working. If you'd rather just create a symlink -package that points to your working directory, then do this: - - npm link - -Use `npm ls -g` to see if it's there. - -To test a local install, go into some other folder, and then do: - - cd ../some-other-folder - npm install ../my-package - -to install it locally into the node_modules folder in that other place. - -Then go into the node-repl, and try using require("my-thing") to -bring in your module's main module. - -## Create a User Account - -Create a user with the adduser command. It works like this: - - npm adduser - -and then follow the prompts. - -This is documented better in npm-adduser(1). So do this to get the -details: - - npm help adduser - -## Publish your package - -This part's easy. IN the root of your folder, do this: - - npm publish - -You can give publish a url to a tarball, or a filename of a tarball, -or a path to a folder. - -Note that pretty much **everything in that folder will be exposed** -by default. So, if you have secret stuff in there, use a `.npminclude` -or `.npmignore` file to list out the globs to include/ignore, or publish -from a fresh checkout. - -## Brag about it - -Send emails, write blogs, blab in IRC. - -Tell the world how easy it is to install your program! diff --git a/vendor/npm/npm-1.0.3/doc/docs.md b/vendor/npm/npm-1.0.3/doc/docs.md deleted file mode 100644 index 754407e01..000000000 --- a/vendor/npm/npm-1.0.3/doc/docs.md +++ /dev/null @@ -1,12 +0,0 @@ -npm-docs(1) -- Docs for a package in a web browser maybe -======================================================== - -## SYNOPSIS - - npm docs - -## DESCRIPTION - -This command tries to guess at the likely location of a package's -documentation URL, and then tries to open it using the `--browser` -config param. diff --git a/vendor/npm/npm-1.0.3/doc/edit.md b/vendor/npm/npm-1.0.3/doc/edit.md deleted file mode 100644 index b5bd07947..000000000 --- a/vendor/npm/npm-1.0.3/doc/edit.md +++ /dev/null @@ -1,18 +0,0 @@ -npm-edit(1) -- Edit an installed package -======================================== - -## SYNOPSIS - - npm edit [@] - -## DESCRIPTION - -Opens the package folder in the default editor (or whatever you've -configured as the npm `editor` config -- see `npm help config`.) - -After it has been edited, the package is rebuilt so as to pick up any -changes in compiled packages. - -For instance, you can do `npm install connect` to install connect -into your package, and then `npm edit connect` to make a few -changes to your locally installed copy. diff --git a/vendor/npm/npm-1.0.3/doc/explore.md b/vendor/npm/npm-1.0.3/doc/explore.md deleted file mode 100644 index 6a1b71e9c..000000000 --- a/vendor/npm/npm-1.0.3/doc/explore.md +++ /dev/null @@ -1,16 +0,0 @@ -npm-explore(1) -- Browse an installed package -============================================= - -## SYNOPSIS - - npm explore [@] [ -- ] - -## DESCRIPTION - -Spawn a subshell in the directory of the installed package specified. - -If a command is specified, then it is run in the subshell, which then -immediately terminates. - -Note that the package is *not* automatically rebuilt afterwards, so be -sure to use `npm rebuild ` if you make any changes. diff --git a/vendor/npm/npm-1.0.3/doc/faq.md b/vendor/npm/npm-1.0.3/doc/faq.md deleted file mode 100644 index 479aad40c..000000000 --- a/vendor/npm/npm-1.0.3/doc/faq.md +++ /dev/null @@ -1,174 +0,0 @@ -npm-faq(1) -- Frequently Asked Questions -======================================== - -## Where can I find these docs in HTML? - - - -## It didn't work. - -That's not really a question. - -## Why didn't it work? - -I don't know yet. - -Read the error output, and if you can't figure out what it means, -do what it says and post a bug with all the information it asks for. - -## Where does npm put stuff? - -See `npm help folders` - -tl;dr: - -* Use the `npm root` command to see where modules go, and the `npm bin` - command to see where executables go -* Global installs are different from local installs. If you install - something with the `-g` flag, then its executables go in `npm bin -g` - and its modules go in `npm root -g`. - -## How do I install something everywhere? - -Install it globally by tacking `-g` or `--global` to the command. - -## I installed something globally, but I can't `require()` it - -Install it locally. - -## I don't wanna. - -Check out `npm link`. You might like it. - -## No, I really want 0.x style "everything's global" style. - -Ok, fine. Do this: - - echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bashrc - . ~/.bashrc - npm config set global true - -This is not recommended. - -## How do I list installed packages? - -`npm ls` - -## How do I search for packages? - -`npm search` - -Arguments are greps. `npm ls jsdom` shows jsdom packages. - -## How do I update npm? - - npm update npm -g - -You can also update all outdated local packages by doing `npm update` without -any arguments, or global packages by doing `npm update -g`. - -Occasionally, the version of npm will progress such that the current -version cannot be properly installed with the version that you have -installed already. (Consider, if there is ever a bug in the `update` -command.) - -In those cases, you can do this: - - curl http://npmjs.org/install.sh | sh - -## What is a `package`? - -A package is: - -* a) a folder containing a program described by a package.json file -* b) a gzipped tarball containing (a) -* c) a url that resolves to (b) -* d) a `@` that is published on the registry with (c) -* e) a `@` that points to (d) -* f) a `` that has a "latest" tag satisfying (e) - -Even if you never publish your package, you can still get a lot of -benefits of using npm if you just want to write a node program (a), and -perhaps if you also want to be able to easily install it elsewhere -after packing it up into a tarball (b). - -## How do I install node with npm? - -You don't. Try one of these: - -* -* -* - -## How can I use npm for development? - -See `npm help developers` and `npm help json`. - -You'll most likely want to `npm link` your development folder. That's -awesomely handy. - -To set up your own private registry, check out `npm help registry`. - -## Can I list a url as a dependency? - -Yes. It should be a url to a gzipped tarball containing a single folder -that has a package.json in its root. (See "what is a package?" above.) - -## OK, but can I list a git repo as a dependency? - -No. - -However, you can list a url as a dependency. - -## How do I symlink to a dev folder so I don't have to keep re-installing? - -See `npm help link` - -## The package registry website. What is that exactly? - -See `npm help registry`. - -## What's up with the insecure channel warnings? - -As of this writing, node has problems uploading files over HTTPS. That -means that publishes go over HTTP by default. - -Allegedly this problem is solved in node 0.4.7. You can suppress those -warnings by doing this: - - npm config set registry https://registry.npmjs.org - -## I forgot my password, and can't publish. How do I reset it? - -Go to . - -## I get ECONNREFUSED a lot. What's up? - -Either the registry is down, or node's DNS isn't able to reach out. -This happens a lot if you don't follow *all* the steps in the Cygwin -setup doc. - -To check if the registry is down, open up - -in a web browser. This will also tell you if you are just unable to -access the internet for some reason. - -If the registry IS down, let me know by emailing . I'll have -someone kick it or something. - -## Who does npm? - -`npm view npm author` - -`npm view npm contributors` - -## I have a question or request not addressed here. Where should I put it? - -Discuss it on the mailing list, or post an issue. - -* -* - -## Why does npm hate me? - -npm is not capable of hatred. It loves everyone, especially you. diff --git a/vendor/npm/npm-1.0.3/doc/find.md b/vendor/npm/npm-1.0.3/doc/find.md deleted file mode 120000 index eaad7acae..000000000 --- a/vendor/npm/npm-1.0.3/doc/find.md +++ /dev/null @@ -1 +0,0 @@ -list.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/folders.md b/vendor/npm/npm-1.0.3/doc/folders.md deleted file mode 100644 index 27f2ec83c..000000000 --- a/vendor/npm/npm-1.0.3/doc/folders.md +++ /dev/null @@ -1,175 +0,0 @@ -npm-folders(1) -- Folder Structures Used by npm -=============================================== - -## DESCRIPTION - -npm puts various things on your computer. That's its job. - -This document will tell you what it puts where. - -### tl;dr - -* Local install (default): puts stuff in ./node_modules -* Global install (with `-g`): puts stuff in /usr/local -* Install it **locally** if you're going to `require()` it. -* Install it **globally** if you're going to run it on the command line. - -### prefix Configuration - -The `prefix` config defaults to node's `process.installPrefix`. On most -systems, this is `/usr/local`. - -When the `global` flag is set, npm installs things into this prefix. -When it is not set, it uses the root of the current package, or the -current working directory if not in a package already. - -### Node Modules - -Packages are dropped into the `node_modules` folder under the `prefix`. -When installing locally, this means that you can -`require("packagename")` to load its main module, or -`require("packagename/lib/path/to/sub/module")` to load other modules. - -If you wish to `require()` a package, then install it locally. - -### Executables - -When in global mode, executables are linked into `prefix/bin`. - -When in local mode, executables are linked into -`prefix/node_modules/.bin`. - -### Man Pages - -When in global mode, man pages are linked into `prefix/share/man`. - -When in local mode, man pages are not installed. - -### Cache - -See `npm help cache`. Cache files are stored in `~/.npm` on Posix, or -`~/npm-cache` on Windows. - -This is controlled by the `cache` configuration param. - -### Temp Files - -Temporary files are stored by default in the folder specified by the -`tmp` config, which defaults to either the TMPDIR environment -variable, or `/tmp`. - -Temp files are given a unique folder under this root for each run of the -program, and are deleted upon successful exit. - -## More Information - -When doing local installings, npm first tries to find an appropriate -`prefix` folder. This is so that `npm install foo@1.2.3` will install -to the sensible root of your package, even if you happen to have `cd`ed -into some other folder. - -Starting at the $PWD, npm will walk up the folder tree checking for a -folder that contains either a `package.json` file, or a `node_modules` -folder. If such a thing is found, then that is treated as the effective -"current directory" for the purpose of running npm commands. (This -behavior is inspired by and similar to git's .git-folder seeking -logic when running git commands in a working dir.) - -If no package root is found, then the current folder is used. - -When you run `npm install foo@1.2.3`, then the package is loaded into -the cache, and then unpacked into `./node_modules/foo`. Then, any of -foo's dependencies are similarly unpacked into -`./node_modules/foo/node_modules/...`. - -Any bin files are symlinked to `./node_modules/.bin/`, so that they may -be found by npm scripts when necessary. - -### Global Installation - -If the `global` configuration is set to true, or if it is not explicitly -set false and no suitable node_modules folder was found, then npm will -install packages "globally". - -For global installation, packages are installed roughly the same way, -but the module root is `/usr/local/lib/node_modules`, and bin files are -linked to `/usr/local/bin` instead of `./node_modules/.bin`. - -### Cycles, Conflicts, and Folder Parsimony - -Cycles are handled using the property of node's module system that it -walks up the directories looking for node_modules folders. So, at every -stage, if a package is already installed in an ancestor node_modules -folder, then it is not installed at the current location. - -Consider the case above, where `foo -> bar -> baz`. Imagine if, in -addition to that, baz depended on bar, so you'd have: -`foo -> bar -> baz -> bar -> baz ...`. However, since the folder -structure is: foo/node_modules/bar/node_modules/baz, there's no need to -put another copy of bar into .../baz/node_modules, since when it calls -require("bar"), it will get the copy that is installed in -foo/node_modules/bar. - -This shortcut is only used if the exact same -version would be installed in multiple nested node_modules folders. It -is still possible to have `a/node_modules/b/node_modules/a` if the two -"a" packages are different versions. However, without repeating the -exact same package multiple times, an infinite regress will always be -prevented. - -Another optimization can be made by installing dependencies at the -highest level possible, below the localized "target" folder. - -For example, consider this dependency graph: - - foo - +-- bar@1.2.3 - | +-- baz@2.x - | | `-- quux@3.x - | | `-- bar@1.2.3 (cycle) - | `-- asdf@* - `-- baz@1.2.3 - `-- quux@3.x - `-- bar - -In this case, we might expect a folder structure like this: - - foo - +-- node_modules - +-- bar (1.2.3) <---[A] - | +-- node_modules - | | `-- baz (2.0.2) <---[B] - | | `-- node_modules - | | `-- quux (3.2.0) - | `-- asdf (2.3.4) - `-- baz (1.2.3) <---[C] - `-- node_modules - `-- quux (3.2.0) <---[D] - -Since foo depends directly on bar@1.2.3 and baz@1.2.3, those are -installed in foo's node_modules folder. - -Bar [A] has dependencies on baz and asdf, so those are installed in bar's -node_modules folder. Because it depends on `baz@2.x`, it cannot re-use -the `baz@1.2.3` installed in the parent node_modules folder [C], and -must install its own copy [B]. - -Underneath bar, the `baz->quux->bar` dependency creates a cycle. -However, because `bar` is already in `quux`'s ancestry [A], it does not -unpack another copy of bar into that folder. - -Underneath `foo->baz` [C], quux's [D] folder tree is empty, because its -dependnecy on bar is satisfied by the parent folder copy installed at [A]. - -For a graphical breakdown of what is installed where, use `npm ls`. - -### Publishing - -Upon publishing, npm will look in the node_modules folder. If any of -the items there are on the "dependencies" or "devDependencies" list, -and are not in the `bundledDependencies` array, then they will not be -included in the package tarball. - -This allows a package maintainer to install all of their dependencies -(and dev dependencies) locally, but only re-publish those items that -cannot be found elsewhere. diff --git a/vendor/npm/npm-1.0.3/doc/get.md b/vendor/npm/npm-1.0.3/doc/get.md deleted file mode 120000 index 3dc873736..000000000 --- a/vendor/npm/npm-1.0.3/doc/get.md +++ /dev/null @@ -1 +0,0 @@ -config.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/global.md b/vendor/npm/npm-1.0.3/doc/global.md deleted file mode 120000 index c3598dd7d..000000000 --- a/vendor/npm/npm-1.0.3/doc/global.md +++ /dev/null @@ -1 +0,0 @@ -folders.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/init.md b/vendor/npm/npm-1.0.3/doc/init.md deleted file mode 100644 index 5f6d81c2a..000000000 --- a/vendor/npm/npm-1.0.3/doc/init.md +++ /dev/null @@ -1,23 +0,0 @@ -npm init(1) -- Interactively create a package.json file -======================================================= - -## SYNOPSIS - - npm init - -## DESCRIPTION - -This will ask you a bunch of questions, and then write a package.json for you. - -It attempts to make reasonable guesses about what you want things to be set to, -and then writes a package.json file with the options you've selected. - -If you already have a package.json file, it'll read that first, and default to -the options in there. - -It is strictly additive, so it does not delete options from your package.json -without a really good reason to do so. - -## SEE ALSO - -npm-json(1) diff --git a/vendor/npm/npm-1.0.3/doc/install.md b/vendor/npm/npm-1.0.3/doc/install.md deleted file mode 100644 index eb1ec4ff7..000000000 --- a/vendor/npm/npm-1.0.3/doc/install.md +++ /dev/null @@ -1,99 +0,0 @@ -npm-install(1) -- install a package -=================================== - -## SYNOPSIS - - npm install (with no args in a package dir) - npm install - npm install - npm install - npm install - npm install @ - npm install @ - npm install @ - -## DESCRIPTION - -This command installs a package, and any packages that it depends on. - -* npm install (in package directory): - Install the dependencies in the local node_modules folder. - - In global mode, it is the same as `npm install $PWD` - -* npm install ``: - Install a package that is sitting on the filesystem. Note: if you just want - to link a dev directory into your npm root, you can do this more easily by - using `npm link`. - - In order to distinguish between this and remote installs, the argument - must either be "." or contain a "/" in it. - - Example: - - npm install ./package.tgz - -* npm install ``: - Fetch the tarball url, and then install it. In order to distinguish between - this and other options, the argument must start with "http://" or "https://" - - Example: - - npm install http://github.com/waveto/node-crypto/tarball/v0.0.5 - -* npm install ``: - Do a `@` install, where `` is the "tag" config. (See - `npm help config`) - - Example: - - npm install sax - -* npm install `@`: - Install the version of the package that is referenced by the specified tag. - If the tag does not exist in the registry data for that package, then this - will fail. - - Example: - - npm install sax@stable - -* npm install `@`: - Install the specified version of the package. This will fail if the version - has not been published to the registry. - - Example: - - npm install sax@0.1.1 - -* npm install `@`: - Install a version of the package matching the specified version range. This - will follow the same rules for resolving dependencies described in `npm help json`. - - Note that most version ranges must be put in quotes so that your shell will - treat it as a single argument. - - Example: - - npm install sax@">=0.1.0 <0.2.0" - -You may combine multiple arguments, and even multiple types of arguments. -For example: - - npm install sax@">=0.1.0 <0.2.0" bench supervisor - -The `--tag` argument will apply to all of the specified install targets. - -The `--force` argument will force npm to fetch remote resources even if a -local copy exists on disk. - - npm install sax --force - -## SEE ALSO - -* npm-build(1) -* npm-registry(1) -* npm-build(1) -* npm-link(1) -* npm-folders(1) -* npm-tag(1) diff --git a/vendor/npm/npm-1.0.3/doc/json.md b/vendor/npm/npm-1.0.3/doc/json.md deleted file mode 100644 index df6f3cb19..000000000 --- a/vendor/npm/npm-1.0.3/doc/json.md +++ /dev/null @@ -1,407 +0,0 @@ -npm-json(1) -- Specifics of npm's package.json handling -======================================================= - -## DESCRIPTION - -This document is all you need to know about what's required in your package.json -file. It must be actual JSON, not just a JavaScript object literal. - -A lot of the behavior described in this document is affected by the config -settings described in `npm help config`. - -## name - -The *most* important things in your package.json are the name and version fields. -Those are actually required, and your package won't install without -them. The name and version together form an identifier that is assumed -to be completely unique. Changes to the package should come along with -changes to the version. - -The name is what your thing is called. Some tips: - -* Don't put "js" or "node" in the name. It's assumed that it's js, since you're - writing a package.json file, and you can specify the engine using the "engines" - field. (See below.) -* The name ends up being part of a URL, an argument on the command line, and a - folder name. Any name with non-url-safe characters will be rejected. - Also, it can't start with a dot or an underscore. -* The name will probably be passed as an argument to require(), so it should - be something short, but also reasonably descriptive. -* You may want to check the npm registry to see if there's something by that name - already, before you get too attached to it. http://registry.npmjs.org/ - -## version - -The *most* important things in your package.json are the name and version fields. -Those are actually required, and your package won't install without -them. The name and version together form an identifier that is assumed -to be completely unique. Changes to the package should come along with -changes to the version. - -Version must be parseable by -[node-semver](https://github.com/isaacs/node-semver), which is bundled -with npm as a dependency. (`npm install semver` to use it yourself.) - -Here's how npm's semver implementation deviates from what's on semver.org: - -* Versions can start with "v" -* A numeric item separated from the main three-number version by a hyphen - will be interpreted as a "build" number, and will *increase* the version. - But, if the tag is not a number separated by a hyphen, then it's treated - as a pre-release tag, and is *less than* the version without a tag. - So, `0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta` - -This is a little bit confusing to explain, but matches what you see in practice -when people create tags in git like "v1.2.3" and then do "git describe" to generate -a patch version. - -## description - -Put a description in it. It's a string. This helps people discover your -package, as it's listed in `npm ls`. - -## keywords - -Put keywords in it. It's an array of strings. This helps people -discover your package as it's listed in `npm ls`. - -## homepage - -The url to the project homepage. - -**NOTE**: This is *not* the same as "url". If you put a "url" field, -then the registry will think it's a redirection to your package that has -been published somewhere else, and spit at you. - -Literally. Spit. I'm so not kidding. - -## people fields: author, contributors - -The "author" is one person. "contributors" is an array of people. A "person" -is an object with a "name" field and optionally "url" and "email", like this: - - { "name" : "Barney Rubble" - , "email" : "b@rubble.com" - , "url" : "http://barnyrubble.tumblr.com/" - } - -Or you can shorten that all into a single string, and npm will parse it for you: - - "Barney Rubble (http://barnyrubble.tumblr.com/) - -Both email and url are optional either way. - -npm also sets a top-level "maintainers" field with your npm user info. - -## files - -The "files" field is an array of files to include in your project. If -you name a folder in the array, then it will also include the files -inside that folder. (Unless they would be ignored by another rule.) - -You can also provide a ".npmignore" file in the root of your package, -which will keep files from being included, even if they would be picked -up by the files array. The ".npmignore" file works just like a -".gitignore". - -## main - -The main field is a module ID that is the primary entry point to your program. -That is, if your package is named `foo`, and a user installs it, and then does -`require("foo")`, then your main module's exports object will be returned. - -This should be a module ID relative to the root of your package folder. - -For most modules, it makes the most sense to have a main script and often not -much else. - -## bin - -A lot of packages have one or more executable files that they'd like to -install into the PATH. npm makes this pretty easy (in fact, it uses this -feature to install the "npm" executable.) - -To use this, supply a `bin` field in your package.json which is a map of -command name to local file name. On install, npm will link that file into -place right next to wherever node is installed. (Presumably, this is in your -PATH, and defaults to `/usr/local/bin`.) On activation, the versioned file -will get linked to the main filename (just like how the main.js stuff works, -but with an executable in the PATH.) - -For example, npm has this: - - { "bin" : { "npm" : "./cli.js" } } - -So, when you install npm, it'll create a symlink from the `cli.js` script to -`/usr/local/bin/npm-version`. Then, when you activate that version, it'll -create a symlink from `/usr/local/bin/npm-version` to `/usr/local/bin/npm`. - -Notice that if the executable file is interpreted by node (i.e., specifying -node in the shebang line), npm actually installs a shim instead of symlinking -it, which causes expressions `require.main === module` and `module.id === "."` -evaluate to `false` within the file. This seems unable to be resolved until -node provides a "flexible `require()`". - -Shortcut: If you have a single executable, and its name is already what you -want it to be, then you can just supply it as a string. For example: - - { "bin" : "./path/to/program" } - -would be the same as this: - - { "bin" : { "program" : "./path/to/program" } } - -## man - -Specify either a single file or an array of filenames to put in place for the -`man` program to find. - -If only a single file is provided, then it's installed such that it is the -result from `man `, regardless of its actual filename. For example: - - { "name" : "foo" - , "man" : "./man/doc.1" - } - -would link the `./man/doc.1` file in such that it is the target for `man foo` - -If the filename doesn't start with the package name, then it's prefixed. -So, this: - - { "name" : "foo" - , "man" : [ "./man/foo.1", "./man/bar.1" ] - } - -will create files to do `man foo` and `man foo-bar`. - -Man files must end with a number, and optionally a `.gz` suffix if they are -compressed. The number dictates which man section the file is installed into. - - { "name" : "foo" - , "man" : [ "./man/foo.1", "./man/foo.2" ] - } - -will create entries for `man foo` and `man 2 foo` - -## directories - -The CommonJS [Packages](http://wiki.commonjs.org/wiki/Packages/1.0) spec details a -few ways that you can indicate the structure of your package using a `directories` -hash. If you look at [npm's package.json](http://registry.npmjs.org/npm/latest), -you'll see that it has directories for doc, lib, and man. - -In the future, this information may be used in other creative ways. - -### directories.lib - -Tell people where the bulk of your library is. Nothing special is done -with the lib folder in any way, but it's useful meta info. - -### directories.bin - -If you specify a "bin" directory, then all the files in that folder will -be used as the "bin" hash. - -If you have a "bin" hash already, then this has no effect. - -### directories.man - -A folder that is full of man pages. Sugar to generate a "man" array by -walking the folder. - -### directories.doc - -Put markdown files in here. Eventually, these will be displayed nicely, -maybe, someday. - -### directories.example - -Put example scripts in here. Someday, it might be exposed in some clever way. - -## repository - -Specify the place where your code lives. This is helpful for people who -want to contribute. If the git repo is on github, then the `npm docs` -command will be able to find you. - -Do it like this: - - "repository" : - { "type" : "git" - , "url" : "http://github.com/isaacs/npm.git" - } - - "repository" : - { "type" : "svn" - , "url" : "http://v8.googlecode.com/svn/trunk/" - } - -The URL should be a publicly available (perhaps read-only) url that can be handed -directly to a VCS program without any modification. It should not be a url to an -html project page that you put in your browser. It's for computers. - -## scripts - -The "scripts" member is an object hash of script commands that are run -at various times in the lifecycle of your package. The key is the lifecycle -event, and the value is the command to run at that point. - -See `npm help scripts` to find out more about writing package scripts. - -## config - -A "config" hash can be used to set configuration -parameters used in package scripts that persist across upgrades. For -instance, if a package had the following: - - { "name" : "foo" - , "config" : { "port" : "8080" } } - -and then had a "start" command that then referenced the -`npm_package_config_port` environment variable, then the user could -override that by doing `npm config set foo:port 8001`. - -See `npm help config` and `npm help scripts` for more on package -configs. - -## dependencies - -Dependencies are specified with a simple hash of package name to version -range. The version range is EITHER a string which has one or more -space-separated descriptors, OR a range like "fromVersion - toVersion" - -**Please do not put test harnesses in your `dependencies` hash.** See -`devDependencies`, below. - -Version range descriptors may be any of the following styles, where "version" -is a semver compatible version identifier. - -* `version` Must match `version` exactly -* `=version` Same as just `version` -* `>version` Must be greater than `version` -* `>=version` etc -* `=version1 <=version2`. -* `range1 || range2` Passes if either range1 or range2 are satisfied. - -For example, these are all valid: - - { "dependencies" : - { "foo" : "1.0.0 - 2.9999.9999" - , "bar" : ">=1.0.2 <2.1.2" - , "baz" : ">1.0.2 <=2.3.4" - , "boo" : "2.0.1" - , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0" - , "asd" : "http://asdf.com/asdf.tar.gz" - , "til" : "~1.2" - , "elf" : "~1.2.3" - , "two" : "2.x" - , "thr" : "3.3.x" - } - } - -### Tilde Version Ranges - -A range specifier starting with a tilde `~` character is matched against -a version in the following fashion. - -* The version must be at least as high as the range. -* The version must be less than the next major revision above the range. - -For example, the following are equivalent: - -* `"~1.2.3" = ">=1.2.3 <1.3.0"` -* `"~1.2" = ">=1.2.0 <2.0.0"` -* `"~1" = ">=1.0.0 <2.0.0"` - -### X Version Ranges - -An "x" in a version range specifies that the version number must start -with the supplied digits, but any digit may be used in place of the x. - -The following are equivalent: - -* `"1.2.x" = ">=1.2.0 <1.3.0"` -* `"1.x.x" = ">=1.0.0 <2.0.0"` -* `"1.2" = "1.2.x"` -* `"1.x" = "1.x.x"` -* `"1" = "1.x.x"` - -You may not supply a comparator with a version containing an x. Any -digits after the first "x" are ignored. - -### URLs as Dependencies - -Starting with npm version 0.2.14, you may specify a tarball URL in place -of a version range. - -This tarball will be downloaded and installed locally to your package at -install time. - -## devDependencies - -If someone is planning on downloading and using your module in their -program, then they probably don't want or need to download and build -the external test or documentation framework that you use. - -In this case, it's best to list these additional items in a -`devDependencies` hash. - -These things will be installed whenever the `--dev` configuration flag -is set. This flag is set automatically when doing `npm link`, and can -be managed like any other npm configuration param. See `npm help -config` for more on the topic. - -## bundledDependencies - -Array of package names that will be bundled when publishing the package. - -## engines - -Packages/1.0 says that you can have an "engines" field with an array of engine -names. However, it has no provision for specifying which version of the engine -your stuff runs on. - -With npm, you can use either of the following styles to specify the version of -node that your stuff works on: - - { "engines" : [ "node >=0.1.27 <0.1.30" ] } - -or: - - { "engines" : { "node" : ">=0.1.27 <0.1.30" } } - -And, like with dependencies, if you don't specify the version (or if you -specify "*" as the version), then any version of node will do. - -If you specify an "engines" field, then npm will require that "node" be -somewhere on that list. If "engines" is omitted, then npm will just assume -that it works on node. - -## preferGlobal - -If your package is primarily a command-line application that should be -installed globally, then set this value to `true` to provide a warning -if it is installed locally. - -It doesn't actually prevent users from installing it locally, but it -does help prevent some confusion if it doesn't work as expected. - -## publishConfig - -This is a set of config values that will be used at publish-time. It's -especially handy if you want to set the tag or registry, so that you can -ensure that a given package is not tagged with "latest" or published to -the global public registry by default. - -Any config values can be overridden, but of course only "tag" and -"registry" probably matter for the purposes of publishing. - -See `npm help config` to see the list of config options that can be -overridden. diff --git a/vendor/npm/npm-1.0.3/doc/link.md b/vendor/npm/npm-1.0.3/doc/link.md deleted file mode 100644 index dc2e5136b..000000000 --- a/vendor/npm/npm-1.0.3/doc/link.md +++ /dev/null @@ -1,49 +0,0 @@ -npm-link(1) -- Symlink a package folder -======================================= - -## SYNOPSIS - - npm link (in package folder) - npm link - - -## DESCRIPTION - -Package linking is a two-step process. - -First, `npm link` in a package folder will create a globally-installed -symbolic link from `prefix/package-name` to the current folder. - -Next, in some other location, `npm link package-name` will create a -symlink from the local `node_modules` folder to the global symlink. - -When creating tarballs for `npm publish`, the linked packages are -"snapshotted" to their current state by resolving the symbolic links. - -This is -handy for installing your own stuff, so that you can work on it and test it -iteratively without having to continually rebuild. - -For example: - - cd ~/projects/node-redis # go into the package directory - npm link # creates global link - cd ~/projects/node-bloggy # go into some other package directory. - npm link redis # link-install the package - -Now, any changes to ~/projects/node-redis will be reflected in -~/projects/node-bloggy/node_modules/redis/ - -You may also shortcut the two steps in one. For example, to do the -above use-case in a shorter way: - - cd ~/projects/node-bloggy # go into the dir of your main project - npm link ../node-redis # link the dir of your dependency - -The second line is the equivalent of doing: - - (cd ../node-redis; npm link) - npm link redis - -That is, it first creates a global link, and then links the global -installation target into your project's `node_modules` folder. diff --git a/vendor/npm/npm-1.0.3/doc/list.md b/vendor/npm/npm-1.0.3/doc/list.md deleted file mode 100644 index f802bb469..000000000 --- a/vendor/npm/npm-1.0.3/doc/list.md +++ /dev/null @@ -1,36 +0,0 @@ -npm-ls(1) -- List installed packages -====================================== - -## SYNOPSIS - - npm list - npm ls - npm la - npm ll - -## DESCRIPTION - -This command will print to stdout all the versions of packages that are -installed, as well as their dependencies, in a tree-structure. - -It does not take arguments. - -It will print out extraneous, missing, and invalid packages. - -When run as `ll` or `la`, it shows extended information by default. - -## CONFIGURATION - -### long - -* Default: false -* Type: Boolean - -Show extended information. - -### parseable - -* Default: false -* Type: Boolean - -Show parseable output instead of tree view. diff --git a/vendor/npm/npm-1.0.3/doc/ln.md b/vendor/npm/npm-1.0.3/doc/ln.md deleted file mode 120000 index 52ae308ef..000000000 --- a/vendor/npm/npm-1.0.3/doc/ln.md +++ /dev/null @@ -1 +0,0 @@ -./link.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/ls.md b/vendor/npm/npm-1.0.3/doc/ls.md deleted file mode 120000 index 51a383bf1..000000000 --- a/vendor/npm/npm-1.0.3/doc/ls.md +++ /dev/null @@ -1 +0,0 @@ -./list.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/npm.md b/vendor/npm/npm-1.0.3/doc/npm.md deleted file mode 100644 index 376371181..000000000 --- a/vendor/npm/npm-1.0.3/doc/npm.md +++ /dev/null @@ -1,120 +0,0 @@ -npm(1) -- node package manager -============================== - -## SYNOPSIS - - npm [args] - -## DESCRIPTION - -npm is the package manager for the Node JavaScript platform. It puts -modules in place so that node can find them, and manages dependency -conflicts intelligently. - -It is extremely configurable to support a wide variety of use cases. -Most commonly, it is used to publish, discover, install, and develop node -programs. - -Run `npm help` to get a list of available commands. - -## INTRODUCTION - -You probably got npm because you want to install stuff. - -Use `npm install blerg` to install the latest version of "blerg". Check out -`npm help install` for more info. It can do a lot of stuff. - -Use the `npm search` command to show everything that's available. -Use `npm ls` to show everything you've installed. - -## DEVELOPER USAGE - -If you're using npm to develop and publish your code, check out the -following help topics: - -* json: - Make a package.json file. See `npm help json`. -* link: - For linking your current working code into Node's path, so that you - don't have to reinstall every time you make a change. Use - `npm link` to do this. -* install: - It's a good idea to install things if you don't need the symbolic link. - Especially, installing other peoples code from the registry is done via - `npm install` -* adduser: - Create an account or log in. Creditials are stored (encrypted) in the - user config file. -* publish: - Use the `npm publish` command to upload your code to the registry. - -## CONFIGURATION - -npm is extremely configurable. It reads its configuration options from -5 places. - -* Command line switches: - Set a config with `--key val`. All keys take a value, even if they - are booleans (the config parser doesn't know what the options are at - the time of parsing.) If no value is provided, then the option is set - to boolean `true`. -* Environment Variables: - Set any config by prefixing the name in an environment variable with - `npm_config_`. For example, `export npm_config_key=val`. -* User Configs: - The file at $HOME/.npmrc is an ini-formatted list of configs. If - present, it is parsed. If the `userconfig` option is set in the cli - or env, then that will be used instead. -* Global Configs: - The file found at ../etc/npmrc (from the node executable, by default - this resolves to /usr/local/etc/npmrc) will be parsed if it is found. - If the `globalconfig` option is set in the cli, env, or user config, - then that file is parsed instead. -* Defaults: - npm's default configuration options are defined in - lib/utils/config-defs.js. These must not be changed. - -See `npm help config` for much much more information. - -## CONTRIBUTIONS - -Patches welcome! - -* code: - Read through `npm help coding-style` if you plan to submit code. - You don't have to agree with it, but you do have to follow it. -* docs: - If you find an error in the documentation, edit the appropriate markdown - file in the "doc" folder. (Don't worry about generating the man page.) - -Contributors are listed in npm's `package.json` file. You can view them -easily by doing `npm view npm contributors`. - -If you would like to contribute, but don't know what to work on, check -the issues list or ask on the mailing list. - -* -* - -## BUGS - -When you find issues, please report them: - -* web: - -* email: - - -Be sure to include *all* of the output from the npm command that didn't work -as expected. The `npm-debug.log` file is also helpful to provide. - -You can also look for isaacs in #node.js on irc://irc.freenode.net. He -will no doubt tell you to put the output in a gist or email. - -## HISTORY - -See npm-changelog(1) - -## AUTHOR - -Isaac Z. Schlueter :: isaacs :: @izs :: diff --git a/vendor/npm/npm-1.0.3/doc/outdated.md b/vendor/npm/npm-1.0.3/doc/outdated.md deleted file mode 100644 index fd30478cc..000000000 --- a/vendor/npm/npm-1.0.3/doc/outdated.md +++ /dev/null @@ -1,11 +0,0 @@ -npm-outdated(1) -- Check for outdated packages -============================================== - -## SYNOPSIS - - npm outdated [ [ ...]] - -## DESCRIPTION - -This command will check the registry to see if any (or, specific) installed -packages are currently outdated. diff --git a/vendor/npm/npm-1.0.3/doc/owner.md b/vendor/npm/npm-1.0.3/doc/owner.md deleted file mode 100644 index c637bea64..000000000 --- a/vendor/npm/npm-1.0.3/doc/owner.md +++ /dev/null @@ -1,29 +0,0 @@ -npm-owner(1) -- Manage package owners -===================================== - -## SYNOPSIS - - npm owner ls - npm owner add - npm owner rm - -## DESCRIPTION - -* ls: - List all the users who have access to modify a package and push new versions. - Handy when you need to know who to bug for help. -* add: - Add a new user as a maintainer of a package. This user is enabled to modify - metadata, publish new versions, and add other owners. -* rm: - Remove a user from the package owner list. This immediately revokes their - privileges. - -Note that there is only one level of access. Either you can modify a package, -or you can't. Future versions may contain more fine-grained access levels, but -that is not implemented at this time. - -## SEE ALSO - -* npm-publish(1) -* npm-registry(1) diff --git a/vendor/npm/npm-1.0.3/doc/prefix.md b/vendor/npm/npm-1.0.3/doc/prefix.md deleted file mode 100644 index 93da78b94..000000000 --- a/vendor/npm/npm-1.0.3/doc/prefix.md +++ /dev/null @@ -1,10 +0,0 @@ -npm-prefix(1) -- Display prefix -=============================== - -## SYNOPSIS - - npm prefix - -## DESCRIPTION - -Print the prefix to standard out. diff --git a/vendor/npm/npm-1.0.3/doc/prune.md b/vendor/npm/npm-1.0.3/doc/prune.md deleted file mode 100644 index 7344753f2..000000000 --- a/vendor/npm/npm-1.0.3/doc/prune.md +++ /dev/null @@ -1,15 +0,0 @@ -npm-prune(1) -- Remove extraneous packages -========================================== - -## SYNOPSIS - - npm prune [ [ - npm publish - -## DESCRIPTION - -Publishes a package to the registry so that it can be installed by name. - -* ``: - A folder containing a package.json file - -* ``: - A url or file path to a gzipped tar archive containing a single folder - with a package.json file inside. - -Fails if the package name and version combination already exists in -the registry. Overwrites when the "--force" flag is set. - -## SEE ALSO - -* npm-registry(1) -* npm-adduser(1) -* npm-owner(1) diff --git a/vendor/npm/npm-1.0.3/doc/rebuild.md b/vendor/npm/npm-1.0.3/doc/rebuild.md deleted file mode 100644 index f98485cd0..000000000 --- a/vendor/npm/npm-1.0.3/doc/rebuild.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-rebuild(1) -- Rebuild a package -=================================== - -## SYNOPSIS - - npm rebuild [ [ ...]] - -* ``: - The package to rebuild - -## DESCRIPTION - -This command runs the `npm build` command on the matched folders. This is useful -when you install a new version of node, and must recompile all your C++ addons with -the new binary. - -## CONFIGURATION - -See `npm help build` diff --git a/vendor/npm/npm-1.0.3/doc/registry.md b/vendor/npm/npm-1.0.3/doc/registry.md deleted file mode 100644 index 0e30c9239..000000000 --- a/vendor/npm/npm-1.0.3/doc/registry.md +++ /dev/null @@ -1,78 +0,0 @@ -npm-registry(1) -- The JavaScript Package Registry -================================================== - -## DESCRIPTION - -To resolve packages by name and version, npm talks to a registry website -that implements the CommonJS Package Registry specification for reading -package info. - -Additionally, npm's package registry implementation supports several -write APIs as well, to allow for publishing packages and managing user -account information. - -The official public npm registry is at . It -is powered by a CouchDB database at -. The code for the couchapp is -available at . npm user accounts -are CouchDB users, stored in the -database. - -The registry URL is supplied by the `registry` config parameter. See -`npm help config` for more on managing npm's configuration. - -## Can I run my own private registry? - -Yes! - -The easiest way is to replicate the couch database, and use the same (or -similar) design doc to implement the APIs. - -If you set up continuous replication from the official CouchDB, and then -set your internal CouchDB as the registry config, then you'll be able -to read any published packages, in addition to your private ones, and by -default will only publish internally. If you then want to publish a -package for the whole world to see, you can simply override the -`--registry` config for that command. - -## Will you replicate from my registry into the public one? - -No. If you want things to be public, then publish them into the public -registry using npm. What little security there is would be for nought -otherwise. - -## Do I have to use couchdb to build a registry that npm can talk to? - -No, but it's way easier. - -## I published something elsewhere, and want to tell the npm registry about it. - -That is supported, but not using the npm client. You'll have to get -your hands dirty and do some HTTP. The request looks something like -this: - - PUT /my-foreign-package - content-type:application/json - accept:application/json - authorization:Basic $base_64_encoded - - { "name":"my-foreign-package" - , "maintainers":["owner","usernames"] - , "description":"A package that is hosted elsewhere" - , "keywords":["nih","my cheese smells the best"] - , "url":"http://my-different-registry.com/blerg/my-local-package" - } - -(Keywords and description are optional, but recommended. Name, -maintainers, and url are required.) - -Then, when a user tries to install "my-foreign-package", it'll redirect -to your registry. If that doesn't resolve to a valid package entry, -then it'll fail, so please make sure that you understand the spec, and -ask for help on the mailing list. - -## Is there a website or something to see package docs and such? - -No, but such a thing is planned, and a tiny bit developed. - -Stay tuned! diff --git a/vendor/npm/npm-1.0.3/doc/removing-npm.md b/vendor/npm/npm-1.0.3/doc/removing-npm.md deleted file mode 100644 index b13509686..000000000 --- a/vendor/npm/npm-1.0.3/doc/removing-npm.md +++ /dev/null @@ -1,39 +0,0 @@ -npm-removal(1) -- Cleaning the Slate -==================================== - -So sad to see you go. - - sudo npm uninstall npm -g - -Or, if that fails, - - sudo make uninstall - -## More Severe Uninstalling - -Usually, the above instructions are sufficient. That will remove -npm, but leave behind anything you've installed. - -If that doesn't work, or if you require more drastic measures, -continue reading. - -This assumes that you installed node and npm in the default place. If -you configured node with a different `--prefix`, or installed npm with a -different prefix setting, then adjust the paths accordingly, replacing -`/usr/local` with your install prefix. - - rm -rf /usr/local/{lib/node,lib/node/.npm,bin,share/man}/npm* - -If you installed things *with* npm, then your best bet is to uninstall -them with npm first, and then install them again once you have a -proper install. This can help find any symlinks that are lying -around: - - ls -laF /usr/local/{lib/node,lib/node/.npm,bin,share/man} | grep npm - -Prior to version 0.3, npm used shim files for executables and node -modules. To track those down, you can do the following: - - find /usr/local/{lib/node,bin} -exec grep -l npm \{\} \; ; - -(This is also in the README file.) diff --git a/vendor/npm/npm-1.0.3/doc/restart.md b/vendor/npm/npm-1.0.3/doc/restart.md deleted file mode 100644 index f052098be..000000000 --- a/vendor/npm/npm-1.0.3/doc/restart.md +++ /dev/null @@ -1,19 +0,0 @@ -npm-restart(1) -- Start a package -================================= - -## SYNOPSIS - - npm restart - -## DESCRIPTION - -This runs a package's "restart" script, if one was provided. -Otherwise it runs package's "stop" script, if one was provided, and then -the "start" script. - -If no version is specified, then it restarts the "active" version. - -## SEE ALSO - -* npm-start(1) -* npm-stop(1) diff --git a/vendor/npm/npm-1.0.3/doc/rm.md b/vendor/npm/npm-1.0.3/doc/rm.md deleted file mode 120000 index a9423dfac..000000000 --- a/vendor/npm/npm-1.0.3/doc/rm.md +++ /dev/null @@ -1 +0,0 @@ -./uninstall.md \ No newline at end of file diff --git a/vendor/npm/npm-1.0.3/doc/root.md b/vendor/npm/npm-1.0.3/doc/root.md deleted file mode 100644 index ce4e04113..000000000 --- a/vendor/npm/npm-1.0.3/doc/root.md +++ /dev/null @@ -1,10 +0,0 @@ -npm-root(1) -- Display npm root -=============================== - -## SYNOPSIS - - npm root - -## DESCRIPTION - -Print the effective `node_modules` folder to standard out. diff --git a/vendor/npm/npm-1.0.3/doc/run-script.md b/vendor/npm/npm-1.0.3/doc/run-script.md deleted file mode 100644 index 41ef5e787..000000000 --- a/vendor/npm/npm-1.0.3/doc/run-script.md +++ /dev/null @@ -1,21 +0,0 @@ -npm-run-script(1) -- Run arbitrary package scripts -================================================== - -## SYNOPSIS - - npm run-script - -### In node.js - - var uuid = require('node-uuid'); - -## Usage - -### Generate a String UUID - - var id = uuid(); // -> '92329D39-6F5C-4520-ABFC-AAB64544E172' - -### Generate a Binary UUID - - // Simple form - allocates a Buffer/Array for you - var buf = uuid('binary'); - // node.js -> - // browser -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] - - // Provide your own Buffer or Array - var buf = new Array(16); - uuid('binary', buf); // -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] - var buf = new Buffer(16); - uuid('binary', buf); // -> - - // Provide your own Buffer/Array, plus specify offset - // (e.g. here we fill an array with 3 uuids) - var buf = new Buffer(16 \* 3); - uuid('binary', id, 0); - uuid('binary', id, 16); - uuid('binary', id, 32); - -## Testing - -test/test.js generates performance data (similar to test/benchmark.js). It also verifies the syntax of 100K string UUIDs, and logs the distribution of hex digits found therein. For example: - - - - - Performance Data - - - - uuid(): 1052631 uuids/second - uuid('binary'): 680272 uuids/second - uuid('binary', buffer): 2702702 uuids/second - - - - - Distribution of Hex Digits (% deviation from ideal) - - - - 0 |================================| 187705 (0.11%) - 1 |================================| 187880 (0.2%) - 2 |================================| 186875 (-0.33%) - 3 |================================| 186847 (-0.35%) - 4 |==================================================| 287433 (-0.02%) - 5 |================================| 187910 (0.22%) - 6 |================================| 188172 (0.36%) - 7 |================================| 187350 (-0.08%) - 8 |====================================| 211994 (-0.24%) - 9 |====================================| 212664 (0.08%) - A |=====================================| 213185 (0.32%) - B |=====================================| 212877 (0.18%) - C |================================| 187445 (-0.03%) - D |================================| 186737 (-0.41%) - E |================================| 187155 (-0.18%) - F |================================| 187771 (0.14%) - -Note that the increased values for 4 and 8-B are expected as part of the RFC4122 syntax (and are accounted for in the deviation calculation). BTW, if someone wants to do the calculation to determine what a statistically significant deviation would be, I'll gladly add that to the test. - -### In browser - - Open test/test.html - -### In node.js - - > node test/test.js - -node.js users can also run the node-uuid .vs. uuid.js benchmark: - - > node test/benchmark.js - -## Performance - -### In node.js - -node-uuid is designed to be fast. That said, the target platform is node.js, where it is screaming fast. Here's what I get on my 2.66GHz Macbook Pro for the test/benchmark.js script: - - nodeuuid(): 1126126 uuids/second - nodeuuid('binary'): 782472 uuids/second - nodeuuid('binary', buffer): 2688172 uuids/second - uuidjs(): 620347 uuids/second - uuidjs('binary'): 1275510 uuids/second - -The uuidjs() entries are for Nikhil Marathe's [uuidjs module](https://bitbucket.org/nikhilm/uuidjs), and are provided for comparison. uuidjs is a wrapper around the native libuuid library. - -### In browser - -node-uuid performance varies dramatically across browsers. For comprehensive test results, please [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/package.json b/vendor/npm/npm-1.0.8/node_modules/node-uuid/package.json deleted file mode 100644 index bf70062ab..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name" : "node-uuid", - "description" : "Simple, fast generation of RFC4122(v4) UUIDs.", - "url" : "http://github.com/broofa/node-uuid", - "keywords" : ["uuid", "guid", "rfc4122"], - "author" : "Robert Kieffer ", - "contributors" : [], - "dependencies" : [], - "lib" : ".", - "main" : "./uuid.js", - "version" : "1.2.0" -} diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark-native.c b/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark-native.c deleted file mode 100644 index dbfc75f6d..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark.js b/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark.js deleted file mode 100644 index 2505dc4a2..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/benchmark.js +++ /dev/null @@ -1,27 +0,0 @@ -var nodeuuid = require('../uuid'), - uuidjs = require('uuid').generate, - N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid(); -rate('nodeuuid()', t); - -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary'); -rate('nodeuuid(\'binary\')', t); - -var buffer = new nodeuuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary', buffer); -rate('nodeuuid(\'binary\', buffer)', t); - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) uuidjs(); -rate('uuidjs()', t); - -for (var i = 0, t = Date.now(); i < N; i++) uuidjs('binary'); -rate('uuidjs(\'binary\')', t); diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.html b/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.html deleted file mode 100644 index 89e0f2c44..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.js b/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.js deleted file mode 100644 index 5037566ea..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,83 +0,0 @@ -if (typeof(uuid) == 'undefined') { - uuid = require('../uuid'); -} - -var UUID_FORMAT = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89a-fAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/; -var N = 1e5; - -function log(msg) { - if (typeof(document) != 'undefined') { - document.write('
' + msg + '
'); - } - if (typeof(console) != 'undefined') { - console.log(msg); - } -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids/second'); -} - -// Perf tests -log('- - - Performance Data - - -'); -for (var i = 0, t = Date.now(); i < N; i++) uuid(); -rate('uuid()', t); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); -rate('uuid(\'binary\')', t); -var buf = new uuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary', buf); -rate('uuid(\'binary\', buffer)', t); - -var counts = {}, max = 0; - -var b = new uuid.BufferClass(16); -for (var i = 0; i < N; i++) { - id = uuid(); - if (!UUID_FORMAT.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - throw Error(id + ' does not parse/unparse'); - } - - // Count digits for our randomness check - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } -} - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -log('
- - - Distribution of Hex Digits (% deviation from ideal) - - -'); - -// Check randomness -for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - log(c + ' |' + bar + '| ' + counts[c] + ' (' + d + '%)'); -} diff --git a/vendor/npm/npm-1.0.8/node_modules/node-uuid/uuid.js b/vendor/npm/npm-1.0.8/node_modules/node-uuid/uuid.js deleted file mode 100644 index fdf6c54fd..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,80 +0,0 @@ -(function() { - /* - * Generate a RFC4122(v4) UUID - * - * Documentation at https://github.com/broofa/node-uuid - */ - - // Use node.js Buffer class if available, otherwise use the Array class - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; - - // Buffer used for generating string uuids - var _buf = new BufferClass(16); - - // Cache number <-> hex string for octet values - var toString = []; - var toNumber = {}; - for (var i = 0; i < 256; i++) { - toString[i] = (i + 0x100).toString(16).substr(1); - toNumber[toString[i]] = i; - } - - function parse(s) { - var buf = new BufferClass(16); - var i = 0, ton = toNumber; - s.toLowerCase().replace(/[0-9a-f][0-9a-f]/g, function(octet) { - buf[i++] = toNumber[octet]; - }); - return buf; - } - - function unparse(buf) { - var tos = toString, b = buf; - return tos[b[0]] + tos[b[1]] + tos[b[2]] + tos[b[3]] + '-' + - tos[b[4]] + tos[b[5]] + '-' + - tos[b[6]] + tos[b[7]] + '-' + - tos[b[8]] + tos[b[9]] + '-' + - tos[b[10]] + tos[b[11]] + tos[b[12]] + - tos[b[13]] + tos[b[14]] + tos[b[15]]; - } - - var b32 = 0x100000000, ff = 0xff; - function uuid(fmt, buf, offset) { - var b = fmt != 'binary' ? _buf : (buf ? buf : new BufferClass(16)); - var i = buf && offset || 0; - - var r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & 0x0f | 0x40; // See RFC4122 sect. 4.1.3 - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & 0x3f | 0x80; // See RFC4122 sect. 4.4 - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - - return fmt === undefined ? unparse(b) : b; - }; - - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - - if (typeof(module) != 'undefined') { - module.exports = uuid; - } else { - // In browser? Set as top-level function - this.uuid = uuid; - } -})(); diff --git a/vendor/npm/npm-1.0.8/node_modules/nopt/.gitignore b/vendor/npm/npm-1.0.8/node_modules/nopt/.gitignore deleted file mode 100644 index 3c3629e64..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/nopt/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/vendor/npm/npm-1.0.8/node_modules/nopt/README.md b/vendor/npm/npm-1.0.8/node_modules/nopt/README.md deleted file mode 100644 index d6385a481..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/nopt/README.md +++ /dev/null @@ -1,182 +0,0 @@ -If you want to write an option parser, and have it be good, there are -two ways to do it. The Right Way, and the Wrong Way. - -The Wrong Way is to sit down and write an option parser. We've all done -that. - -The Right Way is to write some complex configurable program with so many -options that you go half-insane just trying to manage them all, and put -it off with duct-tape solutions until you see exactly to the core of the -problem, and finally snap and write an awesome option parser. - -If you want to write an option parser, don't write an option parser. -Write a package manager, or a source control system, or a service -restarter, or an operating system. You probably won't end up with a -good one of those, but if you don't give up, and you are relentless and -diligent enough in your procrastination, you may just end up with a very -nice option parser. - -## USAGE - - // my-program.js - var nopt = require("nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag"] - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - console.log(parsed) - -This would give you support for any of the following: - - $ node my-program.js --foo "blerp" --no-flag - { "foo" : "blerp", "flag" : false } - - $ node my-program.js ---bar 7 --foo "Mr. Hand" --flag - { bar: 7, foo: "Mr. Hand", flag: true } - - $ node my-program.js --foo "blerp" -f -----p - { foo: "blerp", flag: true, pick: true } - - $ node my-program.js -fp --foofoo - { foo: "Mr. Foo", flag: true, pick: true } - - $ node my-program.js --foofoo -- -fp # -- stops the flag parsing. - { foo: "Mr. Foo", argv: { remain: ["-fp"] } } - - $ node my-program.js --blatzk 1000 -fp # unknown opts are ok. - { blatzk: 1000, flag: true, pick: true } - - $ node my-program.js --blatzk true -fp # but they need a value - { blatzk: true, flag: true, pick: true } - - $ node my-program.js --no-blatzk -fp # unless they start with "no-" - { blatzk: false, flag: true, pick: true } - - $ node my-program.js --baz b/a/z # known paths are resolved. - { baz: "/Users/isaacs/b/a/z" } - -Read the tests at the bottom of `lib/nopt.js` for more examples of -what this puppy can do. - -## Types - -The following types are supported, and defined on `nopt.typeDefs` - -* String: A normal string. No parsing is done. -* path: A file system path. Gets resolved against cwd if not absolute. -* Number: Must be numeric. -* url: A url. If it doesn't parse, it isn't accepted. -* Boolean: Must be either `true` or `false`. If an option is a boolean, - then it does not need a value, and its presence will imply `true` as - the value. To negate boolean flags, do `--no-whatever` or `--whatever - false` -* NaN: Means that the option is strictly not allowed. Any value will - fail. -* Stream: An object matching the "Stream" class in node. Valuable - for use when validating programmatically. (npm uses this to let you - supply any WriteStream on the `outfd` and `logfd` config options.) - -If a type is an array of values not on this list, then those are -considered valid values. For instance, in the example above, the -`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, -and any other value will be rejected. - -When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be -interpreted as their JavaScript equivalents, and numeric values will be -interpreted as a number. - -You can also mix types and values, or multiple types, in a list. For -instance `{ blah: [Number, null] }` would allow a value to be set to -either a Number or null. - -To define a new type, add it to `nopt.typeDefs`. Each item in that -hash is an object with a `type` member and a `validate` method. The -`type` member is an object that matches what goes in the type list. The -`validate` method is a function that gets called with `validate(data, -key, val)`. Validate methods should assign `data[key]` to the valid -value of `val` if it can be handled properly, or return boolean -`false` if it cannot. - -You can also call `nopt.clean(data, types, typeDefs)` to clean up a -config object and remove its invalid properties. - -## Error Handling - -By default, nopt outputs a warning to standard error when invalid -options are found. You can change this behavior by assigning a method -to `nopt.invalidHandler`. This method will be called with -the offending `nopt.invalidHandler(key, val, types)`. - -If no `nopt.invalidHandler` is assigned, then it will console.error -its whining. If it is assigned to boolean `false` then the warning is -suppressed. - -## Abbreviations - -Yes, they are supported. If you define options like this: - - { "foolhardyelephants" : Boolean - , "pileofmonkeys" : Boolean } - -Then this will work: - - node program.js --foolhar --pil - node program.js --no-f --pileofmon - # etc. - -## Shorthands - -Shorthands are a hash of shorter option names to a snippet of args that -they expand to. - -If multiple one-character shorthands are all combined, and the -combination does not unambiguously match any other option or shorthand, -then they will be broken up into their constituent parts. For example: - - { "s" : ["--loglevel", "silent"] - , "g" : "--global" - , "f" : "--force" - , "p" : "--parseable" - , "l" : "--long" - } - - npm ls -sgflp - # just like doing this: - npm ls --loglevel silent --global --force --long --parseable - -## The Rest of the args - -The config object returned by nopt is given a special member called -`argv`, which is an object with the following fields: - -* `remain`: The remaining args after all the parsing has occurred. -* `original`: The args as they originally appeared. -* `cooked`: The args after flags and shorthands are expanded. - -## Slicing - -Node programs are called with more or less the exact argv as it appears -in C land, after the v8 and node-specific options have been plucked off. -As such, `argv[0]` is always `node` and `argv[1]` is always the -JavaScript program being run. - -That's usually not very useful to you. So they're sliced off by -default. If you want them, then you can pass in `0` as the last -argument, or any other number that you'd like to slice off the start of -the list. diff --git a/vendor/npm/npm-1.0.8/node_modules/nopt/examples/my-program.js b/vendor/npm/npm-1.0.8/node_modules/nopt/examples/my-program.js deleted file mode 100755 index 142447e18..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/nopt/examples/my-program.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node - -//process.env.DEBUG_NOPT = 1 - -// my-program.js -var nopt = require("../lib/nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag", "true"] - , "g" : ["--flag"] - , "s" : "--flag" - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - -console.log("parsed =\n"+ require("util").inspect(parsed)) diff --git a/vendor/npm/npm-1.0.8/node_modules/nopt/lib/nopt.js b/vendor/npm/npm-1.0.8/node_modules/nopt/lib/nopt.js deleted file mode 100644 index e646710c6..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/nopt/lib/nopt.js +++ /dev/null @@ -1,395 +0,0 @@ -// info about each config option. - -var debug = process.env.DEBUG_NOPT - ? function () { console.error.apply(console, arguments) } - : function () {} - -var url = require("url") - , path = require("path") - , Stream = require("stream").Stream - , abbrev = require("abbrev") - -module.exports = exports = nopt -exports.clean = clean - -exports.typeDefs = - { String : { type: String, validate: validateString } - , Boolean : { type: Boolean, validate: validateBoolean } - , url : { type: url, validate: validateUrl } - , Number : { type: Number, validate: validateNumber } - , path : { type: path, validate: validatePath } - , Stream : { type: Stream, validate: validateStream } - } - -function nopt (types, shorthands, args, slice) { - args = args || process.argv - types = types || {} - shorthands = shorthands || {} - if (typeof slice !== "number") slice = 2 - - debug(types, shorthands, args, slice) - - args = args.slice(slice) - var data = {} - , key - , remain = [] - , cooked = args - , original = args.slice(0) - - parse(args, data, remain, types, shorthands) - // now data is full - clean(data, types, exports.typeDefs) - data.argv = {remain:remain,cooked:cooked,original:original} - data.argv.toString = function () { - return this.original.map(JSON.stringify).join(" ") - } - return data -} - -function clean (data, types, typeDefs) { - typeDefs = typeDefs || exports.typeDefs - Object.keys(data).forEach(function (k) { - var val = data[k] - // if it's an unknown value, then parse false/true/null/numbers - if (typeof val === "string") { - val = val.trim() - if (val === "null" || val === "true" || val === "false") { - val = JSON.parse(val) - } else if (!isNaN(val)) { - val = +val - } - } - if (!types.hasOwnProperty(k)) { - data[k] = val - return - } - if (!validate(data, k, val, types[k], typeDefs)) { - if (exports.invalidHandler) { - exports.invalidHandler(k, val, types[k], data) - } else if (exports.invalidHandler !== false) { - debug("invalid: "+k+"="+val, types[k]) - } - } - }) -} - -function validateString (data, k, val) { - data[k] = String(val) -} - -function validatePath (data, k, val) { - data[k] = path.resolve(String(val)) -} - -function validateNumber (data, k, val) { - debug("validate Number %j %j %j", k, val, isNaN(val)) - if (isNaN(val)) return false - data[k] = +val -} - -function validateBoolean (data, k, val) { - if (val instanceof Boolean) val = val.valueOf() - else if (typeof val === "string") { - if (!isNaN(val)) val = !!(+val) - else if (val === "null" || val === "false") val = false - else val = true - } else val = !!val - data[k] = val -} - -function validateUrl (data, k, val) { - val = url.parse(String(val)) - if (!val.host) return false - data[k] = val.href -} - -function validateStream (data, k, val) { - if (!(val instanceof Stream)) return false - data[k] = val -} - -function validate (data, k, val, type, typeDefs) { - // arrays are lists of types. - if (Array.isArray(type)) { - for (var i = 0, l = type.length; i < l; i ++) { - if (validate(data, k, val, type[i], typeDefs)) return true - } - delete data[k] - return false - } - - // NaN is poisonous. Means that something is not allowed. - if (type !== type) { - debug("Poison NaN", k, val, type) - delete data[k] - return false - } - - // explicit list of values - if (val === type) { - debug("Explicitly allowed %j", val) - data[k] = val - return true - } - - // now go through the list of typeDefs, validate against each one. - var ok = false - , types = Object.keys(typeDefs) - for (var i = 0, l = types.length; i < l; i ++) { - debug("test type %j %j %j", k, val, types[i]) - var t = typeDefs[types[i]] - if (t && type === t.type) { - ok = false !== t.validate(data, k, val) - if (ok) break - } - } - debug("OK? %j (%j %j %j)", ok, k, val, types[i]) - - if (!ok) delete data[k] - return ok -} - -function parse (args, data, remain, types, shorthands) { - debug("parse", args, data, remain) - - var key = null - , abbrevs = abbrev(Object.keys(types)) - , shortAbbr = abbrev(Object.keys(shorthands)) - - for (var i = 0; i < args.length; i ++) { - var arg = args[i] - debug("arg", arg) - - if (arg.match(/^-{2,}$/)) { - // done with keys. - // the rest are args. - remain.push.apply(remain, args.slice(i + 1)) - args[i] = "--" - break - } - if (arg.charAt(0) === "-") { - if (arg.indexOf("=") !== -1) { - var v = arg.split("=") - arg = v.shift() - v = v.join("=") - args.splice.apply(args, [i, 1].concat([arg, v])) - } - // see if it's a shorthand - // if so, splice and back up to re-parse it. - var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) - debug("arg=%j shRes=%j", arg, shRes) - if (shRes) { - debug(arg, shRes) - args.splice.apply(args, [i, 1].concat(shRes)) - if (arg !== shRes[0]) { - i -- - continue - } - } - arg = arg.replace(/^-+/, "") - var no = false - while (arg.toLowerCase().indexOf("no-") === 0) { - no = !no - arg = arg.substr(3) - } - var isBool = no || types[arg] === Boolean || - Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 - if (abbrevs[arg]) arg = abbrevs[arg] - if (isBool) { - // just set and move along - data[arg] = !no - // however, also support --bool true or --bool false - var la = args[i + 1] - if (la === "true" || la === "false") { - data[arg] = JSON.parse(la) - if (no) data[arg] = !data[arg] - i ++ - } - continue - } - var la = args[i + 1] - if (la && la.match(/^-{2,}$/)) { - la = undefined - i -- - } - data[arg] = la === undefined ? true : la - i ++ - continue - } - remain.push(arg) - } -} - -function resolveShort (arg, shorthands, shortAbbr, abbrevs) { - // handle single-char shorthands glommed together, like - // npm ls -glp, but only if there is one dash, and only if - // all of the chars are single-char shorthands, and it's - // not a match to some other abbrev. - arg = arg.replace(/^-+/, '') - if (abbrevs[arg] && !shorthands[arg]) { - return null - } - if (shortAbbr[arg]) { - arg = shortAbbr[arg] - } else { - var singles = shorthands.___singles - if (!singles) { - singles = Object.keys(shorthands).filter(function (s) { - return s.length === 1 - }).reduce(function (l,r) { l[r] = true ; return l }, {}) - shorthands.___singles = singles - } - var chrs = arg.split("").filter(function (c) { - return singles[c] - }) - if (chrs.join("") === arg) return chrs.map(function (c) { - return shorthands[c] - }).reduce(function (l, r) { - return l.concat(r) - }, []) - } - - if (shorthands[arg] && !Array.isArray(shorthands[arg])) { - shorthands[arg] = shorthands[arg].split(/\s+/) - } - return shorthands[arg] -} - -if (module === require.main) { -var assert = require("assert") - , sys = require("sys") - - , shorthands = - { s : ["--loglevel", "silent"] - , d : ["--loglevel", "info"] - , dd : ["--loglevel", "verbose"] - , ddd : ["--loglevel", "silly"] - , noreg : ["--no-registry"] - , reg : ["--registry"] - , "no-reg" : ["--no-registry"] - , silent : ["--loglevel", "silent"] - , verbose : ["--loglevel", "verbose"] - , h : ["--usage"] - , H : ["--usage"] - , "?" : ["--usage"] - , help : ["--usage"] - , v : ["--version"] - , f : ["--force"] - , desc : ["--description"] - , "no-desc" : ["--no-description"] - , "local" : ["--no-global"] - , l : ["--long"] - , p : ["--parseable"] - , porcelain : ["--parseable"] - , g : ["--global"] - } - - , types = - { argv : NaN - , browser : String - , cache : path - , color : ["always", Boolean] - , depth : Number - , description : Boolean - , dev : Boolean - , editor : path - , force : Boolean - , global : Boolean - , globalconfig : path - , group : [String, Number] - , gzipbin : String - , logfd : [Number, Stream] - , loglevel : ["silent","win","error","warn","info","verbose","silly"] - , long : Boolean - , "node-version" : [false, String] - , npaturl : url - , npat : Boolean - , "onload-script" : [false, String] - , outfd : [Number, Stream] - , parseable : Boolean - , pre: Boolean - , prefix: path - , proxy : url - , "rebuild-bundle" : Boolean - , registry : url - , searchopts : String - , searchexclude: [null, String] - , shell : path - , tag : String - , tar : String - , tmp : path - , "unsafe-perm" : Boolean - , usage : Boolean - , user : String - , username : String - , userconfig : path - , version : Boolean - , viewer: path - , _exit : Boolean - } - -; [["-v", {version:true}, []] - ,["---v", {version:true}, []] - ,["ls -s --no-reg connect -d", - {loglevel:"info",registry:null},["ls","connect"]] - ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] - ,["ls --registry blargle", {}, ["ls"]] - ,["--no-registry", {registry:null}, []] - ,["--no-color true", {color:false}, []] - ,["--no-color false", {color:true}, []] - ,["--no-color", {color:false}, []] - ,["--color false", {color:false}, []] - ,["--color --logfd 7", {logfd:7,color:true}, []] - ,["--color=true", {color:true}, []] - ,["--logfd=10", {logfd:10}, []] - ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] - ,["--tmp=tmp -tar=gtar", - {tmp:path.join(process.cwd(), "tmp"),tar:"gtar"},[]] - ,["--logfd x", {}, []] - ,["a -true -- -no-false", {true:true},["a","-no-false"]] - ,["a -no-false", {false:false},["a"]] - ,["a -no-no-true", {true:true}, ["a"]] - ,["a -no-no-no-false", {false:false}, ["a"]] - ,["---NO-no-No-no-no-no-nO-no-no"+ - "-No-no-no-no-no-no-no-no-no"+ - "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ - "-no-body-can-do-the-boogaloo-like-I-do" - ,{"body-can-do-the-boogaloo-like-I-do":false}, []] - ,["we are -no-strangers-to-love "+ - "--you-know the-rules --and so-do-i "+ - "---im-thinking-of=a-full-commitment "+ - "--no-you-would-get-this-from-any-other-guy "+ - "--no-gonna-give-you-up "+ - "-no-gonna-let-you-down=true "+ - "--no-no-gonna-run-around false "+ - "--desert-you=false "+ - "--make-you-cry false "+ - "--no-tell-a-lie "+ - "--no-no-and-hurt-you false" - ,{"strangers-to-love":false - ,"you-know":"the-rules" - ,"and":"so-do-i" - ,"you-would-get-this-from-any-other-guy":false - ,"gonna-give-you-up":false - ,"gonna-let-you-down":false - ,"gonna-run-around":false - ,"desert-you":false - ,"make-you-cry":false - ,"tell-a-lie":false - ,"and-hurt-you":false - },["we", "are"]] - ].forEach(function (test) { - var argv = test[0].split(/\s+/) - , opts = test[1] - , rem = test[2] - , actual = nopt(types, shorthands, argv, 0) - , parsed = actual.argv - delete actual.argv - console.log(parsed.remain) - console.log(sys.inspect(actual, false, 2, true)) - for (var i in opts) { - assert.equal(opts[i], actual[i]) - } - assert.deepEqual(rem, parsed.remain) - }) -} diff --git a/vendor/npm/npm-1.0.8/node_modules/nopt/package.json b/vendor/npm/npm-1.0.8/node_modules/nopt/package.json deleted file mode 100644 index a04d5185b..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/nopt/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "name" : "nopt" -, "version" : "1.0.4" -, "description" : "Option parsing for Node, supporting types, shorthands, etc. Used by npm." -, "author" : "Isaac Z. Schlueter (http://blog.izs.me/)" -, "main" : "lib/nopt.js" -, "scripts" : { "test" : "node lib/nopt.js" } -, "repository" : "http://github.com/isaacs/nopt" -, "dependencies" : { "abbrev" : "1" }} diff --git a/vendor/npm/npm-1.0.8/node_modules/semver/LICENSE b/vendor/npm/npm-1.0.8/node_modules/semver/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/semver/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/npm/npm-1.0.8/node_modules/semver/README.md b/vendor/npm/npm-1.0.8/node_modules/semver/README.md deleted file mode 100644 index 09d4beb0b..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/semver/README.md +++ /dev/null @@ -1,120 +0,0 @@ -# semver - -The semantic versioner for npm. - -## Usage - - $ npm install semver - - semver.valid('1.2.3') // true - semver.valid('a.b.c') // false - semver.clean(' =v1.2.3 ') // '1.2.3' - semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true - semver.gt('1.2.3', '9.8.7') // false - semver.lt('1.2.3', '9.8.7') // true - -As a command-line utility: - - $ semver -h - - Usage: semver -v [-r ] - Test if version(s) satisfy the supplied range(s), - and sort them. - - Multiple versions or ranges may be supplied. - - Program exits successfully if any valid version satisfies - all supplied ranges, and prints all satisfying versions. - - If no versions are valid, or ranges are not satisfied, - then exits failure. - - Versions are printed in ascending order, so supplying - multiple versions to the utility will just sort them. - -## Versions - -A version is the following things, in this order: - -* a number (Major) -* a period -* a number (minor) -* a period -* a number (patch) -* OPTIONAL: a hyphen, followed by a number (build) -* OPTIONAL: a collection of pretty much any non-whitespace characters - (tag) - -A leading `"="` or `"v"` character is stripped off and ignored. - -## Comparisons - -The ordering of versions is done using the following algorithm, given -two versions and asked to find the greater of the two: - -* If the majors are numerically different, then take the one - with a bigger major number. `2.3.4 > 1.3.4` -* If the minors are numerically different, then take the one - with the bigger minor number. `2.3.4 > 2.2.4` -* If the patches are numerically different, then take the one with the - bigger patch number. `2.3.4 > 2.3.3` -* If only one of them has a build number, then take the one with the - build number. `2.3.4-0 > 2.3.4` -* If they both have build numbers, and the build numbers are numerically - different, then take the one with the bigger build number. - `2.3.4-10 > 2.3.4-9` -* If only one of them has a tag, then take the one without the tag. - `2.3.4 > 2.3.4-beta` -* If they both have tags, then take the one with the lexicographically - larger tag. `2.3.4-beta > 2.3.4-alpha` -* At this point, they're equal. - -## Ranges - -The following range styles are supported: - -* `>1.2.3` Greater than a specific version. -* `<1.2.3` Less than -* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` -* `~1.2.3` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <2.0.0` -* `~1` := `>=1.0.0 <2.0.0` -* `1.2.x` := `>=1.2.0 <1.3.0` -* `1.x` := `>=1.0.0 <2.0.0` - -Ranges can be joined with either a space (which implies "and") or a -`||` (which implies "or"). - -## Functions - -* valid(v): Return the parsed version, or null if it's not valid. -* inc(v, release): Return the version incremented by the release type - (major, minor, patch, or build), or null if it's not valid. - -### Comparison - -* gt(v1, v2): `v1 > v2` -* gte(v1, v2): `v1 >= v2` -* lt(v1, v2): `v1 < v2` -* lte(v1, v2): `v1 <= v2` -* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent, - even if they're not the exact same string. You already know how to - compare strings. -* neq(v1, v2): `v1 != v2` The opposite of eq. -* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call - the corresponding function above. `"==="` and `"!=="` do simple - string comparison, but are included for completeness. Throws if an - invalid comparison string is provided. -* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if - v2 is greater. Sorts in ascending order if passed to Array.sort(). -* rcompare(v1, v2): The reverse of compare. Sorts an array of versions - in descending order when passed to Array.sort(). - - -### Ranges - -* validRange(range): Return the valid range or null if it's not valid -* satisfies(version, range): Return true if the version satisfies the - range. -* maxSatisfying(versions, range): Return the highest version in the list - that satisfies the range, or null if none of them do. diff --git a/vendor/npm/npm-1.0.8/node_modules/semver/bin/semver b/vendor/npm/npm-1.0.8/node_modules/semver/bin/semver deleted file mode 100755 index 3e6afb40d..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/semver/bin/semver +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env node -// Standalone semver comparison program. -// Exits successfully and prints matching version(s) if -// any supplied version is valid and passes all tests. - -var argv = process.argv.slice(2) - , versions = [] - , range = [] - , gt = [] - , lt = [] - , eq = [] - , semver = require("../semver") - -main() - -function main () { - if (!argv.length) return help() - while (argv.length) { - var a - switch (a = argv.shift()) { - case "-v": case "--version": - versions.push(argv.shift()) - break - case "-r": case "--range": - range.push(argv.shift()) - break - case "-h": case "--help": case "-?": - return help() - default: - versions.push(a) - break - } - } - - versions = versions.filter(semver.valid) - for (var i = 0, l = range.length; i < l ; i ++) { - versions = versions.filter(function (v) { - return semver.satisfies(v, range[i]) - }) - if (!versions.length) return fail() - } - return success(versions) -} - -function fail () { process.exit(1) } - -function success () { - versions.sort(semver.compare) - .map(semver.clean) - .forEach(function (v,i,_) { console.log(v) }) -} - -function help () { - console.log(["Usage: semver -v [-r ]" - ,"Test if version(s) satisfy the supplied range(s)," - ,"and sort them." - ,"" - ,"Multiple versions or ranges may be supplied." - ,"" - ,"Program exits successfully if any valid version satisfies" - ,"all supplied ranges, and prints all satisfying versions." - ,"" - ,"If no versions are valid, or ranges are not satisfied," - ,"then exits failure." - ,"" - ,"Versions are printed in ascending order, so supplying" - ,"multiple versions to the utility will just sort them." - ].join("\n")) -} - - diff --git a/vendor/npm/npm-1.0.8/node_modules/semver/package.json b/vendor/npm/npm-1.0.8/node_modules/semver/package.json deleted file mode 100644 index ea4bb8e2f..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/semver/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ "name" : "semver" -, "version" : "1.0.6" -, "description" : "The semantic version parser used by npm." -, "main" : "semver.js" -, "scripts" : { "test" : "node semver.js" } -, "devDependencies": { "tap" : "0.x" } -, "license" : - { "type" : "MIT" - , "url" : "https://github.com/isaacs/semver/raw/master/LICENSE" } -, "repository" : "git://github.com/isaacs/node-semver.git" -, "bin" : { "semver" : "./bin/semver" } } diff --git a/vendor/npm/npm-1.0.8/node_modules/semver/semver.js b/vendor/npm/npm-1.0.8/node_modules/semver/semver.js deleted file mode 100644 index d6335a455..000000000 --- a/vendor/npm/npm-1.0.8/node_modules/semver/semver.js +++ /dev/null @@ -1,518 +0,0 @@ - -// See http://semver.org/ -// This implementation is a *hair* less strict in that it allows -// v1.2.3 things, and also tags that don't begin with a char. - -var semver = "\\s*[v=]*\\s*([0-9]+)" // major - + "\\.([0-9]+)" // minor - + "\\.([0-9]+)" // patch - + "(-[0-9]+-?)?" // build - + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?" // tag - , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$" - , xRangePlain = "([0-9]+|x|X)(?:\\.([0-9]+|x|X)(?:\\.([0-9]+|x|X))?)?" - , xRange = "((?:<|>)?=?)?\\s*" + xRangePlain - , exprSpermy = "(?:~>?)"+xRange - , expressions = exports.expressions = - { parse : new RegExp("^\\s*"+semver+"\\s*$") - , parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$") - , parseRange : new RegExp( - "^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$") - , validComparator : new RegExp("^"+exprComparator+"$") - , parseXRange : new RegExp("^"+xRange+"$") - , parseSpermy : new RegExp("^"+exprSpermy+"$") - } -Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { return (str || "").match(expressions[i]) } -}) - -exports.rangeReplace = ">=$1 <=$7" -exports.clean = clean -exports.compare = compare -exports.satisfies = satisfies -exports.gt = gt -exports.gte = gte -exports.lt = lt -exports.lte = lte -exports.eq = eq -exports.neq = neq -exports.cmp = cmp -exports.inc = inc - -exports.valid = valid -exports.validPackage = validPackage -exports.validRange = validRange -exports.maxSatisfying = maxSatisfying - -function stringify (version) { - var v = version - return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'') -} - -function clean (version) { - version = exports.parse(version) - if (!version) return version - return stringify(version) -} - -function valid (version) { - return exports.parse(version) && version.trim().replace(/^[v=]+/, '') -} - -function validPackage (version) { - return version.match(expressions.parsePackage) && version.trim() -} - -// range can be one of: -// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0" -// ">1.0.2" like 1.0.3 - 9999.9999.9999 -// ">=1.0.2" like 1.0.2 - 9999.9999.9999 -// "<2.0.0" like 0.0.0 - 1.9999.9999 -// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999 -var starExpression = /(<|>)?=?\s*\*/g - , starReplace = "" - , compTrimExpression = new RegExp("((<|>)?=?)\\s*(" - +semver+"|"+xRangePlain+")", "g") - , compTrimReplace = "$1$3" - -function toComparators (range) { - var ret = (range || "").trim() - .replace(expressions.parseRange, exports.rangeReplace) - .replace(compTrimExpression, compTrimReplace) - .split(/\s+/) - .join(" ") - .split("||") - .map(function (orchunk) { - return orchunk - .split(" ") - .map(replaceXRanges) - .map(replaceSpermies) - .map(replaceStars) - .join(" ").trim() - }) - .map(function (orchunk) { - return orchunk - .trim() - .split(/\s+/) - .filter(function (c) { return c.match(expressions.validComparator) }) - }) - .filter(function (c) { return c.length }) - //console.error("comparators", range, ret) - return ret -} - -function replaceStars (stars) { - return stars.replace(starExpression, starReplace) -} - -// "2.x","2.x.x" --> ">=2.0.0 <2.1" -// "2.3.x" --> ">=2.3.0 <2.4.0" -function replaceXRanges (ranges) { - return ranges.split(/\s+/) - .map(replaceXRange) - .join(" ") -} - -function replaceXRange (version) { - return version.trim().replace(expressions.parseXRange, - function (v, gtlt, M, m, p) { - var anyX = !M || M.toLowerCase() === "x" - || !m || m.toLowerCase() === "x" - || !p || p.toLowerCase() === "x" - , ret = v - - if (gtlt && anyX) { - // just replace x'es with zeroes - ;(!M || M.toLowerCase() === "x") && (M = 0) - ;(!m || m.toLowerCase() === "x") && (m = 0) - ;(!p || p.toLowerCase() === "x") && (p = 0) - ret = gtlt + M+"."+m+"."+p - } else if (!M || M.toLowerCase() === "x") { - ret = "*" // allow any - } else if (!m || m.toLowerCase() === "x") { - // append "-" onto the version, otherwise - // "1.x.x" matches "2.0.0beta", since the tag - // *lowers* the version value - ret = ">="+M+".0.0- <"+(+M+1)+".0.0-" - } else if (!p || p.toLowerCase() === "x") { - ret = ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" - } - //console.error("parseXRange", [].slice.call(arguments), ret) - return ret - }) -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceSpermies (version) { - return version.trim().replace(expressions.parseSpermy, - function (v, gtlt, M, m, p) { - if (gtlt) throw new Error( - "Using '"+gtlt+"' with ~ makes no sense. Don't do it.") - if (!M || M.toLowerCase() === "x") { - return "*" - } - // ~1 == >=1.0.0 <2.0.0 - if (!m || m.toLowerCase() === "x") { - return ">="+M+".0.0 <"+(+M+1)+".0.0" - } - // ~1.2 == >=1.2.0 <1.3.0 - if (!p || p.toLowerCase() === "x") { - return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0" - } - // ~1.2.3 == >=1.2.3 <1.3.0 - return ">="+M+"."+m+"."+p+" <"+M+"."+(+m+1)+".0" - }) -} - -function validRange (range) { - range = range.trim().replace(starExpression, starReplace) - var c = toComparators(range) - return (c.length === 0) - ? null - : c.map(function (c) { return c.join(" ") }).join("||") -} - -// returns the highest satisfying version in the list, or undefined -function maxSatisfying (versions, range) { - return versions - .filter(function (v) { return satisfies(v, range) }) - .sort(compare) - .pop() -} -function satisfies (version, range) { - version = valid(version) - if (!version) return false - range = toComparators(range) - for (var i = 0, l = range.length ; i < l ; i ++) { - var ok = false - for (var j = 0, ll = range[i].length ; j < ll ; j ++) { - var r = range[i][j] - , gtlt = r.charAt(0) === ">" ? gt - : r.charAt(0) === "<" ? lt - : false - , eq = r.charAt(!!gtlt) === "=" - , sub = (!!eq) + (!!gtlt) - if (!gtlt) eq = true - r = r.substr(sub) - r = (r === "") ? r : valid(r) - ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r)) - if (!ok) break - } - if (ok) return true - } - return false -} - -// return v1 > v2 ? 1 : -1 -function compare (v1, v2) { - var g = gt(v1, v2) - return g === null ? 0 : g ? 1 : -1 -} - -function rcompare (v1, v2) { - return compare(v2, v1) -} - -function lt (v1, v2) { return gt(v2, v1) } -function gte (v1, v2) { return !lt(v1, v2) } -function lte (v1, v2) { return !gt(v1, v2) } -function eq (v1, v2) { return gt(v1, v2) === null } -function neq (v1, v2) { return gt(v1, v2) !== null } -function cmp (v1, c, v2) { - switch (c) { - case ">": return gt(v1, v2) - case "<": return lt(v1, v2) - case ">=": return gte(v1, v2) - case "<=": return lte(v1, v2) - case "==": return eq(v1, v2) - case "!=": return neq(v1, v2) - case "===": return v1 === v2 - case "!==": return v1 !== v2 - default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c) - } -} - -// return v1 > v2 -function num (v) { - return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10) -} -function gt (v1, v2) { - v1 = exports.parse(v1) - v2 = exports.parse(v2) - if (!v1 || !v2) return false - - for (var i = 1; i < 5; i ++) { - v1[i] = num(v1[i]) - v2[i] = num(v2[i]) - if (v1[i] > v2[i]) return true - else if (v1[i] !== v2[i]) return false - } - // no tag is > than any tag, or use lexicographical order. - var tag1 = v1[5] || "" - , tag2 = v2[5] || "" - - // kludge: null means they were equal. falsey, and detectable. - // embarrassingly overclever, though, I know. - return tag1 === tag2 ? null - : !tag1 ? true - : !tag2 ? false - : tag1 > tag2 -} - -function inc (version, release) { - version = exports.parse(version) - if (!version) return null - - var parsedIndexLookup = - { 'major': 1 - , 'minor': 2 - , 'patch': 3 - , 'build': 4 } - var incIndex = parsedIndexLookup[release] - if (incIndex === undefined) return null - - var current = num(version[incIndex]) - version[incIndex] = current === -1 ? 1 : current + 1 - - for (var i = incIndex + 1; i < 5; i ++) { - if (num(version[i]) !== -1) version[i] = "0" - } - - if (version[4]) version[4] = "-" + version[4] - version[5] = "" - - return stringify(version) -} - -if (module === require.main) { // tests below - -var tap = require("tap") - , test = tap.test - -tap.plan(5) - -test("comparison tests", function (t) { -; [ ["0.0.0", "0.0.0foo"] - , ["0.0.1", "0.0.0"] - , ["1.0.0", "0.9.9"] - , ["0.10.0", "0.9.0"] - , ["0.99.0", "0.10.0"] - , ["2.0.0", "1.2.3"] - , ["v0.0.0", "0.0.0foo"] - , ["v0.0.1", "0.0.0"] - , ["v1.0.0", "0.9.9"] - , ["v0.10.0", "0.9.0"] - , ["v0.99.0", "0.10.0"] - , ["v2.0.0", "1.2.3"] - , ["0.0.0", "v0.0.0foo"] - , ["0.0.1", "v0.0.0"] - , ["1.0.0", "v0.9.9"] - , ["0.10.0", "v0.9.0"] - , ["0.99.0", "v0.10.0"] - , ["2.0.0", "v1.2.3"] - , ["1.2.3", "1.2.3-asdf"] - , ["1.2.3-4", "1.2.3"] - , ["1.2.3-4-foo", "1.2.3"] - , ["1.2.3-5", "1.2.3-5-foo"] - , ["1.2.3-5", "1.2.3-4"] - , ["1.2.3-5-foo", "1.2.3-5-Foo"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')") - t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')") - t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')") - t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')") - t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v1, "==", v1), "cmp("+v1+"=="+v1+")") - t.ok(cmp(v0, ">=", v1), "cmp("+v0+"<="+v1+")") - t.ok(cmp(v1, "<=", v0), "cmp("+v1+">="+v0+")") - t.ok(cmp(v0, "!=", v1), "cmp("+v0+"!="+v1+")") - }) - t.end() -}) - -test("equality tests", function (t) { -; [ ["1.2.3", "v1.2.3"] - , ["1.2.3", "=1.2.3"] - , ["1.2.3", "v 1.2.3"] - , ["1.2.3", "= 1.2.3"] - , ["1.2.3", " v1.2.3"] - , ["1.2.3", " =1.2.3"] - , ["1.2.3", " v 1.2.3"] - , ["1.2.3", " = 1.2.3"] - , ["1.2.3-0", "v1.2.3-0"] - , ["1.2.3-0", "=1.2.3-0"] - , ["1.2.3-0", "v 1.2.3-0"] - , ["1.2.3-0", "= 1.2.3-0"] - , ["1.2.3-0", " v1.2.3-0"] - , ["1.2.3-0", " =1.2.3-0"] - , ["1.2.3-0", " v 1.2.3-0"] - , ["1.2.3-0", " = 1.2.3-0"] - , ["1.2.3-01", "v1.2.3-1"] - , ["1.2.3-01", "=1.2.3-1"] - , ["1.2.3-01", "v 1.2.3-1"] - , ["1.2.3-01", "= 1.2.3-1"] - , ["1.2.3-01", " v1.2.3-1"] - , ["1.2.3-01", " =1.2.3-1"] - , ["1.2.3-01", " v 1.2.3-1"] - , ["1.2.3-01", " = 1.2.3-1"] - , ["1.2.3beta", "v1.2.3beta"] - , ["1.2.3beta", "=1.2.3beta"] - , ["1.2.3beta", "v 1.2.3beta"] - , ["1.2.3beta", "= 1.2.3beta"] - , ["1.2.3beta", " v1.2.3beta"] - , ["1.2.3beta", " =1.2.3beta"] - , ["1.2.3beta", " v 1.2.3beta"] - , ["1.2.3beta", " = 1.2.3beta"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')") - t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")") - t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")") - t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")") - t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")") - t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')") - t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')") - }) - t.end() -}) - - -test("range tests", function (t) { -; [ ["1.0.0 - 2.0.0", "1.2.3"] - , ["1.0.0", "1.0.0"] - , [">=*", "0.2.4"] - , ["", "1.0.0"] - , ["*", "1.2.3"] - , ["*", "v1.2.3-foo"] - , [">=1.0.0", "1.0.0"] - , [">=1.0.0", "1.0.1"] - , [">=1.0.0", "1.1.0"] - , [">1.0.0", "1.0.1"] - , [">1.0.0", "1.1.0"] - , ["<=2.0.0", "2.0.0"] - , ["<=2.0.0", "1.9999.9999"] - , ["<=2.0.0", "0.2.9"] - , ["<2.0.0", "1.9999.9999"] - , ["<2.0.0", "0.2.9"] - , [">= 1.0.0", "1.0.0"] - , [">= 1.0.0", "1.0.1"] - , [">= 1.0.0", "1.1.0"] - , ["> 1.0.0", "1.0.1"] - , ["> 1.0.0", "1.1.0"] - , ["<= 2.0.0", "2.0.0"] - , ["<= 2.0.0", "1.9999.9999"] - , ["<= 2.0.0", "0.2.9"] - , ["< 2.0.0", "1.9999.9999"] - , ["<\t2.0.0", "0.2.9"] - , [">=0.1.97", "v0.1.97"] - , [">=0.1.97", "0.1.97"] - , ["0.1.20 || 1.2.4", "1.2.4"] - , [">=0.2.3 || <0.0.1", "0.0.0"] - , [">=0.2.3 || <0.0.1", "0.2.3"] - , [">=0.2.3 || <0.0.1", "0.2.4"] - , ["||", "1.3.4"] - , ["2.x.x", "2.1.3"] - , ["1.2.x", "1.2.3"] - , ["1.2.x || 2.x", "2.1.3"] - , ["1.2.x || 2.x", "1.2.3"] - , ["x", "1.2.3"] - , ["2", "2.1.2"] - , ["2.3", "2.3.1"] - , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.4.5"] - , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0 - , ["~1", "1.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "1.2.3"] - , ["~> 1", "1.2.3"] - , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0 - , ["~ 1.0", "1.0.2"] - , ["<1", "1.0.0beta"] - , ["< 1", "1.0.0beta"] - , [">=1", "1.0.0"] - , [">= 1", "1.0.0"] - , ["<1.2", "1.1.1"] - , ["< 1.2", "1.1.1"] - , ["1", "1.0.0beta"] - ].forEach(function (v) { - t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1]) - }) - t.end() -}) - -test("negative range tests", function (t) { -; [ ["1.0.0 - 2.0.0", "2.2.3"] - , ["1.0.0", "1.0.1"] - , [">=1.0.0", "0.0.0"] - , [">=1.0.0", "0.0.1"] - , [">=1.0.0", "0.1.0"] - , [">1.0.0", "0.0.1"] - , [">1.0.0", "0.1.0"] - , ["<=2.0.0", "3.0.0"] - , ["<=2.0.0", "2.9999.9999"] - , ["<=2.0.0", "2.2.9"] - , ["<2.0.0", "2.9999.9999"] - , ["<2.0.0", "2.2.9"] - , [">=0.1.97", "v0.1.93"] - , [">=0.1.97", "0.1.93"] - , ["0.1.20 || 1.2.4", "1.2.3"] - , [">=0.2.3 || <0.0.1", "0.0.3"] - , [">=0.2.3 || <0.0.1", "0.2.2"] - , ["2.x.x", "1.1.3"] - , ["2.x.x", "3.1.3"] - , ["1.2.x", "1.3.3"] - , ["1.2.x || 2.x", "3.1.3"] - , ["1.2.x || 2.x", "1.1.3"] - , ["2", "1.1.2"] - , ["2.3", "2.4.1"] - , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.3.9"] - , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0 - , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0 - , ["~1", "0.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "2.2.3"] - , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0 - , ["<1", "1.0.0"] - , [">=1.2", "1.1.1"] - , ["1", "2.0.0beta"] - ].forEach(function (v) { - t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1]) - }) - t.end() -}) - -test("increment versions test", function (t) { -; [ [ "1.2.3", "major", "2.0.0" ] - , [ "1.2.3", "minor", "1.3.0" ] - , [ "1.2.3", "patch", "1.2.4" ] - , [ "1.2.3", "build", "1.2.3-1" ] - , [ "1.2.3-4", "build", "1.2.3-5" ] - - , [ "1.2.3tag", "major", "2.0.0" ] - , [ "1.2.3-tag", "major", "2.0.0" ] - , [ "1.2.3tag", "build", "1.2.3-1" ] - , [ "1.2.3-tag", "build", "1.2.3-1" ] - , [ "1.2.3-4-tag", "build", "1.2.3-5" ] - , [ "1.2.3-4tag", "build", "1.2.3-5" ] - - , [ "1.2.3", "fake", null ] - , [ "fake", "major", null ] - ].forEach(function (v) { - t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2]) - }) - - t.end() -}) - -} diff --git a/vendor/npm/npm-1.0.8/npm.js b/vendor/npm/npm-1.0.8/npm.js deleted file mode 100644 index 88ee93555..000000000 --- a/vendor/npm/npm-1.0.8/npm.js +++ /dev/null @@ -1,251 +0,0 @@ - -process.title = "npm" - -if (require.main === module) { - console.error(["It looks like you're doing 'node npm.js'." - ,"Don't do that. Instead, run 'make install'" - ,"and then use the 'npm' command line utility." - ].join("\n")) - process.exit(1) -} - -var EventEmitter = require("events").EventEmitter - , npm = module.exports = new EventEmitter - , config = require("./lib/config") - , set = require("./lib/utils/set") - , get = require("./lib/utils/get") - , ini = require("./lib/utils/ini") - , log = require("./lib/utils/log") - , fs = require("./lib/utils/graceful-fs") - , path = require("path") - , abbrev = require("abbrev") - , which = require("./lib/utils/which") - , semver = require("semver") - , findPrefix = require("./lib/utils/find-prefix") - -npm.commands = {} -npm.ELIFECYCLE = {} -npm.E404 = {} -npm.EPUBLISHCONFLICT = {} -npm.EJSONPARSE = {} -npm.EISGIT = {} -npm.ECYCLE = {} -npm.EENGINE = {} - - -try { - // startup, ok to do this synchronously - var j = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"))+"") - npm.version = j.version - npm.nodeVersionRequired = j.engines.node - if (!semver.satisfies(process.version, j.engines.node)) { - log.error(["" - ,"npm requires node version: "+j.engines.node - ,"And you have: "+process.version - ,"which is not satisfactory." - ,"" - ,"Bad things will likely happen. You have been warned." - ,""].join("\n"), "unsupported version") - } -} catch (ex) { - try { - log(ex, "error reading version") - } catch (er) {} - npm.version = ex -} - -var commandCache = {} - // short names for common things - , aliases = { "rm" : "uninstall" - , "r" : "uninstall" - , "un" : "uninstall" - , "unlink" : "uninstall" - , "remove" : "uninstall" - , "rb" : "rebuild" - , "list" : "ls" - , "la" : "ls" - , "ll" : "ls" - , "ln" : "link" - , "i" : "install" - , "up" : "update" - , "c" : "config" - , "info" : "view" - , "find" : "search" - , "s" : "search" - , "se" : "search" - , "author" : "owner" - } - - , aliasNames = Object.keys(aliases) - // these are filenames in ./lib - , cmdList = [ "install" - , "uninstall" - , "cache" - , "config" - , "set" - , "get" - , "update" - , "outdated" - , "prune" - - , "rebuild" - , "link" - - , "publish" - , "tag" - , "adduser" - , "unpublish" - , "owner" - , "deprecate" - - , "help" - , "help-search" - , "ls" - , "search" - , "view" - , "init" - , "version" - , "edit" - , "explore" - , "docs" - , "faq" - , "root" - , "prefix" - , "bin" - , "whoami" - - , "test" - , "stop" - , "start" - , "restart" - , "run-script" - , "completion" - ] - , plumbing = [ "build" - , "unbuild" - , "xmas" - ] - , fullList = npm.fullList = cmdList.concat(aliasNames).filter(function (c) { - return plumbing.indexOf(c) === -1 - }) - , abbrevs = abbrev(fullList) - -Object.keys(abbrevs).concat(plumbing).forEach(function (c) { - Object.defineProperty(npm.commands, c, { get : function () { - if (!loaded) throw new Error( - "Call npm.load(conf, cb) before using this command.\n"+ - "See the README.md or cli.js for example usage.") - var a = npm.deref(c) - if (c === "la" || c === "ll") { - npm.config.set("long", true) - } - if (commandCache[a]) return commandCache[a] - return commandCache[a] = require(__dirname+"/lib/"+a) - }, enumerable: fullList.indexOf(c) !== -1 }) -}) - -npm.deref = function (c) { - if (plumbing.indexOf(c) !== -1) return c - var a = abbrevs[c] - if (aliases[a]) a = aliases[a] - return a -} - -var loaded = false - , loading = false - , loadListeners = [] - -npm.load = function (conf, cb_) { - if (!cb_ && typeof conf === "function") cb_ = conf , conf = {} - if (!cb_) cb_ = function () {} - if (!conf) conf = {} - loadListeners.push(cb_) - if (loaded) return cb() - if (loading) return - loading = true - var onload = true - - function handleError (er) { - loadListeners.forEach(function (cb) { - process.nextTick(function () { cb(er, npm) }) - }) - } - - function cb (er) { - if (er) return handleError(er) - loaded = true - loadListeners.forEach(function (cb) { - process.nextTick(function () { cb(er, npm) }) - }) - loadListeners.length = 0 - if (onload = onload && npm.config.get("onload-script")) { - require(onload) - onload = false - } - } - - log.waitForConfig() - which(process.argv[0], function (er, node) { - if (!er && node !== process.execPath) { - log.verbose("node symlink", node) - process.execPath = node - process.installPrefix = path.resolve(node, "..", "..") - } - ini.resolveConfigs(conf, function (er) { - if (er) return handleError(er) - var p - if (!npm.config.get("global") - && !conf.hasOwnProperty("prefix")) { - p = process.cwd() - } else { - p = npm.config.get("prefix") - } - // try to guess at a good node_modules location. - findPrefix(p, function (er, p) { - if (er) return handleError(er) - Object.defineProperty(npm, "prefix", - { get : function () { return p } - , set : function (r) { return p = r } - , enumerable : true - }) - return cb() - }) - }) - }) -} - -var path = require("path") -npm.config = - { get : function (key) { return ini.get(key) } - , set : function (key, val) { return ini.set(key, val, "cli") } - , del : function (key, val) { return ini.del(key, val, "cli") } - } - -Object.defineProperty(npm, "dir", - { get : function () { - if (npm.config.get("global")) { - return path.resolve(npm.prefix, "lib", "node_modules") - } else { - return path.resolve(npm.prefix, "node_modules") - } - } - , enumerable : true - }) - -Object.defineProperty(npm, "root", - { get : function () { return npm.dir } }) - -Object.defineProperty(npm, "cache", - { get : function () { return npm.config.get("cache") } - , set : function (r) { return npm.config.set("cache", r) } - , enumerable : true - }) - -var tmpFolder -Object.defineProperty(npm, "tmp", - { get : function () { - if (!tmpFolder) tmpFolder = "npm-"+Date.now() - return path.resolve(npm.config.get("tmp"), tmpFolder) - } - , enumerable : true - }) diff --git a/vendor/npm/npm-1.0.8/package.json b/vendor/npm/npm-1.0.8/package.json deleted file mode 100644 index b73068020..000000000 --- a/vendor/npm/npm-1.0.8/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ "name" : "npm" -, "description" : "A package manager for node" -, "keywords" : [ "package manager", "modules", "install", "package.json" ] -, "version" : "1.0.8" -, "preferGlobal" : true -, "config" : { "publishtest" : false } -, "homepage" : "http://npmjs.org/" -, "author" : "Isaac Z. Schlueter (http://blog.izs.me)" -, "repository" : - { "type" : "git" - , "url" : "git://github.com/isaacs/npm.git" - } -, "bugs" : - { "mail" : "npm-@googlegroups.com" - , "web" : "http://github.com/isaacs/npm/issues" - } -, "directories" : { "doc" : "./doc" - , "man" : "./man1" - , "lib" : "./lib" - , "bin" : "./bin" - } -, "main" : "npm" -, "bin" : "./bin/npm.js" -, "dependencies" : - { "semver" : "1" - , "abbrev" : "1" - , "nopt" : "1" - , "node-uuid" : "1.2" } -, "bundleDependencies" : [ "semver", "abbrev", "nopt", "node-uuid" ] -, "devDependencies" : { "ronn" : "" } -, "engines" : { "node" : "0.4 || 0.5", "npm" : "1" } -, "scripts" : { "test" : "./test/run.sh" - , "prepublish" : "make doc" - } -, "licenses" : - [ { "type" : "MIT" - , "url" : "http://github.com/isaacs/npm/raw/master/LICENSE" - } - ] -} diff --git a/vendor/npm/npm-1.0.8/scripts/clean-old.sh b/vendor/npm/npm-1.0.8/scripts/clean-old.sh deleted file mode 100644 index 626dbac9e..000000000 --- a/vendor/npm/npm-1.0.8/scripts/clean-old.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/sh - -# look for old 0.x cruft, and get rid of it. -# Should already be sitting in the npm folder. - -# Sorry, if readlink isn't available, then this is just too tricky. -# However, greadlink is fine, so Solaris can join the party, too. -readlink="readlink" -which $readlink >/dev/null 2>/dev/null -if [ $? -ne 0 ]; then - readlink="greadlink" - which $readlink >/dev/null 2>/dev/null - if [ $? -ne 0 ]; then - echo "Can't find the readlink or greadlink command. Aborting." - exit 1 - fi -fi - -if ! [ "x$npm_config_prefix" = "x" ]; then - PREFIXES=$npm_config_prefix -else - node="$NODE" - if [ "x$node" = "x" ]; then - node=`which node` - fi - if [ "x$node" = "x" ]; then - echo "Can't find node to determine prefix. Aborting." - exit 1 - fi - - - PREFIX=`dirname $node` - PREFIX=`dirname $PREFIX` - echo "prefix=$PREFIX" - PREFIXES=$PREFIX - - altprefix=`$node -e process.installPrefix` - if ! [ "x$altprefix" = "x" ] && ! [ "x$altprefix" = "x$PREFIX" ]; then - echo "altprefix=$altprefix" - PREFIXES="$PREFIX $altprefix" - fi -fi - -# now prefix is where npm would be rooted by default -# go hunting. - -packages= -for prefix in $PREFIXES; do - packages="$packages - "`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache` -done - -packages=`echo $packages` - -echo "" -echo "This script will find and eliminate any shims, symbolic" -echo "links, and other cruft that was installed by npm 0.x." -echo "" - -if ! [ "x$packages" = "x" ]; then - echo "The following packages appear to have been installed with" - echo "an old version of npm, and will be removed forcibly:" - for pkg in $packages; do - echo " $pkg" - done - echo "Make a note of these. You may want to install them" - echo "with npm 1.0 when this process is completed." - echo "" -fi - -OK= -if [ "x$1" = "x-y" ]; then - OK="yes" -fi - -while ! [ "$OK" = "y" ] && ! [ "$OK" = "yes" ] && ! [ "$OK" = "no" ]; do - echo "Is this OK? enter 'yes' or 'no' " - read OK -done -if [ "$OK" = "no" ]; then - echo "Aborting" - exit 1 -fi - -filelist="" - -for prefix in $PREFIXES; do - # remove any links into the .npm dir, or links to - # version-named shims/symlinks. - for folder in share/man bin lib/node; do - find $prefix/$folder -type l | while read file; do - target=`$readlink $file | grep '/\.npm/'` - if ! [ "x$target" = "x" ]; then - # found one! - echo rm -rf "$file" - rm -rf "$file" - # also remove any symlinks to this file. - base=`basename "$file"` - base=`echo "$base" | awk -F@ '{print $1}'` - if ! [ "x$base" = "x" ]; then - find "`dirname $file`" -type l -name "$base"'*' \ - | while read l; do - target=`$readlink "$l" | grep "$base"` - if ! [ "x$target" = "x" ]; then - echo rm -rf $l - rm -rf $l - fi - done - fi - fi - done - - # Scour for shim files. These are relics of 0.2 npm installs. - # note: grep -r is not portable. - find $prefix/$folder -type f \ - | xargs grep -sl '// generated by npm' \ - | while read file; do - echo rm -rf $file - rm -rf $file - done - done - - # now remove the package modules, and the .npm folder itself. - if ! [ "x$packages" = "x" ]; then - for pkg in $packages; do - echo rm -rf $prefix/lib/node/$pkg - rm -rf $prefix/lib/node/$pkg - echo rm -rf $prefix/lib/node/$pkg\@* - rm -rf $prefix/lib/node/$pkg\@* - done - fi - - for folder in lib/node/.npm lib/npm share/npm; do - if [ -d $prefix/$folder ]; then - echo rm -rf $prefix/$folder - rm -rf $prefix/$folder - fi - done -done - -echo "" -echo 'All clean!' - -exit 0 diff --git a/vendor/npm/npm-1.0.8/scripts/install-message.sh b/vendor/npm/npm-1.0.8/scripts/install-message.sh deleted file mode 100755 index 43f4f260b..000000000 --- a/vendor/npm/npm-1.0.8/scripts/install-message.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -if [ "x$npm_config_loglevel" = "xsilent" ]; then - exit -fi - -cat <npm-install.sh - # which is a bit cuter. But on others, &1 is already closed, - # so catting to another script file won't do anything. - curl -s http://npmjs.org/install.sh > npm-install-$$.sh - sh npm-install-$$.sh - ret=$? - rm npm-install-$$.sh - exit $ret -fi - -if ! [ "x$NPM_DEBUG" = "x" ]; then - set +x -fi - -# make sure that node exists -node=`which node 2>&1` -ret=$? -if [ $ret -ne 0 ] || ! [ -x $node ]; then - echo "npm cannot be installed without nodejs." >&2 - echo "Install node first, and then try again." >&2 - echo "" >&2 - echo "Maybe node is installed, but not in the PATH?" >&2 - echo "Note that running as sudo can change envs." >&2 - echo "" - echo "PATH=$PATH" >&2 - exit $ret -fi - -# set the temp dir -TMP="${TMPDIR}" -if [ "x$TMP" = "x" ]; then - TMP="/tmp" -fi -TMP="${TMP}/npm.$$" -rm -rf "$TMP" || true -mkdir "$TMP" -if [ $? -ne 0 ]; then - echo "failed to mkdir $TMP" >&2 - exit 1 -fi - -BACK="$PWD" - -# sniff for gtar/gegrep/gmake -# use which, but don't trust it very much. - -tar="${TAR}" -if [ -z "$tar" ]; then - tar=tar -fi - -egrep=`which gegrep 2>&1` -if [ $? -ne 0 ] || ! [ -x $egrep ]; then - egrep=egrep -fi - -make=`which gmake 2>&1` -if [ $? -ne 0 ] || ! [ -x $make ]; then - make=`which make 2>&1` - if [ $? -ne 0 ] || ! [ -x $make ]; then - make=NOMAKE - echo "Installing without make. This may fail." >&2 - fi -fi - -t="${npm_install}" -if [ -z "$t" ]; then - t="latest" -fi - -url=`curl -s -L http://registry.npmjs.org/npm/$t \ - | $egrep -o 'tarball":"[^"]+' \ - | head -n 1 \ - | $egrep -o 'http://.*'` -echo "fetching: $url" >&2 - -ret=$? -if [ $ret -ne 0 ]; then - echo "Failed to get tarball url" >&2 - exit $ret -fi - -cd "$TMP" \ - && curl -s -L "$url" | gzip --decompress --stdout | $tar -xf - \ - && cd * \ - && (node_version=`$node --version 2>&1` - ret=$? - if [ $ret -eq 0 ]; then - req=`$node bin/read-package-json.js package.json engines.node` - if [ -e node_modules ]; then - $node node_modules/semver/bin/semver -v "$node_version" -r "$req" - ret=$? - else - $node bin/semver.js -v "$node_version" -r "$req" - ret=$? - fi - fi - if [ $ret -ne 0 ]; then - echo "You need node $req to run this program." >&2 - echo "node --version reports: $node_version" >&2 - echo "Please upgrade node before continuing." - exit $ret - fi) \ - && (ver=`$node bin/read-package-json.js package.json version` - isnpm10=0 - if [ $ret -eq 0 ]; then - req=`$node bin/read-package-json.js package.json engines.node` - if [ -e node_modules ]; then - if $node node_modules/semver/bin/semver -v "$ver" -r "1" - then - isnpm10=1 - fi - else - if $node bin/semver -v "$ver" -r ">=1.0"; then - isnpm10=1 - fi - fi - fi - - ret=0 - if [ $isnpm10 -eq 1 ] && [ -f "scripts/clean-old.sh" ]; then - if ! [ "x$skipclean" = "x" ] \ - || [ "x$clean" = "xno" ] \ - || [ "x$clean" = "xn" ]; then - echo "Skipping 0.x cruft clean" >&2 - ret=0 - elif [ "x$clean" = "xy" ] || [ "x$clean" = "xyes" ]; then - NODE=$node /bin/sh "scripts/clean-old.sh" "-y" - ret=$? - else - NODE=$node /bin/sh "scripts/clean-old.sh" &2 - exit $ret - fi) \ - && (if [ "$make" = "NOMAKE" ] || ! $make clean install; then - $node cli.js cache clean - $node cli.js rm npm --force --global - $node cli.js install . --force --global - fi) \ - && cd "$BACK" \ - && rm -rf "$TMP" \ - && echo "It worked" - -ret=$? -if [ $ret -ne 0 ]; then - echo "It failed" >&2 -fi -exit $ret diff --git a/vendor/npm/npm-1.0.8/test/common.js b/vendor/npm/npm-1.0.8/test/common.js deleted file mode 100644 index abbfef915..000000000 --- a/vendor/npm/npm-1.0.8/test/common.js +++ /dev/null @@ -1,7 +0,0 @@ - -// whatever, it's just tests. -;["sys","assert"].forEach(function (thing) { - thing = require("thing") - for (var i in thing) global[i] = thing[i] -} - diff --git a/vendor/npm/npm-1.0.8/test/disabled/bundlerecurs/package.json b/vendor/npm/npm-1.0.8/test/disabled/bundlerecurs/package.json deleted file mode 100644 index d87041170..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/bundlerecurs/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name" : "bundletest" -, "version" : "1.0.0" -, "dependencies" : { "bundletest" : "*" } -} diff --git a/vendor/npm/npm-1.0.8/test/disabled/failer/package.json b/vendor/npm/npm-1.0.8/test/disabled/failer/package.json deleted file mode 100644 index e1f8e946b..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/failer/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name" : "failer" -, "version" : "9999.999.99" -, "dependencies" : { "base64" : "*" } -, "scripts" : { "preinstall" : "exit 1" } -} diff --git a/vendor/npm/npm-1.0.8/test/disabled/fast/package.json b/vendor/npm/npm-1.0.8/test/disabled/fast/package.json deleted file mode 100644 index 9de6b81c3..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/fast/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "name" : "fast" -, "description" : "does nothing, and not very fast" -, "version" : "1.2.3" -, "scripts" : -{ "preinstall" : "sleep 1 && echo fast 1 $(date +%s) && echo fast 2" -, "install" : "sleep 1 && echo fast 2 $(date +%s) && echo fast 3" -, "postinstall" : "sleep 1 && echo fast 3 $(date +%s) && echo fast 4" -, "preactivate" : "sleep 1 && echo fast 4 $(date +%s) && echo fast 5" -, "activate" : "sleep 1 && echo fast 5 $(date +%s) && echo fast 6" -, "postactivate" : "sleep 1 && echo fast 6 $(date +%s) && echo fast 7" -} -} diff --git a/vendor/npm/npm-1.0.8/test/disabled/package-config/package.json b/vendor/npm/npm-1.0.8/test/disabled/package-config/package.json deleted file mode 100644 index 7ec97d380..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/package-config/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"package-config" -,"version":"1.2.3" -,"config":{"foo":"bar"} -,"scripts":{"test":"./test.js"}} diff --git a/vendor/npm/npm-1.0.8/test/disabled/package-config/test.js b/vendor/npm/npm-1.0.8/test/disabled/package-config/test.js deleted file mode 100755 index 7337b237b..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/package-config/test.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var env = process.env - , orig = require(process.env.npm_package_name+"/package.json").config - , assert = require("assert") - -console.log("Before running this test, do:\n" - +" npm config set package-config:foo boo\n" - +"or else it's about to fail.") -assert.equal(env.npm_package_config_foo, "boo", "foo != boo") -assert.equal(orig.foo, "bar", "original foo != bar") -assert.equal(env["npm_config_package-config:foo"], "boo", - "package-config:foo != boo") -console.log({ foo: env.npm_package_config_foo - , orig_foo: orig.foo - , "package-config:foo": env["npm_config_package-config:foo"] - }) diff --git a/vendor/npm/npm-1.0.8/test/disabled/slow/package.json b/vendor/npm/npm-1.0.8/test/disabled/slow/package.json deleted file mode 100644 index 75c404606..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/slow/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "name" : "slow" -, "description" : "just like fast, but even slower" -, "version" : "1.2.3" -, "scripts" : - { "preinstall" : "sleep 1 && echo slow 1 $(date +%s) && sleep 1 && echo slow 2 $(date +%s)" - , "install" : "sleep 1 && echo slow 2 $(date +%s) && sleep 1 && echo slow 3 $(date +%s)" - , "postinstall" : "sleep 1 && echo slow 3 $(date +%s) && sleep 1 && echo slow 4 $(date +%s)" - , "preactivate" : "sleep 1 && echo slow 4 $(date +%s) && sleep 1 && echo slow 5 $(date +%s)" - , "activate" : "sleep 1 && echo slow 5 $(date +%s) && sleep 1 && echo slow 6 $(date +%s)" - , "postactivate" : "sleep 1 && echo slow 6 $(date +%s) && sleep 1 && echo slow 7 $(date +%s)" - } -} diff --git a/vendor/npm/npm-1.0.8/test/disabled/startstop/package.json b/vendor/npm/npm-1.0.8/test/disabled/startstop/package.json deleted file mode 100644 index bee2a2fd3..000000000 --- a/vendor/npm/npm-1.0.8/test/disabled/startstop/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name":"startstop" -,"version":"1.2.3" -,"scripts":{"start":"echo 'start'","stop":"echo 'stop'"}} diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/package.json b/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/package.json deleted file mode 100644 index 374b4432b..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-blerg" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -} diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/test.js b/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/test.js deleted file mode 100644 index f548458ac..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-blerg/test.js +++ /dev/null @@ -1,5 +0,0 @@ - -var assert = require("assert") -assert.equal(undefined, process.env.npm_config__password, "password exposed!") -assert.equal(undefined, process.env.npm_config__auth, "auth exposed!") -assert.equal(undefined, process.env.npm_config__authCrypt, "authCrypt exposed!") diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/package.json b/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/package.json deleted file mode 100644 index 01153a2df..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ "name":"npm-test-env-reader" -, "version" : "1.2.3" -, "dependencies" : { "connect":"*", "fab":"*", "glob":"*" } -, "scripts" : - { "install" : "./test.sh" - , "preinstall" : "./test.sh" - , "activate" : "./test.sh" - , "postactivate" : "./test.sh" - , "preuninstall" : "./test.sh" - , "postuninstall" : "./test.sh" - , "predeactivate" : "./test.sh" - , "test" : "./test.sh" - , "stop" : "./test.sh" - , "start" : "./test.sh" - , "restart" : "./test.sh" - , "foo" : "./test.sh" - } -} diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/test.sh b/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/test.sh deleted file mode 100755 index b4ca4374e..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-env-reader/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh -env | grep npm | sort | uniq -echo PATH=$PATH diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-private/package.json b/vendor/npm/npm-1.0.8/test/packages/npm-test-private/package.json deleted file mode 100644 index 3d95a37af..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-private/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"npm-test-private" -,"version":"9.9.9-9" -,"homepage":"http://www.youtube.com/watch?v=1MLry6Cn_D4" -,"private":"true"} diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-test-package/package.json b/vendor/npm/npm-1.0.8/test/packages/npm-test-test-package/package.json deleted file mode 100644 index c5c5aeabc..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-test-package/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-test-package" -, "author" : "Testy McMock" -, "version" : "1.2.3-99-b" -, "description" : "This is a test package used for debugging. It has some random data and that's all." -} diff --git a/vendor/npm/npm-1.0.8/test/packages/npm-test-url-dep/package.json b/vendor/npm/npm-1.0.8/test/packages/npm-test-url-dep/package.json deleted file mode 100644 index b19a167c8..000000000 --- a/vendor/npm/npm-1.0.8/test/packages/npm-test-url-dep/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "name":"npm-test-url-dep" -, "version" : "1.2.3" -, "files" : [] -, "dependencies" : - { "express" : "*" - , "npm" : "https://github.com/isaacs/npm/tarball/master" } } diff --git a/vendor/npm/npm-1.0.8/test/run.sh b/vendor/npm/npm-1.0.8/test/run.sh deleted file mode 100755 index 9b4189acc..000000000 --- a/vendor/npm/npm-1.0.8/test/run.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash - -# the "npm" command is set to a custom function here so that we can -# test the code in this repo, rather than whichever version of npm -# happens to be installed. - -main () { - # setup - FAILURES=0 - - cd "$TESTDIR" - - npm config ls - - # install - npm install "$NPMPKG" || exit 1 - - # used in test later - npm config set package-config:foo boo || exit 1 - - npm install $( ls packages | awk '{print "packages/" $1 }' ) || exit 1 - (ls packages | while read pkg; do - npm test "$pkg" - done) || exit 1 - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - if ! [ "$npm_package_config_publishtest" == "true" ]; then - echo_err "To test publishing: npm config set npm:publishtest true" - else - # attempt to publish and unpublish each of them. - npm install "$NPMPKG" || exit 1 - - (ls packages | grep -v 'npm-test-private' | while read pkg; do - npm publish packages/$pkg || exit 1 - npm install $pkg || exit 1 - npm unpublish $pkg || exit 1 - done) || exit 1 - - # verify that the private package can't be published - # bypass the test-harness npm function. - "$NPMCLI" publish packages/npm-test-private && ( - npm unpublish npm-test-private - exit 1000 - ) - if [ $? -eq 1000 ]; then - fail "Private package shouldn't be publishable" >&2 - fi - - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - fi - - if [ $FAILURES -eq 0 ]; then - echo_err "ok" - rm -rf $TMP - else - echo_err "FAILED: $FAILURES" - fi - exit $FAILURES -} - - - -#################### -# Test Harness below - -# fake functions -npm () { - echo -e "npm $@" - "$NPMCLI" "$@" \ - || fail npm "$@" -} - -# get the absolute path of the executable -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")" -NPMCLI="$NPMPKG/cli.js" -TESTDIR="$NPMPKG/test/" -TMP=${TMPDIR:-/tmp} -rm -rf $TMP/npm* -TMP=$TMP/npm-test-$$ -echo "Testing in $TMP ..." -ROOTDIR="$TMP/root" - -cleanup () { - if [ "$FAILURES" != "0" ] && [ "$FAILURES" != "" ]; then - return - fi - [ -d "$ROOTDIR" ] && rm -rf -- "$ROOTDIR" - mkdir -p -- "$ROOTDIR" -} - -export npm_config_prefix="$ROOTDIR" -export npm_config_color="always" -export npm_config_global=true -# have to set this to false, or it'll try to test itself forever -export npm_config_npat=false -export PATH="$PATH":"$ROOTDIR/bin":"$ROOTDIR/node_modules/.bin" -export NODE_PATH="$ROOTDIR/node_modules" - -echo_err () { - echo "$@" >&2 -} -fail () { - let 'FAILURES += 1' - echo_err "" - echo_err -e "\033[33mFailure: $@\033[m" - exit 1 -} - -cleanup -main diff --git a/vendor/npm/npm-1.0.8/test/update-test.sh b/vendor/npm/npm-1.0.8/test/update-test.sh deleted file mode 100755 index f72c90dd9..000000000 --- a/vendor/npm/npm-1.0.8/test/update-test.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") - -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -DIR=$( dirname -- "$SELF_PATH" ) - -export npm_config_root=$DIR/root -export npm_config_binroot=$DIR/bin - -rm -rf $DIR/{root,bin} -mkdir -p $DIR/root -mkdir -p $DIR/bin -npm ls installed 2>/dev/null | grep -v npm | awk '{print $1}' | xargs npm rm &>/dev/null -npm install \ - base64@1.0.0 \ - eyes@0.1.1 \ - vows@0.2.5 \ - websocket-server@1.0.5 &>/dev/null -npm install ./test/packages/blerg &>/dev/null -npm install vows@0.3.0 &>/dev/null - -echo "" -echo "##" -echo "## starting update" -echo "##" -echo "" - -npm update - -echo "" -echo "##" -echo "## update done, all should be 'latest'" -echo "##" -echo "" - -list=$( npm ls installed remote 2>/dev/null ) -echo "$list" -notlatest=$( echo "$list" | grep -v latest ) -if [ "$notlatest" != "" ]; then - echo "Failed: not latest" - echo $notlatest -else - echo "ok" -fi diff --git a/vendor/scons/scons-1.2.0/scons b/vendor/scons/scons-1.2.0/scons deleted file mode 120000 index e0aff1102..000000000 --- a/vendor/scons/scons-1.2.0/scons +++ /dev/null @@ -1 +0,0 @@ -scons.py \ No newline at end of file diff --git a/vendor/scons/scons-1.2.0/scons-LICENSE b/vendor/scons/scons-1.2.0/scons-LICENSE deleted file mode 100644 index 804ed8682..000000000 --- a/vendor/scons/scons-1.2.0/scons-LICENSE +++ /dev/null @@ -1,25 +0,0 @@ - Copyright and license for SCons - a software construction tool - - This copyright and license do not apply to any other software - with which this software may have been included. - -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/scons/scons-1.2.0/scons-README b/vendor/scons/scons-1.2.0/scons-README deleted file mode 100644 index 298a22168..000000000 --- a/vendor/scons/scons-1.2.0/scons-README +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation - - SCons - a software construction tool - -This is the scons-README file for a version of SCons packaged for local -execution--that is, execution out of a specific local directory, without -having to install SCons as a system-wide utility. - -You are likely reading this file in one of the following two situations: - - 1) You have unpacked an scons-local-{version} package and are - examining the contents. - - In this case, you are presumably interested in using this - package to include a local copy of SCons with some other - software that you package, so that you can use SCons to build - your software without forcing all of your users to have it fully - installed. Instructions for this can be found below. - - If you are not looking to use SCons in this way, then please - use either the scons-{version} package to install SCons on your - system, or the scons-src-{version} package if you want the full - source to SCons, including its packaging code and underlying - tests and testing infrastructure. - - 2) This file was included in some other software package so that - the package could be built using SCons. - - In this case, follow the instructions provided with the - rest of the software package for how to use SCons to build - and/or install the software. The file containing build and - installation instructions will typically be named README or - INSTALL. - -LATEST VERSION -============== - -Before going further, you can check for the latest version of the -scons-local package, or any SCons package, at the SCons download page: - - http://www.scons.org/download.html - - -EXECUTION REQUIREMENTS -====================== - -Running SCons requires Python version 1.5.2 or later. There should be -no other dependencies or requirements to run SCons. - -The default SCons configuration assumes use of the Microsoft Visual C++ -compiler suite on WIN32 systems, and assumes a C compiler named 'cc', -a C++ compiler named 'c++', and a Fortran compiler named 'g77' (such -as found in the GNU C compiler suite) on any other type of system. -You may, of course, override these default values by appropriate -configuration of Environment construction variables. - - -INSTALLATION -============ - -Installation of this package should be as simple as unpacking the -archive (either .tar.gz or .zip) in any directory (top-level or a -subdirectory) within the software package with which you want to ship -SCons. - -Once you have installed this package, you should write an SConstruct -file at the top level of your source tree to build your software as you -see fit. - -Then modify the build/install instructions for your package to instruct -your users to execute SCons as follows (if you installed this package in -your top-level directory): - - $ python scons.py - -Or (if, for example, you installed this package in a subdirectory named -"scons"): - - $ python scons/scons.py - -That should be all you have to do. (If it isn't that simple, please let -us know!) - - -CONTENTS OF THIS PACKAGE -======================== - -This scons-local package consists of the following: - -scons-LICENSE - A copy of the copyright and terms under which SCons is - distributed (the Open Source Initiative-approved MIT license). - - A disclaimer has been added to the beginning to make clear that - this license applies only to SCons, and not to any separate - software you've written with which you're planning to package - SCons. - -scons-README - What you're looking at right now. - -scons-local-{version}/ - The SCons build engine. This is structured as a Python - library. - -scons.py - The SCons script itself. The script sets up the Python - sys.path variable to use the build engine found in the - scons-local-{version}/ directory in preference to any other - SCons build engine installed on your system. - - -DOCUMENTATION -============= - -Because this package is intended to be included with other software by -experienced users, we have not included any SCons documentation in this -package (other than this scons-README file you're reading right now). - -If, however, you need documentation about SCons, then consult any of the -following from the corresponding scons-{version} or scons-src-{version} -package: - - The RELEASE.txt file (src/RELEASE.txt file in the - scons-src-{version} package), which contains notes about this - specific release, including known problems. - - The CHANGES.txt file (src/CHANGES.txt file in the - scons-src-{version} package), which contains a list of changes - since the previous release. - - The scons.1 man page (doc/man/scons.1 in the scons-src-{version} - package), which contains a section of small examples for getting - started using SCons. - -Additional documentation for SCons is available at: - - http://www.scons.org/doc.html - - -LICENSING -========= - -SCons is distributed under the MIT license, a full copy of which is -available in the scons-LICENSE file in this package. The MIT license is -an approved Open Source license, which means: - - This software is OSI Certified Open Source Software. OSI - Certified is a certification mark of the Open Source Initiative. - -More information about OSI certifications and Open Source software is -available at: - - http://www.opensource.org/ - - -REPORTING BUGS -============== - -You can report bugs either by following the "Tracker - Bugs" link -on the SCons project page: - - http://sourceforge.net/projects/scons/ - -or by sending mail to the SCons developers mailing list: - - scons-devel@lists.sourceforge.net - - -MAILING LISTS -============= - -A mailing list for users of SCons is available. You may send questions -or comments to the list at: - - scons-users@lists.sourceforge.net - -You may subscribe to the scons-users mailing list at: - - http://lists.sourceforge.net/lists/listinfo/scons-users - - -FOR MORE INFORMATION -==================== - -Check the SCons web site at: - - http://www.scons.org/ - - -AUTHOR INFO -=========== - -Steven Knight -knight at baldmt dot com -http://www.baldmt.com/~knight/ - -With plenty of help from the SCons Development team: - Chad Austin - Charles Crain - Steve Leblanc - Anthony Roach - Terrel Shumway - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.py deleted file mode 100644 index d740de66d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.py +++ /dev/null @@ -1,1147 +0,0 @@ -"""SCons.Action - -This encapsulates information about executing any sort of action that -can build one or more target Nodes (typically files) from one or more -source Nodes (also typically files) given a specific Environment. - -The base class here is ActionBase. The base class supplies just a few -OO utility methods and some generic methods for displaying information -about an Action in response to the various commands that control printing. - -A second-level base class is _ActionAction. This extends ActionBase -by providing the methods that can be used to show and perform an -action. True Action objects will subclass _ActionAction; Action -factory class objects will subclass ActionBase. - -The heavy lifting is handled by subclasses for the different types of -actions we might execute: - - CommandAction - CommandGeneratorAction - FunctionAction - ListAction - -The subclasses supply the following public interface methods used by -other modules: - - __call__() - THE public interface, "calling" an Action object executes the - command or Python function. This also takes care of printing - a pre-substitution command for debugging purposes. - - get_contents() - Fetches the "contents" of an Action for signature calculation - plus the varlist. This is what gets MD5 checksummed to decide - if a target needs to be rebuilt because its action changed. - - genstring() - Returns a string representation of the Action *without* - command substitution, but allows a CommandGeneratorAction to - generate the right action based on the specified target, - source and env. This is used by the Signature subsystem - (through the Executor) to obtain an (imprecise) representation - of the Action operation for informative purposes. - - -Subclasses also supply the following methods for internal use within -this module: - - __str__() - Returns a string approximation of the Action; no variable - substitution is performed. - - execute() - The internal method that really, truly, actually handles the - execution of a command or Python function. This is used so - that the __call__() methods can take care of displaying any - pre-substitution representations, and *then* execute an action - without worrying about the specific Actions involved. - - get_presig() - Fetches the "contents" of a subclass for signature calculation. - The varlist is added to this to produce the Action's contents. - - strfunction() - Returns a substituted string representation of the Action. - This is used by the _ActionAction.show() command to display the - command/function that will be executed to generate the target(s). - -There is a related independent ActionCaller class that looks like a -regular Action, and which serves as a wrapper for arbitrary functions -that we want to let the user specify the arguments to now, but actually -execute later (when an out-of-date check determines that it's needed to -be executed, for example). Objects of this class are returned by an -ActionFactory class that provides a __call__() method as a convenient -way for wrapping up the functions. - -""" - -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -__revision__ = "src/engine/SCons/Action.py 3842 2008/12/20 22:59:52 scons" - -import cPickle -import dis -import os -import string -import sys -import subprocess - -from SCons.Debug import logInstanceCreation -import SCons.Errors -import SCons.Executor -import SCons.Util -import SCons.Subst - -# we use these a lot, so try to optimize them -is_String = SCons.Util.is_String -is_List = SCons.Util.is_List - -class _null: - pass - -print_actions = 1 -execute_actions = 1 -print_actions_presub = 0 - -def rfile(n): - try: - return n.rfile() - except AttributeError: - return n - -def default_exitstatfunc(s): - return s - -try: - SET_LINENO = dis.SET_LINENO - HAVE_ARGUMENT = dis.HAVE_ARGUMENT -except AttributeError: - remove_set_lineno_codes = lambda x: x -else: - def remove_set_lineno_codes(code): - result = [] - n = len(code) - i = 0 - while i < n: - c = code[i] - op = ord(c) - if op >= HAVE_ARGUMENT: - if op != SET_LINENO: - result.append(code[i:i+3]) - i = i+3 - else: - result.append(c) - i = i+1 - return string.join(result, '') - - -def _callable_contents(obj): - """Return the signature contents of a callable Python object. - """ - try: - # Test if obj is a method. - return _function_contents(obj.im_func) - - except AttributeError: - try: - # Test if obj is a callable object. - return _function_contents(obj.__call__.im_func) - - except AttributeError: - try: - # Test if obj is a code object. - return _code_contents(obj) - - except AttributeError: - # Test if obj is a function object. - return _function_contents(obj) - - -def _object_contents(obj): - """Return the signature contents of any Python object. - - We have to handle the case where object contains a code object - since it can be pickled directly. - """ - try: - # Test if obj is a method. - return _function_contents(obj.im_func) - - except AttributeError: - try: - # Test if obj is a callable object. - return _function_contents(obj.__call__.im_func) - - except AttributeError: - try: - # Test if obj is a code object. - return _code_contents(obj) - - except AttributeError: - try: - # Test if obj is a function object. - return _function_contents(obj) - - except AttributeError: - # Should be a pickable Python object. - try: - return cPickle.dumps(obj) - except (cPickle.PicklingError, TypeError): - # This is weird, but it seems that nested classes - # are unpickable. The Python docs say it should - # always be a PicklingError, but some Python - # versions seem to return TypeError. Just do - # the best we can. - return str(obj) - - -def _code_contents(code): - """Return the signature contents of a code object. - - By providing direct access to the code object of the - function, Python makes this extremely easy. Hooray! - - Unfortunately, older versions of Python include line - number indications in the compiled byte code. Boo! - So we remove the line number byte codes to prevent - recompilations from moving a Python function. - """ - - contents = [] - - # The code contents depends on the number of local variables - # but not their actual names. - contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames))) - try: - contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars))) - except AttributeError: - # Older versions of Python do not support closures. - contents.append(",0,0") - - # The code contents depends on any constants accessed by the - # function. Note that we have to call _object_contents on each - # constants because the code object of nested functions can - # show-up among the constants. - # - # Note that we also always ignore the first entry of co_consts - # which contains the function doc string. We assume that the - # function does not access its doc string. - contents.append(',(' + string.join(map(_object_contents,code.co_consts[1:]),',') + ')') - - # The code contents depends on the variable names used to - # accessed global variable, as changing the variable name changes - # the variable actually accessed and therefore changes the - # function result. - contents.append(',(' + string.join(map(_object_contents,code.co_names),',') + ')') - - - # The code contents depends on its actual code!!! - contents.append(',(' + str(remove_set_lineno_codes(code.co_code)) + ')') - - return string.join(contents, '') - - -def _function_contents(func): - """Return the signature contents of a function.""" - - contents = [_code_contents(func.func_code)] - - # The function contents depends on the value of defaults arguments - if func.func_defaults: - contents.append(',(' + string.join(map(_object_contents,func.func_defaults),',') + ')') - else: - contents.append(',()') - - # The function contents depends on the closure captured cell values. - try: - closure = func.func_closure or [] - except AttributeError: - # Older versions of Python do not support closures. - closure = [] - - #xxx = [_object_contents(x.cell_contents) for x in closure] - try: - xxx = map(lambda x: _object_contents(x.cell_contents), closure) - except AttributeError: - xxx = [] - contents.append(',(' + string.join(xxx, ',') + ')') - - return string.join(contents, '') - - -def _actionAppend(act1, act2): - # This function knows how to slap two actions together. - # Mainly, it handles ListActions by concatenating into - # a single ListAction. - a1 = Action(act1) - a2 = Action(act2) - if a1 is None or a2 is None: - raise TypeError, "Cannot append %s to %s" % (type(act1), type(act2)) - if isinstance(a1, ListAction): - if isinstance(a2, ListAction): - return ListAction(a1.list + a2.list) - else: - return ListAction(a1.list + [ a2 ]) - else: - if isinstance(a2, ListAction): - return ListAction([ a1 ] + a2.list) - else: - return ListAction([ a1, a2 ]) - -def _do_create_keywords(args, kw): - """This converts any arguments after the action argument into - their equivalent keywords and adds them to the kw argument. - """ - v = kw.get('varlist', ()) - # prevent varlist="FOO" from being interpreted as ['F', 'O', 'O'] - if is_String(v): v = (v,) - kw['varlist'] = tuple(v) - if args: - # turn positional args into equivalent keywords - cmdstrfunc = args[0] - if cmdstrfunc is None or is_String(cmdstrfunc): - kw['cmdstr'] = cmdstrfunc - elif callable(cmdstrfunc): - kw['strfunction'] = cmdstrfunc - else: - raise SCons.Errors.UserError( - 'Invalid command display variable type. ' - 'You must either pass a string or a callback which ' - 'accepts (target, source, env) as parameters.') - if len(args) > 1: - kw['varlist'] = args[1:] + kw['varlist'] - if kw.get('strfunction', _null) is not _null \ - and kw.get('cmdstr', _null) is not _null: - raise SCons.Errors.UserError( - 'Cannot have both strfunction and cmdstr args to Action()') - -def _do_create_action(act, kw): - """This is the actual "implementation" for the - Action factory method, below. This handles the - fact that passing lists to Action() itself has - different semantics than passing lists as elements - of lists. - - The former will create a ListAction, the latter - will create a CommandAction by converting the inner - list elements to strings.""" - - if isinstance(act, ActionBase): - return act - - if is_List(act): - #TODO(1.5) return CommandAction(act, **kw) - return apply(CommandAction, (act,), kw) - - if callable(act): - try: - gen = kw['generator'] - del kw['generator'] - except KeyError: - gen = 0 - if gen: - action_type = CommandGeneratorAction - else: - action_type = FunctionAction - return action_type(act, kw) - - if is_String(act): - var=SCons.Util.get_environment_var(act) - if var: - # This looks like a string that is purely an Environment - # variable reference, like "$FOO" or "${FOO}". We do - # something special here...we lazily evaluate the contents - # of that Environment variable, so a user could put something - # like a function or a CommandGenerator in that variable - # instead of a string. - return LazyAction(var, kw) - commands = string.split(str(act), '\n') - if len(commands) == 1: - #TODO(1.5) return CommandAction(commands[0], **kw) - return apply(CommandAction, (commands[0],), kw) - # The list of string commands may include a LazyAction, so we - # reprocess them via _do_create_list_action. - return _do_create_list_action(commands, kw) - return None - -def _do_create_list_action(act, kw): - """A factory for list actions. Convert the input list into Actions - and then wrap them in a ListAction.""" - acts = [] - for a in act: - aa = _do_create_action(a, kw) - if aa is not None: acts.append(aa) - if not acts: - return None - elif len(acts) == 1: - return acts[0] - else: - return ListAction(acts) - -def Action(act, *args, **kw): - """A factory for action objects.""" - # Really simple: the _do_create_* routines do the heavy lifting. - _do_create_keywords(args, kw) - if is_List(act): - return _do_create_list_action(act, kw) - return _do_create_action(act, kw) - -class ActionBase: - """Base class for all types of action objects that can be held by - other objects (Builders, Executors, etc.) This provides the - common methods for manipulating and combining those actions.""" - - def __cmp__(self, other): - return cmp(self.__dict__, other) - - def genstring(self, target, source, env): - return str(self) - - def get_contents(self, target, source, env): - result = [ self.get_presig(target, source, env) ] - # This should never happen, as the Action() factory should wrap - # the varlist, but just in case an action is created directly, - # we duplicate this check here. - vl = self.varlist - if is_String(vl): vl = (vl,) - for v in vl: - result.append(env.subst('${'+v+'}')) - return string.join(result, '') - - def __add__(self, other): - return _actionAppend(self, other) - - def __radd__(self, other): - return _actionAppend(other, self) - - def presub_lines(self, env): - # CommandGeneratorAction needs a real environment - # in order to return the proper string here, since - # it may call LazyAction, which looks up a key - # in that env. So we temporarily remember the env here, - # and CommandGeneratorAction will use this env - # when it calls its _generate method. - self.presub_env = env - lines = string.split(str(self), '\n') - self.presub_env = None # don't need this any more - return lines - - def get_executor(self, env, overrides, tlist, slist, executor_kw): - """Return the Executor for this Action.""" - return SCons.Executor.Executor(self, env, overrides, - tlist, slist, executor_kw) - -class _ActionAction(ActionBase): - """Base class for actions that create output objects.""" - def __init__(self, cmdstr=_null, strfunction=_null, varlist=(), - presub=_null, chdir=None, exitstatfunc=None, - **kw): - self.cmdstr = cmdstr - if strfunction is not _null: - if strfunction is None: - self.cmdstr = None - else: - self.strfunction = strfunction - self.varlist = varlist - self.presub = presub - self.chdir = chdir - if not exitstatfunc: - exitstatfunc = default_exitstatfunc - self.exitstatfunc = exitstatfunc - - def print_cmd_line(self, s, target, source, env): - sys.stdout.write(s + "\n") - - def __call__(self, target, source, env, - exitstatfunc=_null, - presub=_null, - show=_null, - execute=_null, - chdir=_null): - if not is_List(target): - target = [target] - if not is_List(source): - source = [source] - - if presub is _null: - presub = self.presub - if presub is _null: - presub = print_actions_presub - if exitstatfunc is _null: exitstatfunc = self.exitstatfunc - if show is _null: show = print_actions - if execute is _null: execute = execute_actions - if chdir is _null: chdir = self.chdir - save_cwd = None - if chdir: - save_cwd = os.getcwd() - try: - chdir = str(chdir.abspath) - except AttributeError: - if not is_String(chdir): - chdir = str(target[0].dir) - if presub: - t = string.join(map(str, target), ' and ') - l = string.join(self.presub_lines(env), '\n ') - out = "Building %s with action:\n %s\n" % (t, l) - sys.stdout.write(out) - cmd = None - if show and self.strfunction: - cmd = self.strfunction(target, source, env) - if cmd: - if chdir: - cmd = ('os.chdir(%s)\n' % repr(chdir)) + cmd - try: - get = env.get - except AttributeError: - print_func = self.print_cmd_line - else: - print_func = get('PRINT_CMD_LINE_FUNC') - if not print_func: - print_func = self.print_cmd_line - print_func(cmd, target, source, env) - stat = 0 - if execute: - if chdir: - os.chdir(chdir) - try: - stat = self.execute(target, source, env) - if isinstance(stat, SCons.Errors.BuildError): - s = exitstatfunc(stat.status) - if s: - stat.status = s - else: - stat = s - else: - stat = exitstatfunc(stat) - finally: - if save_cwd: - os.chdir(save_cwd) - if cmd and save_cwd: - print_func('os.chdir(%s)' % repr(save_cwd), target, source, env) - - return stat - - -def _string_from_cmd_list(cmd_list): - """Takes a list of command line arguments and returns a pretty - representation for printing.""" - cl = [] - for arg in map(str, cmd_list): - if ' ' in arg or '\t' in arg: - arg = '"' + arg + '"' - cl.append(arg) - return string.join(cl) - -# A fiddlin' little function that has an 'import SCons.Environment' which -# can't be moved to the top level without creating an import loop. Since -# this import creates a local variable named 'SCons', it blocks access to -# the global variable, so we move it here to prevent complaints about local -# variables being used uninitialized. -default_ENV = None -def get_default_ENV(env): - global default_ENV - try: - return env['ENV'] - except KeyError: - if not default_ENV: - import SCons.Environment - # This is a hideously expensive way to get a default shell - # environment. What it really should do is run the platform - # setup to get the default ENV. Fortunately, it's incredibly - # rare for an Environment not to have a shell environment, so - # we're not going to worry about it overmuch. - default_ENV = SCons.Environment.Environment()['ENV'] - return default_ENV - -# This function is still in draft mode. We're going to need something like -# it in the long run as more and more places use subprocess, but I'm sure -# it'll have to be tweaked to get the full desired functionality. -# one special arg (so far?), 'error', to tell what to do with exceptions. -def _subproc(env, cmd, error = 'ignore', **kw): - """Do common setup for a subprocess.Popen() call""" - # allow std{in,out,err} to be "'devnull'" - io = kw.get('stdin') - if is_String(io) and io == 'devnull': - kw['stdin'] = open(os.devnull) - io = kw.get('stdout') - if is_String(io) and io == 'devnull': - kw['stdout'] = open(os.devnull, 'w') - io = kw.get('stderr') - if is_String(io) and io == 'devnull': - kw['stderr'] = open(os.devnull, 'w') - - # Figure out what shell environment to use - ENV = kw.get('env', None) - if ENV is None: ENV = get_default_ENV(env) - - # Ensure that the ENV values are all strings: - new_env = {} - for key, value in ENV.items(): - if is_List(value): - # If the value is a list, then we assume it is a path list, - # because that's a pretty common list-like value to stick - # in an environment variable: - value = SCons.Util.flatten_sequence(value) - new_env[key] = string.join(map(str, value), os.pathsep) - else: - # It's either a string or something else. If it's a string, - # we still want to call str() because it might be a *Unicode* - # string, which makes subprocess.Popen() gag. If it isn't a - # string or a list, then we just coerce it to a string, which - # is the proper way to handle Dir and File instances and will - # produce something reasonable for just about everything else: - new_env[key] = str(value) - kw['env'] = new_env - - try: - #FUTURE return subprocess.Popen(cmd, **kw) - return apply(subprocess.Popen, (cmd,), kw) - except EnvironmentError, e: - if error == 'raise': raise - # return a dummy Popen instance that only returns error - class dummyPopen: - def __init__(self, e): self.exception = e - def communicate(self): return ('','') - def wait(self): return -self.exception.errno - stdin = None - class f: - def read(self): return '' - def readline(self): return '' - stdout = stderr = f() - return dummyPopen(e) - -class CommandAction(_ActionAction): - """Class for command-execution actions.""" - def __init__(self, cmd, **kw): - # Cmd can actually be a list or a single item; if it's a - # single item it should be the command string to execute; if a - # list then it should be the words of the command string to - # execute. Only a single command should be executed by this - # object; lists of commands should be handled by embedding - # these objects in a ListAction object (which the Action() - # factory above does). cmd will be passed to - # Environment.subst_list() for substituting environment - # variables. - if __debug__: logInstanceCreation(self, 'Action.CommandAction') - - #TODO(1.5) _ActionAction.__init__(self, **kw) - apply(_ActionAction.__init__, (self,), kw) - if is_List(cmd): - if filter(is_List, cmd): - raise TypeError, "CommandAction should be given only " \ - "a single command" - self.cmd_list = cmd - - def __str__(self): - if is_List(self.cmd_list): - return string.join(map(str, self.cmd_list), ' ') - return str(self.cmd_list) - - def process(self, target, source, env): - result = env.subst_list(self.cmd_list, 0, target, source) - silent = None - ignore = None - while 1: - try: c = result[0][0][0] - except IndexError: c = None - if c == '@': silent = 1 - elif c == '-': ignore = 1 - else: break - result[0][0] = result[0][0][1:] - try: - if not result[0][0]: - result[0] = result[0][1:] - except IndexError: - pass - return result, ignore, silent - - def strfunction(self, target, source, env): - if self.cmdstr is None: - return None - if self.cmdstr is not _null: - from SCons.Subst import SUBST_RAW - c = env.subst(self.cmdstr, SUBST_RAW, target, source) - if c: - return c - cmd_list, ignore, silent = self.process(target, source, env) - if silent: - return '' - return _string_from_cmd_list(cmd_list[0]) - - def execute(self, target, source, env): - """Execute a command action. - - This will handle lists of commands as well as individual commands, - because construction variable substitution may turn a single - "command" into a list. This means that this class can actually - handle lists of commands, even though that's not how we use it - externally. - """ - escape_list = SCons.Subst.escape_list - flatten_sequence = SCons.Util.flatten_sequence - - try: - shell = env['SHELL'] - except KeyError: - raise SCons.Errors.UserError('Missing SHELL construction variable.') - - try: - spawn = env['SPAWN'] - except KeyError: - raise SCons.Errors.UserError('Missing SPAWN construction variable.') - else: - if is_String(spawn): - spawn = env.subst(spawn, raw=1, conv=lambda x: x) - - escape = env.get('ESCAPE', lambda x: x) - - ENV = get_default_ENV(env) - - # Ensure that the ENV values are all strings: - for key, value in ENV.items(): - if not is_String(value): - if is_List(value): - # If the value is a list, then we assume it is a - # path list, because that's a pretty common list-like - # value to stick in an environment variable: - value = flatten_sequence(value) - ENV[key] = string.join(map(str, value), os.pathsep) - else: - # If it isn't a string or a list, then we just coerce - # it to a string, which is the proper way to handle - # Dir and File instances and will produce something - # reasonable for just about everything else: - ENV[key] = str(value) - - cmd_list, ignore, silent = self.process(target, map(rfile, source), env) - - # Use len() to filter out any "command" that's zero-length. - for cmd_line in filter(len, cmd_list): - # Escape the command line for the interpreter we are using. - cmd_line = escape_list(cmd_line, escape) - result = spawn(shell, escape, cmd_line[0], cmd_line, ENV) - if not ignore and result: - msg = "Error %s" % result - return SCons.Errors.BuildError(errstr=msg, - status=result, - action=self, - command=cmd_line) - return 0 - - def get_presig(self, target, source, env): - """Return the signature contents of this action's command line. - - This strips $(-$) and everything in between the string, - since those parts don't affect signatures. - """ - from SCons.Subst import SUBST_SIG - cmd = self.cmd_list - if is_List(cmd): - cmd = string.join(map(str, cmd)) - else: - cmd = str(cmd) - return env.subst_target_source(cmd, SUBST_SIG, target, source) - - def get_implicit_deps(self, target, source, env): - icd = env.get('IMPLICIT_COMMAND_DEPENDENCIES', True) - if is_String(icd) and icd[:1] == '$': - icd = env.subst(icd) - if not icd or icd in ('0', 'None'): - return [] - from SCons.Subst import SUBST_SIG - cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, target, source) - res = [] - for cmd_line in cmd_list: - if cmd_line: - d = env.WhereIs(str(cmd_line[0])) - if d: - res.append(env.fs.File(d)) - return res - -class CommandGeneratorAction(ActionBase): - """Class for command-generator actions.""" - def __init__(self, generator, kw): - if __debug__: logInstanceCreation(self, 'Action.CommandGeneratorAction') - self.generator = generator - self.gen_kw = kw - self.varlist = kw.get('varlist', ()) - - def _generate(self, target, source, env, for_signature): - # ensure that target is a list, to make it easier to write - # generator functions: - if not is_List(target): - target = [target] - - ret = self.generator(target=target, source=source, env=env, for_signature=for_signature) - #TODO(1.5) gen_cmd = Action(ret, **self.gen_kw) - gen_cmd = apply(Action, (ret,), self.gen_kw) - if not gen_cmd: - raise SCons.Errors.UserError("Object returned from command generator: %s cannot be used to create an Action." % repr(ret)) - return gen_cmd - - def __str__(self): - try: - env = self.presub_env - except AttributeError: - env = None - if env is None: - env = SCons.Defaults.DefaultEnvironment() - act = self._generate([], [], env, 1) - return str(act) - - def genstring(self, target, source, env): - return self._generate(target, source, env, 1).genstring(target, source, env) - - def __call__(self, target, source, env, exitstatfunc=_null, presub=_null, - show=_null, execute=_null, chdir=_null): - act = self._generate(target, source, env, 0) - return act(target, source, env, exitstatfunc, presub, - show, execute, chdir) - - def get_presig(self, target, source, env): - """Return the signature contents of this action's command line. - - This strips $(-$) and everything in between the string, - since those parts don't affect signatures. - """ - return self._generate(target, source, env, 1).get_presig(target, source, env) - - def get_implicit_deps(self, target, source, env): - return self._generate(target, source, env, 1).get_implicit_deps(target, source, env) - - - -# A LazyAction is a kind of hybrid generator and command action for -# strings of the form "$VAR". These strings normally expand to other -# strings (think "$CCCOM" to "$CC -c -o $TARGET $SOURCE"), but we also -# want to be able to replace them with functions in the construction -# environment. Consequently, we want lazy evaluation and creation of -# an Action in the case of the function, but that's overkill in the more -# normal case of expansion to other strings. -# -# So we do this with a subclass that's both a generator *and* -# a command action. The overridden methods all do a quick check -# of the construction variable, and if it's a string we just call -# the corresponding CommandAction method to do the heavy lifting. -# If not, then we call the same-named CommandGeneratorAction method. -# The CommandGeneratorAction methods work by using the overridden -# _generate() method, that is, our own way of handling "generation" of -# an action based on what's in the construction variable. - -class LazyAction(CommandGeneratorAction, CommandAction): - - def __init__(self, var, kw): - if __debug__: logInstanceCreation(self, 'Action.LazyAction') - #FUTURE CommandAction.__init__(self, '${'+var+'}', **kw) - apply(CommandAction.__init__, (self, '${'+var+'}'), kw) - self.var = SCons.Util.to_String(var) - self.gen_kw = kw - - def get_parent_class(self, env): - c = env.get(self.var) - if is_String(c) and not '\n' in c: - return CommandAction - return CommandGeneratorAction - - def _generate_cache(self, env): - c = env.get(self.var, '') - #TODO(1.5) gen_cmd = Action(c, **self.gen_kw) - gen_cmd = apply(Action, (c,), self.gen_kw) - if not gen_cmd: - raise SCons.Errors.UserError("$%s value %s cannot be used to create an Action." % (self.var, repr(c))) - return gen_cmd - - def _generate(self, target, source, env, for_signature): - return self._generate_cache(env) - - def __call__(self, target, source, env, *args, **kw): - args = (self, target, source, env) + args - c = self.get_parent_class(env) - #TODO(1.5) return c.__call__(*args, **kw) - return apply(c.__call__, args, kw) - - def get_presig(self, target, source, env): - c = self.get_parent_class(env) - return c.get_presig(self, target, source, env) - - - -class FunctionAction(_ActionAction): - """Class for Python function actions.""" - - def __init__(self, execfunction, kw): - if __debug__: logInstanceCreation(self, 'Action.FunctionAction') - - self.execfunction = execfunction - try: - self.funccontents = _callable_contents(execfunction) - except AttributeError: - try: - # See if execfunction will do the heavy lifting for us. - self.gc = execfunction.get_contents - except AttributeError: - # This is weird, just do the best we can. - self.funccontents = _object_contents(execfunction) - - #TODO(1.5) _ActionAction.__init__(self, **kw) - apply(_ActionAction.__init__, (self,), kw) - - def function_name(self): - try: - return self.execfunction.__name__ - except AttributeError: - try: - return self.execfunction.__class__.__name__ - except AttributeError: - return "unknown_python_function" - - def strfunction(self, target, source, env): - if self.cmdstr is None: - return None - if self.cmdstr is not _null: - from SCons.Subst import SUBST_RAW - c = env.subst(self.cmdstr, SUBST_RAW, target, source) - if c: - return c - def array(a): - def quote(s): - try: - str_for_display = s.str_for_display - except AttributeError: - s = repr(s) - else: - s = str_for_display() - return s - return '[' + string.join(map(quote, a), ", ") + ']' - try: - strfunc = self.execfunction.strfunction - except AttributeError: - pass - else: - if strfunc is None: - return None - if callable(strfunc): - return strfunc(target, source, env) - name = self.function_name() - tstr = array(target) - sstr = array(source) - return "%s(%s, %s)" % (name, tstr, sstr) - - def __str__(self): - name = self.function_name() - if name == 'ActionCaller': - return str(self.execfunction) - return "%s(target, source, env)" % name - - def execute(self, target, source, env): - exc_info = (None,None,None) - try: - rsources = map(rfile, source) - try: - result = self.execfunction(target=target, source=rsources, env=env) - except KeyboardInterrupt, e: - raise - except SystemExit, e: - raise - except Exception, e: - result = e - exc_info = sys.exc_info() - - if result: - result = SCons.Errors.convert_to_BuildError(result, exc_info) - result.node=target - result.action=self - result.command=self.strfunction(target, source, env) - - # FIXME: This maintains backward compatibility with respect to - # which type of exceptions were returned by raising an - # exception and which ones were returned by value. It would - # probably be best to always return them by value here, but - # some codes do not check the return value of Actions and I do - # not have the time to modify them at this point. - if (exc_info[1] and - not isinstance(exc_info[1],EnvironmentError)): - raise result - - return result - finally: - # Break the cycle between the traceback object and this - # function stack frame. See the sys.exc_info() doc info for - # more information about this issue. - del exc_info - - - def get_presig(self, target, source, env): - """Return the signature contents of this callable action.""" - try: - return self.gc(target, source, env) - except AttributeError: - return self.funccontents - - def get_implicit_deps(self, target, source, env): - return [] - -class ListAction(ActionBase): - """Class for lists of other actions.""" - def __init__(self, list): - if __debug__: logInstanceCreation(self, 'Action.ListAction') - def list_of_actions(x): - if isinstance(x, ActionBase): - return x - return Action(x) - self.list = map(list_of_actions, list) - # our children will have had any varlist - # applied; we don't need to do it again - self.varlist = () - - def genstring(self, target, source, env): - return string.join(map(lambda a, t=target, s=source, e=env: - a.genstring(t, s, e), - self.list), - '\n') - - def __str__(self): - return string.join(map(str, self.list), '\n') - - def presub_lines(self, env): - return SCons.Util.flatten_sequence( - map(lambda a, env=env: a.presub_lines(env), self.list)) - - def get_presig(self, target, source, env): - """Return the signature contents of this action list. - - Simple concatenation of the signatures of the elements. - """ - return string.join(map(lambda x, t=target, s=source, e=env: - x.get_contents(t, s, e), - self.list), - "") - - def __call__(self, target, source, env, exitstatfunc=_null, presub=_null, - show=_null, execute=_null, chdir=_null): - for act in self.list: - stat = act(target, source, env, exitstatfunc, presub, - show, execute, chdir) - if stat: - return stat - return 0 - - def get_implicit_deps(self, target, source, env): - result = [] - for act in self.list: - result.extend(act.get_implicit_deps(target, source, env)) - return result - -class ActionCaller: - """A class for delaying calling an Action function with specific - (positional and keyword) arguments until the Action is actually - executed. - - This class looks to the rest of the world like a normal Action object, - but what it's really doing is hanging on to the arguments until we - have a target, source and env to use for the expansion. - """ - def __init__(self, parent, args, kw): - self.parent = parent - self.args = args - self.kw = kw - - def get_contents(self, target, source, env): - actfunc = self.parent.actfunc - try: - # "self.actfunc" is a function. - contents = str(actfunc.func_code.co_code) - except AttributeError: - # "self.actfunc" is a callable object. - try: - contents = str(actfunc.__call__.im_func.func_code.co_code) - except AttributeError: - # No __call__() method, so it might be a builtin - # or something like that. Do the best we can. - contents = str(actfunc) - contents = remove_set_lineno_codes(contents) - return contents - - def subst(self, s, target, source, env): - # If s is a list, recursively apply subst() - # to every element in the list - if is_List(s): - result = [] - for elem in s: - result.append(self.subst(elem, target, source, env)) - return self.parent.convert(result) - - # Special-case hack: Let a custom function wrapped in an - # ActionCaller get at the environment through which the action - # was called by using this hard-coded value as a special return. - if s == '$__env__': - return env - elif is_String(s): - return env.subst(s, 1, target, source) - return self.parent.convert(s) - - def subst_args(self, target, source, env): - return map(lambda x, self=self, t=target, s=source, e=env: - self.subst(x, t, s, e), - self.args) - - def subst_kw(self, target, source, env): - kw = {} - for key in self.kw.keys(): - kw[key] = self.subst(self.kw[key], target, source, env) - return kw - - def __call__(self, target, source, env): - args = self.subst_args(target, source, env) - kw = self.subst_kw(target, source, env) - #TODO(1.5) return self.parent.actfunc(*args, **kw) - return apply(self.parent.actfunc, args, kw) - - def strfunction(self, target, source, env): - args = self.subst_args(target, source, env) - kw = self.subst_kw(target, source, env) - #TODO(1.5) return self.parent.strfunc(*args, **kw) - return apply(self.parent.strfunc, args, kw) - - def __str__(self): - #TODO(1.5) return self.parent.strfunc(*self.args, **self.kw) - return apply(self.parent.strfunc, self.args, self.kw) - -class ActionFactory: - """A factory class that will wrap up an arbitrary function - as an SCons-executable Action object. - - The real heavy lifting here is done by the ActionCaller class. - We just collect the (positional and keyword) arguments that we're - called with and give them to the ActionCaller object we create, - so it can hang onto them until it needs them. - """ - def __init__(self, actfunc, strfunc, convert=lambda x: x): - self.actfunc = actfunc - self.strfunc = strfunc - self.convert = convert - - def __call__(self, *args, **kw): - ac = ActionCaller(self, args, kw) - action = Action(ac, strfunction=ac.strfunction) - return action diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Action.pyc deleted file mode 100644 index 0aa80e5508e5d48bcfaeb10a1386f2ceb2dcf507..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39671 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.py deleted file mode 100644 index 97aabb483..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.py +++ /dev/null @@ -1,844 +0,0 @@ -"""SCons.Builder - -Builder object subsystem. - -A Builder object is a callable that encapsulates information about how -to execute actions to create a target Node (file) from source Nodes -(files), and how to create those dependencies for tracking. - -The main entry point here is the Builder() factory method. This provides -a procedural interface that creates the right underlying Builder object -based on the keyword arguments supplied and the types of the arguments. - -The goal is for this external interface to be simple enough that the -vast majority of users can create new Builders as necessary to support -building new types of files in their configurations, without having to -dive any deeper into this subsystem. - -The base class here is BuilderBase. This is a concrete base class which -does, in fact, represent the Builder objects that we (or users) create. - -There is also a proxy that looks like a Builder: - - CompositeBuilder - - This proxies for a Builder with an action that is actually a - dictionary that knows how to map file suffixes to a specific - action. This is so that we can invoke different actions - (compilers, compile options) for different flavors of source - files. - -Builders and their proxies have the following public interface methods -used by other modules: - - __call__() - THE public interface. Calling a Builder object (with the - use of internal helper methods) sets up the target and source - dependencies, appropriate mapping to a specific action, and the - environment manipulation necessary for overridden construction - variable. This also takes care of warning about possible mistakes - in keyword arguments. - - add_emitter() - Adds an emitter for a specific file suffix, used by some Tool - modules to specify that (for example) a yacc invocation on a .y - can create a .h *and* a .c file. - - add_action() - Adds an action for a specific file suffix, heavily used by - Tool modules to add their specific action(s) for turning - a source file into an object file to the global static - and shared object file Builders. - -There are the following methods for internal use within this module: - - _execute() - The internal method that handles the heavily lifting when a - Builder is called. This is used so that the __call__() methods - can set up warning about possible mistakes in keyword-argument - overrides, and *then* execute all of the steps necessary so that - the warnings only occur once. - - get_name() - Returns the Builder's name within a specific Environment, - primarily used to try to return helpful information in error - messages. - - adjust_suffix() - get_prefix() - get_suffix() - get_src_suffix() - set_src_suffix() - Miscellaneous stuff for handling the prefix and suffix - manipulation we use in turning source file names into target - file names. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Builder.py 3842 2008/12/20 22:59:52 scons" - -import UserDict -import UserList - -import SCons.Action -from SCons.Debug import logInstanceCreation -from SCons.Errors import InternalError, UserError -import SCons.Executor -import SCons.Memoize -import SCons.Node -import SCons.Node.FS -import SCons.Util -import SCons.Warnings - -class _Null: - pass - -_null = _Null - -class DictCmdGenerator(SCons.Util.Selector): - """This is a callable class that can be used as a - command generator function. It holds on to a dictionary - mapping file suffixes to Actions. It uses that dictionary - to return the proper action based on the file suffix of - the source file.""" - - def __init__(self, dict=None, source_ext_match=1): - SCons.Util.Selector.__init__(self, dict) - self.source_ext_match = source_ext_match - - def src_suffixes(self): - return self.keys() - - def add_action(self, suffix, action): - """Add a suffix-action pair to the mapping. - """ - self[suffix] = action - - def __call__(self, target, source, env, for_signature): - if not source: - return [] - - if self.source_ext_match: - ext = None - for src in map(str, source): - my_ext = SCons.Util.splitext(src)[1] - if ext and my_ext != ext: - raise UserError("While building `%s' from `%s': Cannot build multiple sources with different extensions: %s, %s" % (repr(map(str, target)), src, ext, my_ext)) - ext = my_ext - else: - ext = SCons.Util.splitext(str(source[0]))[1] - - if not ext: - raise UserError("While building `%s': Cannot deduce file extension from source files: %s" % (repr(map(str, target)), repr(map(str, source)))) - - try: - ret = SCons.Util.Selector.__call__(self, env, source) - except KeyError, e: - raise UserError("Ambiguous suffixes after environment substitution: %s == %s == %s" % (e[0], e[1], e[2])) - if ret is None: - raise UserError("While building `%s' from `%s': Don't know how to build from a source file with suffix `%s'. Expected a suffix in this list: %s." % \ - (repr(map(str, target)), repr(map(str, source)), ext, repr(self.keys()))) - return ret - -class CallableSelector(SCons.Util.Selector): - """A callable dictionary that will, in turn, call the value it - finds if it can.""" - def __call__(self, env, source): - value = SCons.Util.Selector.__call__(self, env, source) - if callable(value): - value = value(env, source) - return value - -class DictEmitter(SCons.Util.Selector): - """A callable dictionary that maps file suffixes to emitters. - When called, it finds the right emitter in its dictionary for the - suffix of the first source file, and calls that emitter to get the - right lists of targets and sources to return. If there's no emitter - for the suffix in its dictionary, the original target and source are - returned. - """ - def __call__(self, target, source, env): - emitter = SCons.Util.Selector.__call__(self, env, source) - if emitter: - target, source = emitter(target, source, env) - return (target, source) - -class ListEmitter(UserList.UserList): - """A callable list of emitters that calls each in sequence, - returning the result. - """ - def __call__(self, target, source, env): - for e in self.data: - target, source = e(target, source, env) - return (target, source) - -# These are a common errors when calling a Builder; -# they are similar to the 'target' and 'source' keyword args to builders, -# so we issue warnings when we see them. The warnings can, of course, -# be disabled. -misleading_keywords = { - 'targets' : 'target', - 'sources' : 'source', -} - -class OverrideWarner(UserDict.UserDict): - """A class for warning about keyword arguments that we use as - overrides in a Builder call. - - This class exists to handle the fact that a single Builder call - can actually invoke multiple builders. This class only emits the - warnings once, no matter how many Builders are invoked. - """ - def __init__(self, dict): - UserDict.UserDict.__init__(self, dict) - if __debug__: logInstanceCreation(self, 'Builder.OverrideWarner') - self.already_warned = None - def warn(self): - if self.already_warned: - return - for k in self.keys(): - if misleading_keywords.has_key(k): - alt = misleading_keywords[k] - msg = "Did you mean to use `%s' instead of `%s'?" % (alt, k) - SCons.Warnings.warn(SCons.Warnings.MisleadingKeywordsWarning, msg) - self.already_warned = 1 - -def Builder(**kw): - """A factory for builder objects.""" - composite = None - if kw.has_key('generator'): - if kw.has_key('action'): - raise UserError, "You must not specify both an action and a generator." - kw['action'] = SCons.Action.CommandGeneratorAction(kw['generator'], {}) - del kw['generator'] - elif kw.has_key('action'): - source_ext_match = kw.get('source_ext_match', 1) - if kw.has_key('source_ext_match'): - del kw['source_ext_match'] - if SCons.Util.is_Dict(kw['action']): - composite = DictCmdGenerator(kw['action'], source_ext_match) - kw['action'] = SCons.Action.CommandGeneratorAction(composite, {}) - kw['src_suffix'] = composite.src_suffixes() - else: - kw['action'] = SCons.Action.Action(kw['action']) - - if kw.has_key('emitter'): - emitter = kw['emitter'] - if SCons.Util.is_String(emitter): - # This allows users to pass in an Environment - # variable reference (like "$FOO") as an emitter. - # We will look in that Environment variable for - # a callable to use as the actual emitter. - var = SCons.Util.get_environment_var(emitter) - if not var: - raise UserError, "Supplied emitter '%s' does not appear to refer to an Environment variable" % emitter - kw['emitter'] = EmitterProxy(var) - elif SCons.Util.is_Dict(emitter): - kw['emitter'] = DictEmitter(emitter) - elif SCons.Util.is_List(emitter): - kw['emitter'] = ListEmitter(emitter) - - result = apply(BuilderBase, (), kw) - - if not composite is None: - result = CompositeBuilder(result, composite) - - return result - -def _node_errors(builder, env, tlist, slist): - """Validate that the lists of target and source nodes are - legal for this builder and environment. Raise errors or - issue warnings as appropriate. - """ - - # First, figure out if there are any errors in the way the targets - # were specified. - for t in tlist: - if t.side_effect: - raise UserError, "Multiple ways to build the same target were specified for: %s" % t - if t.has_explicit_builder(): - if not t.env is None and not t.env is env: - action = t.builder.action - t_contents = action.get_contents(tlist, slist, t.env) - contents = action.get_contents(tlist, slist, env) - - if t_contents == contents: - msg = "Two different environments were specified for target %s,\n\tbut they appear to have the same action: %s" % (t, action.genstring(tlist, slist, t.env)) - SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg) - else: - msg = "Two environments with different actions were specified for the same target: %s" % t - raise UserError, msg - if builder.multi: - if t.builder != builder: - msg = "Two different builders (%s and %s) were specified for the same target: %s" % (t.builder.get_name(env), builder.get_name(env), t) - raise UserError, msg - if t.get_executor().targets != tlist: - msg = "Two different target lists have a target in common: %s (from %s and from %s)" % (t, map(str, t.get_executor().targets), map(str, tlist)) - raise UserError, msg - elif t.sources != slist: - msg = "Multiple ways to build the same target were specified for: %s (from %s and from %s)" % (t, map(str, t.sources), map(str, slist)) - raise UserError, msg - - if builder.single_source: - if len(slist) > 1: - raise UserError, "More than one source given for single-source builder: targets=%s sources=%s" % (map(str,tlist), map(str,slist)) - -class EmitterProxy: - """This is a callable class that can act as a - Builder emitter. It holds on to a string that - is a key into an Environment dictionary, and will - look there at actual build time to see if it holds - a callable. If so, we will call that as the actual - emitter.""" - def __init__(self, var): - self.var = SCons.Util.to_String(var) - - def __call__(self, target, source, env): - emitter = self.var - - # Recursively substitute the variable. - # We can't use env.subst() because it deals only - # in strings. Maybe we should change that? - while SCons.Util.is_String(emitter) and env.has_key(emitter): - emitter = env[emitter] - if callable(emitter): - target, source = emitter(target, source, env) - elif SCons.Util.is_List(emitter): - for e in emitter: - target, source = e(target, source, env) - - return (target, source) - - - def __cmp__(self, other): - return cmp(self.var, other.var) - -class BuilderBase: - """Base class for Builders, objects that create output - nodes (files) from input nodes (files). - """ - - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - memoizer_counters = [] - - def __init__(self, action = None, - prefix = '', - suffix = '', - src_suffix = '', - target_factory = None, - source_factory = None, - target_scanner = None, - source_scanner = None, - emitter = None, - multi = 0, - env = None, - single_source = 0, - name = None, - chdir = _null, - is_explicit = 1, - src_builder = None, - ensure_suffix = False, - **overrides): - if __debug__: logInstanceCreation(self, 'Builder.BuilderBase') - self._memo = {} - self.action = action - self.multi = multi - if SCons.Util.is_Dict(prefix): - prefix = CallableSelector(prefix) - self.prefix = prefix - if SCons.Util.is_Dict(suffix): - suffix = CallableSelector(suffix) - self.env = env - self.single_source = single_source - if overrides.has_key('overrides'): - SCons.Warnings.warn(SCons.Warnings.DeprecatedWarning, - "The \"overrides\" keyword to Builder() creation has been deprecated;\n" +\ - "\tspecify the items as keyword arguments to the Builder() call instead.") - overrides.update(overrides['overrides']) - del overrides['overrides'] - if overrides.has_key('scanner'): - SCons.Warnings.warn(SCons.Warnings.DeprecatedWarning, - "The \"scanner\" keyword to Builder() creation has been deprecated;\n" - "\tuse: source_scanner or target_scanner as appropriate.") - del overrides['scanner'] - self.overrides = overrides - - self.set_suffix(suffix) - self.set_src_suffix(src_suffix) - self.ensure_suffix = ensure_suffix - - self.target_factory = target_factory - self.source_factory = source_factory - self.target_scanner = target_scanner - self.source_scanner = source_scanner - - self.emitter = emitter - - # Optional Builder name should only be used for Builders - # that don't get attached to construction environments. - if name: - self.name = name - self.executor_kw = {} - if not chdir is _null: - self.executor_kw['chdir'] = chdir - self.is_explicit = is_explicit - - if src_builder is None: - src_builder = [] - elif not SCons.Util.is_List(src_builder): - src_builder = [ src_builder ] - self.src_builder = src_builder - - def __nonzero__(self): - raise InternalError, "Do not test for the Node.builder attribute directly; use Node.has_builder() instead" - - def get_name(self, env): - """Attempts to get the name of the Builder. - - Look at the BUILDERS variable of env, expecting it to be a - dictionary containing this Builder, and return the key of the - dictionary. If there's no key, then return a directly-configured - name (if there is one) or the name of the class (by default).""" - - try: - index = env['BUILDERS'].values().index(self) - return env['BUILDERS'].keys()[index] - except (AttributeError, KeyError, TypeError, ValueError): - try: - return self.name - except AttributeError: - return str(self.__class__) - - def __cmp__(self, other): - return cmp(self.__dict__, other.__dict__) - - def splitext(self, path, env=None): - if not env: - env = self.env - if env: - matchsuf = filter(lambda S,path=path: path[-len(S):] == S, - self.src_suffixes(env)) - if matchsuf: - suf = max(map(None, map(len, matchsuf), matchsuf))[1] - return [path[:-len(suf)], path[-len(suf):]] - return SCons.Util.splitext(path) - - def get_single_executor(self, env, tlist, slist, executor_kw): - if not self.action: - raise UserError, "Builder %s must have an action to build %s."%(self.get_name(env or self.env), map(str,tlist)) - return self.action.get_executor(env or self.env, - [], # env already has overrides - tlist, - slist, - executor_kw) - - def get_multi_executor(self, env, tlist, slist, executor_kw): - try: - executor = tlist[0].get_executor(create = 0) - except (AttributeError, IndexError): - return self.get_single_executor(env, tlist, slist, executor_kw) - else: - executor.add_sources(slist) - return executor - - def _adjustixes(self, files, pre, suf, ensure_suffix=False): - if not files: - return [] - result = [] - if not SCons.Util.is_List(files): - files = [files] - - for f in files: - if SCons.Util.is_String(f): - f = SCons.Util.adjustixes(f, pre, suf, ensure_suffix) - result.append(f) - return result - - def _create_nodes(self, env, target = None, source = None): - """Create and return lists of target and source nodes. - """ - src_suf = self.get_src_suffix(env) - - target_factory = env.get_factory(self.target_factory) - source_factory = env.get_factory(self.source_factory) - - source = self._adjustixes(source, None, src_suf) - slist = env.arg2nodes(source, source_factory) - - pre = self.get_prefix(env, slist) - suf = self.get_suffix(env, slist) - - if target is None: - try: - t_from_s = slist[0].target_from_source - except AttributeError: - raise UserError("Do not know how to create a target from source `%s'" % slist[0]) - except IndexError: - tlist = [] - else: - splitext = lambda S,self=self,env=env: self.splitext(S,env) - tlist = [ t_from_s(pre, suf, splitext) ] - else: - target = self._adjustixes(target, pre, suf, self.ensure_suffix) - tlist = env.arg2nodes(target, target_factory, target=target, source=source) - - if self.emitter: - # The emitter is going to do str(node), but because we're - # being called *from* a builder invocation, the new targets - # don't yet have a builder set on them and will look like - # source files. Fool the emitter's str() calls by setting - # up a temporary builder on the new targets. - new_targets = [] - for t in tlist: - if not t.is_derived(): - t.builder_set(self) - new_targets.append(t) - - orig_tlist = tlist[:] - orig_slist = slist[:] - - target, source = self.emitter(target=tlist, source=slist, env=env) - - # Now delete the temporary builders that we attached to any - # new targets, so that _node_errors() doesn't do weird stuff - # to them because it thinks they already have builders. - for t in new_targets: - if t.builder is self: - # Only delete the temporary builder if the emitter - # didn't change it on us. - t.builder_set(None) - - # Have to call arg2nodes yet again, since it is legal for - # emitters to spit out strings as well as Node instances. - tlist = env.arg2nodes(target, target_factory, - target=orig_tlist, source=orig_slist) - slist = env.arg2nodes(source, source_factory, - target=orig_tlist, source=orig_slist) - - return tlist, slist - - def _execute(self, env, target, source, overwarn={}, executor_kw={}): - # We now assume that target and source are lists or None. - if self.src_builder: - source = self.src_builder_sources(env, source, overwarn) - - if self.single_source and len(source) > 1 and target is None: - result = [] - if target is None: target = [None]*len(source) - for tgt, src in zip(target, source): - if not tgt is None: tgt = [tgt] - if not src is None: src = [src] - result.extend(self._execute(env, tgt, src, overwarn)) - return SCons.Node.NodeList(result) - - overwarn.warn() - - tlist, slist = self._create_nodes(env, target, source) - - # Check for errors with the specified target/source lists. - _node_errors(self, env, tlist, slist) - - # The targets are fine, so find or make the appropriate Executor to - # build this particular list of targets from this particular list of - # sources. - if self.multi: - get_executor = self.get_multi_executor - else: - get_executor = self.get_single_executor - executor = get_executor(env, tlist, slist, executor_kw) - - # Now set up the relevant information in the target Nodes themselves. - for t in tlist: - t.cwd = env.fs.getcwd() - t.builder_set(self) - t.env_set(env) - t.add_source(slist) - t.set_executor(executor) - t.set_explicit(self.is_explicit) - - return SCons.Node.NodeList(tlist) - - def __call__(self, env, target=None, source=None, chdir=_null, **kw): - # We now assume that target and source are lists or None. - # The caller (typically Environment.BuilderWrapper) is - # responsible for converting any scalar values to lists. - if chdir is _null: - ekw = self.executor_kw - else: - ekw = self.executor_kw.copy() - ekw['chdir'] = chdir - if kw: - if kw.has_key('srcdir'): - def prependDirIfRelative(f, srcdir=kw['srcdir']): - import os.path - if SCons.Util.is_String(f) and not os.path.isabs(f): - f = os.path.join(srcdir, f) - return f - if not SCons.Util.is_List(source): - source = [source] - source = map(prependDirIfRelative, source) - del kw['srcdir'] - if self.overrides: - env_kw = self.overrides.copy() - env_kw.update(kw) - else: - env_kw = kw - else: - env_kw = self.overrides - env = env.Override(env_kw) - return self._execute(env, target, source, OverrideWarner(kw), ekw) - - def adjust_suffix(self, suff): - if suff and not suff[0] in [ '.', '_', '$' ]: - return '.' + suff - return suff - - def get_prefix(self, env, sources=[]): - prefix = self.prefix - if callable(prefix): - prefix = prefix(env, sources) - return env.subst(prefix) - - def set_suffix(self, suffix): - if not callable(suffix): - suffix = self.adjust_suffix(suffix) - self.suffix = suffix - - def get_suffix(self, env, sources=[]): - suffix = self.suffix - if callable(suffix): - suffix = suffix(env, sources) - return env.subst(suffix) - - def set_src_suffix(self, src_suffix): - if not src_suffix: - src_suffix = [] - elif not SCons.Util.is_List(src_suffix): - src_suffix = [ src_suffix ] - adjust = lambda suf, s=self: \ - callable(suf) and suf or s.adjust_suffix(suf) - self.src_suffix = map(adjust, src_suffix) - - def get_src_suffix(self, env): - """Get the first src_suffix in the list of src_suffixes.""" - ret = self.src_suffixes(env) - if not ret: - return '' - return ret[0] - - def add_emitter(self, suffix, emitter): - """Add a suffix-emitter mapping to this Builder. - - This assumes that emitter has been initialized with an - appropriate dictionary type, and will throw a TypeError if - not, so the caller is responsible for knowing that this is an - appropriate method to call for the Builder in question. - """ - self.emitter[suffix] = emitter - - def add_src_builder(self, builder): - """ - Add a new Builder to the list of src_builders. - - This requires wiping out cached values so that the computed - lists of source suffixes get re-calculated. - """ - self._memo = {} - self.src_builder.append(builder) - - def _get_sdict(self, env): - """ - Returns a dictionary mapping all of the source suffixes of all - src_builders of this Builder to the underlying Builder that - should be called first. - - This dictionary is used for each target specified, so we save a - lot of extra computation by memoizing it for each construction - environment. - - Note that this is re-computed each time, not cached, because there - might be changes to one of our source Builders (or one of their - source Builders, and so on, and so on...) that we can't "see." - - The underlying methods we call cache their computed values, - though, so we hope repeatedly aggregating them into a dictionary - like this won't be too big a hit. We may need to look for a - better way to do this if performance data show this has turned - into a significant bottleneck. - """ - sdict = {} - for bld in self.get_src_builders(env): - for suf in bld.src_suffixes(env): - sdict[suf] = bld - return sdict - - def src_builder_sources(self, env, source, overwarn={}): - sdict = self._get_sdict(env) - - src_suffixes = self.src_suffixes(env) - - lengths = list(set(map(len, src_suffixes))) - - def match_src_suffix(name, src_suffixes=src_suffixes, lengths=lengths): - node_suffixes = map(lambda l, n=name: n[-l:], lengths) - for suf in src_suffixes: - if suf in node_suffixes: - return suf - return None - - result = [] - for s in SCons.Util.flatten(source): - if SCons.Util.is_String(s): - match_suffix = match_src_suffix(env.subst(s)) - if not match_suffix and not '.' in s: - src_suf = self.get_src_suffix(env) - s = self._adjustixes(s, None, src_suf)[0] - else: - match_suffix = match_src_suffix(s.name) - if match_suffix: - try: - bld = sdict[match_suffix] - except KeyError: - result.append(s) - else: - tlist = bld._execute(env, None, [s], overwarn) - # If the subsidiary Builder returned more than one - # target, then filter out any sources that this - # Builder isn't capable of building. - if len(tlist) > 1: - mss = lambda t, m=match_src_suffix: m(t.name) - tlist = filter(mss, tlist) - result.extend(tlist) - else: - result.append(s) - - source_factory = env.get_factory(self.source_factory) - - return env.arg2nodes(result, source_factory) - - def _get_src_builders_key(self, env): - return id(env) - - memoizer_counters.append(SCons.Memoize.CountDict('get_src_builders', _get_src_builders_key)) - - def get_src_builders(self, env): - """ - Returns the list of source Builders for this Builder. - - This exists mainly to look up Builders referenced as - strings in the 'BUILDER' variable of the construction - environment and cache the result. - """ - memo_key = id(env) - try: - memo_dict = self._memo['get_src_builders'] - except KeyError: - memo_dict = {} - self._memo['get_src_builders'] = memo_dict - else: - try: - return memo_dict[memo_key] - except KeyError: - pass - - builders = [] - for bld in self.src_builder: - if SCons.Util.is_String(bld): - try: - bld = env['BUILDERS'][bld] - except KeyError: - continue - builders.append(bld) - - memo_dict[memo_key] = builders - return builders - - def _subst_src_suffixes_key(self, env): - return id(env) - - memoizer_counters.append(SCons.Memoize.CountDict('subst_src_suffixes', _subst_src_suffixes_key)) - - def subst_src_suffixes(self, env): - """ - The suffix list may contain construction variable expansions, - so we have to evaluate the individual strings. To avoid doing - this over and over, we memoize the results for each construction - environment. - """ - memo_key = id(env) - try: - memo_dict = self._memo['subst_src_suffixes'] - except KeyError: - memo_dict = {} - self._memo['subst_src_suffixes'] = memo_dict - else: - try: - return memo_dict[memo_key] - except KeyError: - pass - suffixes = map(lambda x, s=self, e=env: e.subst(x), self.src_suffix) - memo_dict[memo_key] = suffixes - return suffixes - - def src_suffixes(self, env): - """ - Returns the list of source suffixes for all src_builders of this - Builder. - - This is essentially a recursive descent of the src_builder "tree." - (This value isn't cached because there may be changes in a - src_builder many levels deep that we can't see.) - """ - sdict = {} - suffixes = self.subst_src_suffixes(env) - for s in suffixes: - sdict[s] = 1 - for builder in self.get_src_builders(env): - for s in builder.src_suffixes(env): - if not sdict.has_key(s): - sdict[s] = 1 - suffixes.append(s) - return suffixes - -class CompositeBuilder(SCons.Util.Proxy): - """A Builder Proxy whose main purpose is to always have - a DictCmdGenerator as its action, and to provide access - to the DictCmdGenerator's add_action() method. - """ - - def __init__(self, builder, cmdgen): - if __debug__: logInstanceCreation(self, 'Builder.CompositeBuilder') - SCons.Util.Proxy.__init__(self, builder) - - # cmdgen should always be an instance of DictCmdGenerator. - self.cmdgen = cmdgen - self.builder = builder - - def add_action(self, suffix, action): - self.cmdgen.add_action(suffix, action) - self.set_src_suffix(self.cmdgen.src_suffixes()) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Builder.pyc deleted file mode 100644 index aee7a0444793f0595e835c77d6a9adfe3ed2cd44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31488 zcmc(oe~et$b>H8cS?(|Ha`{W7R-&ZQFLSAoOPRK8S*C39hh!<1*3Kg(+N_w-aOUmq zkh3$p^Jclb4w)F10tZH-G)a*bXxchKP$YqYB0%G~wVO6^krqZ=H*EtKDBuIMXe~h%sGxO$5E>iwW?945?$uPudC7JYJNQuUEXEaBT;8GS{aKjk43T4?TR|% z(aJ=0c_Lbwj4n_5Q*zp!f5G)s>3X_!y{B|NQ@Y-3*Q3!QwHu4xiK4fo=+l??Md`li z^8Tnb9;LgYYX_oh2ct!5K2fB&FKSJ0f494McPMI2ZGSgiygMAV_C#qlx>mIeXNnj1 zM{U};H)`#RKG34%1JMUA&ql3-QCf+vRV?v+MdAmd)*;WC>was*Y?0`p zsP%w7da!u(aMU`I*X$9?^P%EhO}%nq?qPM=Z|{zx3+H;>Z2s(eyVFYhlat}1*1LKw zZ4PSL`qgYJ8>B1qlaps^x4mpE3M5fwma#u z+G4-AQpjG%G3Dw&rWKi_4^0?e}i9TWL1g z&}B1it@j%pT02Pld=Mz%4e|{8?WN^GZJi4BJ6lvDFCkEQ@@gYXTQ#Vp(yymm8@+z3 z1|8N{sA5JZtgd$2q)=;>WU#eLvwDkmQ=|(`Tk5GYq1CExx=F>l+iTdXT}^9Qdu5f5 zOS`@GrDgJ>|HysvMk5_LMNg`> zz5ZbGs#r>mRqCR~>QQlqN^19O&0cr0y#)P?5sue3+7Mcd(zu~d2ffKw`vz>$-J(nB z)4s^u<73)Y=FN*xMO3UcJB=(WdNcIoS>EKG$A>U&uS@^HZ>4WGmfOwc$yP7Tj;ns^ z`s1~Jy4p`OdO`Kg+Z?)0eGADp;8PgPh;%Ga$h*Qhs?o`M6bYwnLLYt6>GiH>wNCrG z_&rqdxyi{If6nz*R(n}{kcP+pRBv+5+srw-_|%97iGnzJ8ER&8u#RwU)f$$yGHJC< z;;g4slk45y2Gnu^T4}7-)IAV(ak0HgH$mw}En7{S?ZtMp$i$_#L{Hk6Q$kGA?%wFp zv{rj@5ut)~{y|n`FxRA&6x4^(;j-3SH4Z@Jpylw>#ZKc!59WglT>%uC7$ZUFKq#8) z!U0o>)S?nhBw3uXfr^F;S3Jm+Wkk?rYVq!tSK+*H(J1b@()NO1&;6 zSFg_&O^RDKa3CAGGzU(Y%Ut3H>((np1`y82TT=+8 zb0KYDW_xB@IIS&pdRO6II&V-`5#rQkdYnzfnPTF0)80BZ$AGcXnA2Fv6f6Yw0S$8J%8KFAOGl@;bJl-|gbAzOdfuG`X-p%JVEoHqI%FTTHyFxJ4pvrAcJT*J+<1Ea{qxVB9H8B@ zlhztPpXi{5J15>de`@~eJLr*A$!oxosad1(U@!lj#}GQV()w81O|dvc-mel3S>zj-(r~ z!%dxFM!WLCB4Pw?)t2(Q)fU&gHq0`rz9Jv0!$2ozLDt#OqBCyEM}6a%vK@EET`kXo z0)z2-+vj8%#8GNO#snrw7>BkwDW&{TJXW+RpW&b}-xfPGMbG>=C#pQoiQc#t%iYC2 zz8OU~56yL1qrVefKN{vAm=EP(Jos7!|BV4^cXmd1Nch4 z>tk0P$ES`aX)e#H2KI55b{6eI4Nq`?qao+rQ>GJpf0iRtm81Aj+!Q(T!ziI7H29i< z5qX1^!YYXIlNk|`DIV=iEeFbasP)q99o%SR7bfDibL#H3sti4Jl9xj5=li7}P9b}YKo ztqqItvQb8}B+Lur<6TkqT`OSZE(HvWv}*I&Vx?5l)+2fT6VbIv6HsqqHM%uU@y|vh zgWb{f$*BKw9N(IVVl{*^C!`c-^&c(Pf1}atVztOPjy`pBT!gzm9`*mOeKhu$svM1> z#v=Vx^ftmmb+-{_97a@sEttm1ew@oo%kpEd<_N@FPi99QMbg!CxM|&PZ{Y81E9;#> zTR4bojm+KYp$jVbgkh7R^SRoSm|st3ZAyqtTim6bBKH=!5MYpL$|8?#Se9N{rr8-X zJhO5YB*cu2-2ZMYGW>$i41F_U9)tE^UBk4hQ+xjT;ta4zwLZ(~F4ZbG|9r1|)P4Wl z^*2g+lEyZh#N1XF%i3Gej`8EgP5h#P(5N8qX3q$a>EOeuQuA}N9Zb8LDqHAvQy4Xh z&;s^9j$@)BGEujg`py8j22d$c8|)(?FNrJ;d!HNFcJuLc%S@0&8fi}AI#eNUIk`5m z!N>}Pgl5lRTGq4nQn!KqW7)TwbJEMh?`^o!fIWo&X9*svT z6Pyq6cYiz|PgiP{(fEUvYWzq%6CaDGcy}&dFjh}Asw6fzijMVqtJkd86WMc#(PKte z`*l(&!v@&ZJss$zx3@UZkXTo{Mk_NT6V-`bHVz985gd?@)J>AuACdJeM|PM~YL+63 zK~`35MpRWsl(F+CNpNOpJPqv?cjz|SosPkEGN?h5DA2~68;#C7hW5b5o5gk)i>VFR zG9X2F-i9_&P{%or?0HUi8YR-|=)9^J@@7?vr~e^cF#Nf~=an?G@N~7v&6Oc%8~a)Z z7~86HqQ;zco`&A!h)xfxaP_5Cde~R@w41~RzsX^?c@#egJME9XCRQDlpFFP9PBY9C z6!P~~6O}s(i!+$GLH?p+IzI%LbRhrt;S%%?c=+wmW&nzCCgtZ{lKZbNN?S10faGEt z*)ERW=dcpaTN`Aq#E3$MNN2eORT+Ho#daSky@aH=^R7~Y{hjBEnWR~dJR2`k`qW{5 za|eZPAv&)X8sT#dmiEhQwt%?be$rN@-E=tPzZlYu^ zf$96?0VR?2m>gk+pi2TQ$faw&doD!3OU{K5jUq^YB|>zRTKogm#Dr)p2+^xB%!@y? z5M3g_k`Rge1S$oR28MOsO&iT+4f|QTw$3D5>M)PhF_%rXetj_r^#5YIxxo zrT-Jv!+4=O8k=C4IJi7#KEy~qf{izxd{b=I$Y;e&AqTL}pcDsB(oNHhs6YpF zO^Ip3&U0=sv)Nt3q7R^$<>Gn^z=dQ!Ef(gf3j5!TU?!zdsHL(DB9#o-U|_kF;8R#% zDi@SNmbxa=z;3qkg3;KT1GM?DTys_+m<|!nB;f=X(wv5g;N`&SLPKy0xxpUNO^e4v zXhfecWQRD12F`EqN=Hq`c`vl?ypRqv3V9HjjcDE9=m7V%w(4q4+A?d))vAp59TFK; zv+2XxEzEJFzd z!#3kaF0Gqx?u?@=bb zF_>9b*t?CPEl$&#LLaTrI9G7wITG`WqWlU1LOb7X&pej=y`z7by; zBqL+~Qhtk_&+XG?{60T&9u>HpUVkX=c*4=x70UeqLxw$}m-by7m1FGi!& zYt=ZUWi0hf$keY+%Te*hk6Bf|thy2lH7gZtE~HrgM5X|zGerQ8Mx~(N^XQFvo6jgv_GF*FdOxR6OYE6fLa}4K zhe_b81O{k!*&#!-#2Z71e%`8U7t1# zFJ_q%aiyuWT0XfRpwolo=^noTSOZR6r-=2>7~DV57(qyh<`askj_^vV4wu6r z7?}p`tZqYvK2L-n7=3tpVbDiCnNHK>S_zJ-QzgTYgVFg(#keH0O-@=qc&vk~sQ}IJ6!5O@1DZ@i3#o72k<)Mo1_V3ycXtS4R`|UVX*^BM?B<~=VQ_JO4R?i(nO@!=Lq!n&uxSSy*8Bi z+V1=UoiXks?4L@T^7SELW17L^&;<0*bkzTRteQ|aIvGIxnHa_BPp+XbY-pFpDy~N& zp~<)BMHVw6$2Igv#WMOvEHoP6+jNI=%oCuI!$SkUZ_jS+8}ZsVty1Wfs^#^~7{$6R zuLEjZ$i*y)J97DEyfzl`?~-bNFzO$!4DJiM4SjnZPnak4Dn#)bT4lCniR}WZ)(%%t zX>{)e139z54X3=(=(O>86gGhkEqLNKl%NC>pjU`eEL`|bx`d1GXa#6(t_}q%lw=y~ zH)*u7c5LPy_@Qq$Z#&BX)MTB=R8i1hDcH!JJVVi5%hB|W#+HE;R*Y3NQ?x)p7&a7c z8Ddd@lBtw{;|zBry13CR1%Q=m1~PxgS9yK_^OF--2^@qX1iTfxvQ-8qd2$*VdYQ9@xQ1NF9DWp*X! zd|;-E*%_twXeh}Wmwb?$9U2RTTi2yn>aHMWsFImY(fBl8!CnT$hdJ(#?_;QYEIv}1 zFIWGQ;=3cd!nwnAZP0?XhGMkv0`IiXhLEtsyqcS^uN3bq#e{I6v#A64 zLzsLVw51aXnohw9Y=XkVJM6QD;T9pB@)ZTZ5+AL2E9N)^!&$Y|9E}2=t9=*j%lW2+ zB|pxINb)NO3`!PzQH-#4Ob9u@BL9MWm$C=lG89h^dcg)vKE_=MDX?1}Ij`MIlgj{$ z(_$?(Ad1aml1-??+VWdmXncRF${Z4W?~# z*OKZ(|-)Y8Gw1LyAhYX4-gVwO;?^kdd6UQW>`+6`J=-6g)7j zk6qnUwtj*9pHXep^`oP}71fD-i746Rus@>wS&r;CNLSW^T25pJbN{F!56z)MZvb`4TDCJoyr-N378M?L$hm zg;JLvjneVx+G9E09@mD1*Xv}{UcKY2&$hobb!BK5Zczv74Btk#7OdezUftxz|h<{w*$r+}C?hn8yD$a<}e?``lUx%qV z67vb}igBL;n+(nAXO_~g!%R2`5-EYOa00oYi2V_sA$%w0`A3$+l$<|h#RXgjCyqpi z>4;cq0fc~i91YV0E`^naY{1mW=Kthhm$M<%%Cmrx!xyRnP9bB&zEER>=k^E1AK&CL zNgPAs;-ERcT;Q!i0WJ>7XVt}FMK|f<{^%y2Ydhww+gS-;pzQn%;pz7cb=#M~%v`PN!df5eArX^w?V z-5q!W5uJ#@(^=b9U%i2y4h+qt@psLCL|Suos}j1ROWB% z!;{%d$zxFhJWlnfYop@>Pmb-m+B!Y(8(6dDbKViNoeI;G#nT4Gw_M|jWD@Y`HLg{3L zc*wWA92fM)hVWCmdY{tB>o{M~Fn1jE<@%}|_~b365=L&J=N9s1^D^5b(al{T{)~8~ z5U_5E+!w5e^@;wSg*$C~6jBAElv9OAj-yF!nExW+H1}QV0B^gvuXhRYHa`qFFZZ|{ zcRa&u_t1!@zv|ZXoEXzh7f~RA*P}#J2FZtX!d#1z>pFFGTG2_Ptke34u8f#)eUx0) zX-%iTPRLngRI_2(PWN@04$@(Y$thwXlYb5U=M`ykf()A6gb~ARG4M7grbO> z5vc{duK7S`JPABk5RVkV0zn;gwmxi=RF+8Iao!=va@q4}VhtF6B~NZ=NNG$#q<^pb znY7=l*MC)1RkJbV^0o7LbUiT<@3`(IoQDFn97}Wc};nXsNYmyb9odh@%?s)^xV`JLhrZZz)8##qf>p z>LDd>Dv1PwKu%`sX^nF5)?DFghZ-Vh=XXk?DH2NM7e4mi;0B4q8I;^$tazvv69exU zpl_1-j#-rW-flBuhG7h1Au5f@D4Gp(4?d9DNHWf5Gs?`s0m0?1WY_2Ew~<;pGZR}V1J0&Bc0a=Z%wy#4C~b|Bi=2$UAO`4Ms>Wd67%cA$ zk*!-#cN!~KTaAx=O~j@+H`_gO`3ScrBg7{XL*g@U>WP)crbCBfAgguB77;jF3VOPw zB$ku7$kx0NiD;fT|L;u864l`=YSDf!A||>Np{%gd(fG;u@wh2g(xEDuBoJj07>PA( zngJ;|CyrJhwO7U%;uf$K6h0eb_*4i?Kv%+o@;*rYiI5r#nsl&~z#Pr}N^ll3;jTe@ z3I?~?Tu01{8C>aMnJm1YxAj_X^O@jD!rihvs4K&6WfYVsE@CII>-2_BJ-y}d)4eoH zih0+78Rz!d*F|}0P{m@r7i6_+e~s!A;6jMsr(eA#z>2& zfzlc&U(!e^T0>L%ry%YKL#Czy5m@V_SX1q0w1`<3WSlu4`^FbeDiJM_m2X=76{&vL z^Ka{!%uOxB38;Sw^|}jnO_1`&?+~fQ$O7{X+Q-<{E+xJGABoa3mLe$p028@~vG~P9{8?_GSXe0}*ACkRI+noJY+fnk*V&Su&5!H${FQUIYRHp9bz3#mzn*^#!QuH* zKQL`8aiA{{5=$JfJ;Q9H*q^F`;i^t0WpPHgf*GwB8Z9lF)&35qb~IPkZMg)fkv2%% z$`n%{xH-w^^u1Z%FDrq{*dd+bhU2h?esY!YPWkz!z8=cWl?vbL!#z>|@rsI^jy69S-P{dxo{Vk*W$X!)=-DTPY-q0C23X-BLRa=^ zSdP~|p?{b7?BQF$9b^3G_zN%(^rf{F2SrSUza3TIq#^vPMw=%DtDL{`WL}mT9HQb^ zLvaw*O89EL_Ek!t3(E}wqa_5aLZLqX| z(7d`saWcM5_hs)Rm*BN&Ta|oim8-*ABcG}*Z)Wrs5kO6;&-^eeMrNg2XuM1(!E3o- zOZ05qb#s?aDA~L_qZE^$q>%q5IpqK7wwU_`bN3Bcklq}IJ((cuQ9vk4j{m#LMmCKZ z@Zd(L4Ei+Pq%Ry;DQHf-t@xzq~rYNQ{>Zap^m9coN^2Dy`c&2)AM3cBcA(f_v8d)I|9HxW+m;$6q z2vB;|F3^trLmG3emi^}t_Nmc6kxQ(l$rdz0BuIr^p zsXPCq<37vWq4^?O8f&BP1>OR3zs(?}cA=VSuZ`E}W$8H6{&WRz^$L|u)aHn%M&q8g z&t^=2^NuX`>RMVVPmRLn1GN5TOW&Wr@}^WYuTj3&_8TxVZAdoi7#Mq~n}M>;Wimw# zoK3+rLRuS0o8`3O23VV7XT61uxYR-iOWdrs$%Z+TkUrgQmZ?O(5G+F=Ge_{`X1SP4 zxqYU+YSxA=gl(DF1p6vAL&dx>L09%l7q2REP&zgF6`d~YWPt3?=n7(cc;KR2F({7a zM$0S~{!e~cuVoex-XnQ8*&CXg7N{YdH8=4}4?LvAV8=Nz_FZ+uI4=aLD;~;h|Kw$r zsFn_v2FWA(Zs;7C75sTUlOEU^Nl(5=){kQUWY2ODfkob5IVyiFI>fq^sc6cM$K$<~ z$;yM(1G^?Lq$c9~sxqd8Uh40`idnT1Wr_92IkNxB3I4{A)o|>5Vn$PU)_4XMG+<70 z%2-S6GkXKTuKnLL3zgX&v%C5~XGRAezYG|YLAqQ4`Fv*zARFjHVrYvh={=;?DZUPK!39V>)OnLIaH=zOe^$D@pw@)3ss4pdx>Gh4|w{;`7 zmP)w3u|ra*Ac7xN!=Kj z&>)goY}@N&x<{0Fboc_N3+CemuUl5(yt!p{J3rz5|79L0zpK+%IC+D`38vAE`m(Kd zh7e|WxE~j$t(HX<(O;XPjQjQ?;#c*Lwfp^CAPX1{$UE(DwLq)`7ql2Dl9>34Ym+fg zkekNJ$7h?KTmvJ6Bo~PTHh9|#B{wr$hI2XcZgov5i5bbqXYlTpuRB0GW zg2f7IIgPYiM+ekq5MeWZwlz}iOa8G=@)T@n_Cd;Sd35hVs02&QW^h6eTAM`id)|X; zLt-ubsv4sFOCzv#-VQeNmnd%YuAQgG>afoH1Q&EqHe(hlSPnDz)_;sfp-1s(OGpnL z$rzz=j{yR9_GFyt;1P`-LF*TMqITQxB2z+qVkTYR{Nh#94328RJUMTOwVZO|4QGqb z>1(Nn9a8@093qza?4F~3cT?q>{dKiu>RPuBKN%XeL$bI`DL<*&sZ2pgJ`+3Tact^N z5zV^vQ7#}d+Q&PPj-r={n55q>aE0!j4O4~Bko04|Sf5=2Y=wWZn;dhkHbp1!Ky!3M zkC;vC5&_@_7Wf3L7TJ_&a)jGN_1Gb5{5)BIUeqwn#JD6#Z5#Yxl#oL#2F;04+UZG= zf!lU^%9k?b+m2c6$8hGdG*fD^xy;nDrEv&>%D*ilPPBnno8=9kVL^cHJJaYEvy!F7 z2Bo=9+g5lOYzyW4056SNF?m>P``%{7r!*u`cNn z4_S0!uj|^=F6Zaxk5N8y2Em#Q?Gg4E>k{T4^Ieyf&qYMK)QS0Ky_OzMF{xD(Y-e|u z(;&mcjbOFG`_gjWG0SW*iIlST6`5vp*v8UQpLJ>$Eki~t45+lZ%$o&qYy))*l-aNi z%^(vygVxwZjr7ay0g*75wDaH=n^?mmWMd04)TKjCxC%JLYFk#TDM3qGOMSLjW9Lg! zvU0YW*0jY4`x$GSbiLJxrTwN#N+{G)dy8qW^ak5#vtoF_s-CoYeW?9S#n^&ZA>Cz> zv3dX7=9k@x5xbigd$rRt(0PXx(qt z6HrJ}J2qeh8;S`~vv&tRp%1)bV31M*eK2KXaFOP-0A|r}dQ?{$vvP= z2E$X}9781g-!gc}5gmJ?OhI=hqpALP%u{AnEMD_>tVV|OCU;RAs&Ni$yEivC19CGGabh(Le{{$e>@gGP3%2&+oPrKiW?>YB$+lqh`b30*K;)%Pf19%9qo!BzTNFABqH*y8W((`v#m7kK(qK6=yh8I(0j)^0ofI_*kp=0LX3V}`2pq8-nsOPB z6CpU}FL;>0h@2lrYz2@yvGH4As+{16Wn_VJZqi)h)`-5cgGB#MLG;5a{p&i()guO-`g=P4 zb)By3^b4Hk%%nD7^N5~lMQ8F`I{m&*s#)@fI{izXUe@VroNOW>bd7~%Cx26~{y--I z`qqe*EVF`kh?;+ga=s>Np5h{kXDTz52P-pdZ88gzbRY32Gpxjt_f}71e_WG-X>@-I(zy8CGKsVx-0 znZ=4B-dB9m)F%oD))>TM!Z+=+D)#k{SrAV#QDO4~{jWq@=xJ0qkN|_&tiq_)zEb4& z50%^6AmY)d1nKiN6B%J%Vt~fZZS&L8r{;)ce@+7nyCyftF@J{slTED+Ej{-&u|1U2Gs&dnZ-yq0MKx{7ibrycTDBprh2A(f?)h_fh<7!7kEbq~6LCt#e zgY02j?q1k~aKxJsHjnS5({ai|?!BYZ)L#S%k2(53}suWLgk z3n#D}vzW$7nR}cjzdOU$){s9J2V4H*`84_{a#=+xr`gq2TYzZQfM(hzc|Lg;JotOc zXd=>-T+P~!rj~aSeRCP2id|cxrj$|qsIaj(Cm zUn+6apX5(ycmelG-wtgEW+DF@N~VK51Teb?&R`g#Tq>!R^$H=ZF`$$ILHfI zN_3mAl>D(?{2NZD6mk$~hlF0F+^>3S#xWYZi_o)VI*7ScR)OWnG;u6PY?_bBGP;>s z*N9`-4a1rcSYbDq+nbk-r+H=r`1vcZXjIyKL4!&$;b4J!aJ%n|XR#{T8v?IGMr5uS z#}LHwMzr<@gVqa-M%5h9`w^_hf)&5d7?hLN@J``FWjEHrqW18&zP`u!#K^@@xv&uj zfUmrM1_*wHCev@dv1LtDKSPznPD5*<_Sm3rc!V=F+mYBub0DLG3F1$QOEjVB=V^>ZZ7r?|==<45T#_-|M%;JolRa*x_-lrN`GzK-Qnn@% zT)uC*KfG+!UrPrKTYh8SQ=L@do}b~^M^-^`_1Sb~T|Xp~xf#EzQbf3y_<69@x2BZ9 z+rk=Kfo~y>7UPrrj9!=v@GH9dqE5C_Uz1!m*=lo>$uH@4S*M@Z>GyQ{r#gLICz;gA zzt&0pVwS==)#*G)hxgpS(@Tl9(~gTBvV(20{{>_%dy6tgtD{8T%~VD)7QX-AsrPHE zfQjnV?g{=(P0xIE=Ggv+Cw5JZ+A%RPHZjTH2d0isRF709YIZ)9oTrc`hy9UXc$Oop zaY|X}ZV*Lz+jVT(cX&SB+VwX`c_z0SYqr5#ZNq+I(|$s8b-mBFY_?1cBeT)5U7s`% znkH$~MBwu8>}b0ZZKdj4D>?Ychy2oveo>Rh`XNdCmZ!2aZ_j`&u7#fa_bgm?2+|R@ zVsL}=-EpvKMjP4CgqQ>|ZZIm7=o~3SSHD^|ZdOAbY{rm_IC2Q4K+jqj7?5omJm|XuyPThG)0WYe^OCPz(2y z^^ejRpFP1fcB{Z@W~%vd)luDGbsW~huI^R!R^dO!d&Z_=JT6jeWc=y*^y>Oj!ma1#4{bF~mPoLD zZ>&8<`WM6U6;sZhI#=r=h(EEAOTkFP+xeF+Sh%D=v0qynW*XM9XZE97i8Q&#Yzg*D z%sG2PS4VX^rqk0piNlgtbh@n53p$qglp^2v^-gDsL1Ah_y+5ZK~F0?cN diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.py deleted file mode 100644 index 6eb6f173b..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.py +++ /dev/null @@ -1,217 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/CacheDir.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """ -CacheDir support -""" - -import os.path -import stat -import string -import sys - -import SCons.Action - -cache_enabled = True -cache_debug = False -cache_force = False -cache_show = False - -def CacheRetrieveFunc(target, source, env): - t = target[0] - fs = t.fs - cd = env.get_CacheDir() - cachedir, cachefile = cd.cachepath(t) - if not fs.exists(cachefile): - cd.CacheDebug('CacheRetrieve(%s): %s not in cache\n', t, cachefile) - return 1 - cd.CacheDebug('CacheRetrieve(%s): retrieving from %s\n', t, cachefile) - if SCons.Action.execute_actions: - if fs.islink(cachefile): - fs.symlink(fs.readlink(cachefile), t.path) - else: - env.copy_from_cache(cachefile, t.path) - st = fs.stat(cachefile) - fs.chmod(t.path, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE) - return 0 - -def CacheRetrieveString(target, source, env): - t = target[0] - fs = t.fs - cd = env.get_CacheDir() - cachedir, cachefile = cd.cachepath(t) - if t.fs.exists(cachefile): - return "Retrieved `%s' from cache" % t.path - return None - -CacheRetrieve = SCons.Action.Action(CacheRetrieveFunc, CacheRetrieveString) - -CacheRetrieveSilent = SCons.Action.Action(CacheRetrieveFunc, None) - -def CachePushFunc(target, source, env): - t = target[0] - if t.nocache: - return - fs = t.fs - cd = env.get_CacheDir() - cachedir, cachefile = cd.cachepath(t) - if fs.exists(cachefile): - # Don't bother copying it if it's already there. Note that - # usually this "shouldn't happen" because if the file already - # existed in cache, we'd have retrieved the file from there, - # not built it. This can happen, though, in a race, if some - # other person running the same build pushes their copy to - # the cache after we decide we need to build it but before our - # build completes. - cd.CacheDebug('CachePush(%s): %s already exists in cache\n', t, cachefile) - return - - cd.CacheDebug('CachePush(%s): pushing to %s\n', t, cachefile) - - tempfile = cachefile+'.tmp'+str(os.getpid()) - errfmt = "Unable to copy %s to cache. Cache file is %s" - - if not fs.isdir(cachedir): - try: - fs.makedirs(cachedir) - except EnvironmentError: - # We may have received an exception because another process - # has beaten us creating the directory. - if not fs.isdir(cachedir): - msg = errfmt % (str(target), cachefile) - raise SCons.Errors.EnvironmentError, msg - - try: - if fs.islink(t.path): - fs.symlink(fs.readlink(t.path), tempfile) - else: - fs.copy2(t.path, tempfile) - fs.rename(tempfile, cachefile) - st = fs.stat(t.path) - fs.chmod(cachefile, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE) - except EnvironmentError: - # It's possible someone else tried writing the file at the - # same time we did, or else that there was some problem like - # the CacheDir being on a separate file system that's full. - # In any case, inability to push a file to cache doesn't affect - # the correctness of the build, so just print a warning. - msg = errfmt % (str(target), cachefile) - SCons.Warnings.warn(SCons.Warnings.CacheWriteErrorWarning, msg) - -CachePush = SCons.Action.Action(CachePushFunc, None) - -class CacheDir: - - def __init__(self, path): - try: - import hashlib - except ImportError: - msg = "No hashlib or MD5 module available, CacheDir() not supported" - SCons.Warnings.warn(SCons.Warnings.NoMD5ModuleWarning, msg) - self.path = None - else: - self.path = path - self.current_cache_debug = None - self.debugFP = None - - def CacheDebug(self, fmt, target, cachefile): - if cache_debug != self.current_cache_debug: - if cache_debug == '-': - self.debugFP = sys.stdout - elif cache_debug: - self.debugFP = open(cache_debug, 'w') - else: - self.debugFP = None - self.current_cache_debug = cache_debug - if self.debugFP: - self.debugFP.write(fmt % (target, os.path.split(cachefile)[1])) - - def is_enabled(self): - return (cache_enabled and not self.path is None) - - def cachepath(self, node): - """ - """ - if not self.is_enabled(): - return None, None - - sig = node.get_cachedir_bsig() - subdir = string.upper(sig[0]) - dir = os.path.join(self.path, subdir) - return dir, os.path.join(dir, sig) - - def retrieve(self, node): - """ - This method is called from multiple threads in a parallel build, - so only do thread safe stuff here. Do thread unsafe stuff in - built(). - - Note that there's a special trick here with the execute flag - (one that's not normally done for other actions). Basically - if the user requested a no_exec (-n) build, then - SCons.Action.execute_actions is set to 0 and when any action - is called, it does its showing but then just returns zero - instead of actually calling the action execution operation. - The problem for caching is that if the file does NOT exist in - cache then the CacheRetrieveString won't return anything to - show for the task, but the Action.__call__ won't call - CacheRetrieveFunc; instead it just returns zero, which makes - the code below think that the file *was* successfully - retrieved from the cache, therefore it doesn't do any - subsequent building. However, the CacheRetrieveString didn't - print anything because it didn't actually exist in the cache, - and no more build actions will be performed, so the user just - sees nothing. The fix is to tell Action.__call__ to always - execute the CacheRetrieveFunc and then have the latter - explicitly check SCons.Action.execute_actions itself. - """ - if not self.is_enabled(): - return False - - retrieved = False - - if cache_show: - if CacheRetrieveSilent(node, [], node.get_build_env(), execute=1) == 0: - node.build(presub=0, execute=0) - retrieved = 1 - else: - if CacheRetrieve(node, [], node.get_build_env(), execute=1) == 0: - retrieved = 1 - if retrieved: - # Record build signature information, but don't - # push it out to cache. (We just got it from there!) - node.set_state(SCons.Node.executed) - SCons.Node.Node.built(node) - - return retrieved - - def push(self, node): - if not self.is_enabled(): - return - return CachePush(node, [], node.get_build_env()) - - def push_if_forced(self, node): - if cache_force: - return self.push(node) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/CacheDir.pyc deleted file mode 100644 index b22f43dcf2ed58ff257c5b39b4e72a9e9749c3b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7187 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 aflOKc`BU&z`R6y!Hk)%kE@Z27{yzcEcUFl2 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.py deleted file mode 100644 index ba7dbf136..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.py +++ /dev/null @@ -1,778 +0,0 @@ -"""SCons.Conftest - -Autoconf-like configuration support; low level implementation of tests. -""" - -# -# Copyright (c) 2003 Stichting NLnet Labs -# Copyright (c) 2001, 2002, 2003 Steven Knight -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -# -# The purpose of this module is to define how a check is to be performed. -# Use one of the Check...() functions below. -# - -# -# A context class is used that defines functions for carrying out the tests, -# logging and messages. The following methods and members must be present: -# -# context.Display(msg) Function called to print messages that are normally -# displayed for the user. Newlines are explicitly used. -# The text should also be written to the logfile! -# -# context.Log(msg) Function called to write to a log file. -# -# context.BuildProg(text, ext) -# Function called to build a program, using "ext" for the -# file extention. Must return an empty string for -# success, an error message for failure. -# For reliable test results building should be done just -# like an actual program would be build, using the same -# command and arguments (including configure results so -# far). -# -# context.CompileProg(text, ext) -# Function called to compile a program, using "ext" for -# the file extention. Must return an empty string for -# success, an error message for failure. -# For reliable test results compiling should be done just -# like an actual source file would be compiled, using the -# same command and arguments (including configure results -# so far). -# -# context.AppendLIBS(lib_name_list) -# Append "lib_name_list" to the value of LIBS. -# "lib_namelist" is a list of strings. -# Return the value of LIBS before changing it (any type -# can be used, it is passed to SetLIBS() later. -# -# context.SetLIBS(value) -# Set LIBS to "value". The type of "value" is what -# AppendLIBS() returned. -# Return the value of LIBS before changing it (any type -# can be used, it is passed to SetLIBS() later. -# -# context.headerfilename -# Name of file to append configure results to, usually -# "confdefs.h". -# The file must not exist or be empty when starting. -# Empty or None to skip this (some tests will not work!). -# -# context.config_h (may be missing). If present, must be a string, which -# will be filled with the contents of a config_h file. -# -# context.vardict Dictionary holding variables used for the tests and -# stores results from the tests, used for the build -# commands. -# Normally contains "CC", "LIBS", "CPPFLAGS", etc. -# -# context.havedict Dictionary holding results from the tests that are to -# be used inside a program. -# Names often start with "HAVE_". These are zero -# (feature not present) or one (feature present). Other -# variables may have any value, e.g., "PERLVERSION" can -# be a number and "SYSTEMNAME" a string. -# - -import re -import string -from types import IntType - -# -# PUBLIC VARIABLES -# - -LogInputFiles = 1 # Set that to log the input files in case of a failed test -LogErrorMessages = 1 # Set that to log Conftest-generated error messages - -# -# PUBLIC FUNCTIONS -# - -# Generic remarks: -# - When a language is specified which is not supported the test fails. The -# message is a bit different, because not all the arguments for the normal -# message are available yet (chicken-egg problem). - - -def CheckBuilder(context, text = None, language = None): - """ - Configure check to see if the compiler works. - Note that this uses the current value of compiler and linker flags, make - sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly. - "language" should be "C" or "C++" and is used to select the compiler. - Default is "C". - "text" may be used to specify the code to be build. - Returns an empty string for success, an error message for failure. - """ - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("%s\n" % msg) - return msg - - if not text: - text = """ -int main() { - return 0; -} -""" - - context.Display("Checking if building a %s file works... " % lang) - ret = context.BuildProg(text, suffix) - _YesNoResult(context, ret, None, text) - return ret - -def CheckCC(context): - """ - Configure check for a working C compiler. - - This checks whether the C compiler, as defined in the $CC construction - variable, can compile a C source file. It uses the current $CCCOM value - too, so that it can test against non working flags. - - """ - context.Display("Checking whether the C compiler works") - text = """ -int main() -{ - return 0; -} -""" - ret = _check_empty_program(context, 'CC', text, 'C') - _YesNoResult(context, ret, None, text) - return ret - -def CheckSHCC(context): - """ - Configure check for a working shared C compiler. - - This checks whether the C compiler, as defined in the $SHCC construction - variable, can compile a C source file. It uses the current $SHCCCOM value - too, so that it can test against non working flags. - - """ - context.Display("Checking whether the (shared) C compiler works") - text = """ -int foo() -{ - return 0; -} -""" - ret = _check_empty_program(context, 'SHCC', text, 'C', use_shared = True) - _YesNoResult(context, ret, None, text) - return ret - -def CheckCXX(context): - """ - Configure check for a working CXX compiler. - - This checks whether the CXX compiler, as defined in the $CXX construction - variable, can compile a CXX source file. It uses the current $CXXCOM value - too, so that it can test against non working flags. - - """ - context.Display("Checking whether the C++ compiler works") - text = """ -int main() -{ - return 0; -} -""" - ret = _check_empty_program(context, 'CXX', text, 'C++') - _YesNoResult(context, ret, None, text) - return ret - -def CheckSHCXX(context): - """ - Configure check for a working shared CXX compiler. - - This checks whether the CXX compiler, as defined in the $SHCXX construction - variable, can compile a CXX source file. It uses the current $SHCXXCOM value - too, so that it can test against non working flags. - - """ - context.Display("Checking whether the (shared) C++ compiler works") - text = """ -int main() -{ - return 0; -} -""" - ret = _check_empty_program(context, 'SHCXX', text, 'C++', use_shared = True) - _YesNoResult(context, ret, None, text) - return ret - -def _check_empty_program(context, comp, text, language, use_shared = False): - """Return 0 on success, 1 otherwise.""" - if not context.env.has_key(comp) or not context.env[comp]: - # The compiler construction variable is not set or empty - return 1 - - lang, suffix, msg = _lang2suffix(language) - if msg: - return 1 - - if use_shared: - return context.CompileSharedObject(text, suffix) - else: - return context.CompileProg(text, suffix) - - -def CheckFunc(context, function_name, header = None, language = None): - """ - Configure check for a function "function_name". - "language" should be "C" or "C++" and is used to select the compiler. - Default is "C". - Optional "header" can be defined to define a function prototype, include a - header file or anything else that comes before main(). - Sets HAVE_function_name in context.havedict according to the result. - Note that this uses the current value of compiler and linker flags, make - sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly. - Returns an empty string for success, an error message for failure. - """ - - # Remarks from autoconf: - # - Don't include because on OSF/1 3.0 it includes - # which includes which contains a prototype for select. - # Similarly for bzero. - # - assert.h is included to define __stub macros and hopefully few - # prototypes, which can conflict with char $1(); below. - # - Override any gcc2 internal prototype to avoid an error. - # - We use char for the function declaration because int might match the - # return type of a gcc2 builtin and then its argument prototype would - # still apply. - # - The GNU C library defines this for functions which it implements to - # always fail with ENOSYS. Some functions are actually named something - # starting with __ and the normal name is an alias. - - if context.headerfilename: - includetext = '#include "%s"' % context.headerfilename - else: - includetext = '' - if not header: - header = """ -#ifdef __cplusplus -extern "C" -#endif -char %s();""" % function_name - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for %s(): %s\n" % (function_name, msg)) - return msg - - text = """ -%(include)s -#include -%(hdr)s - -int main() { -#if defined (__stub_%(name)s) || defined (__stub___%(name)s) - fail fail fail -#else - %(name)s(); -#endif - - return 0; -} -""" % { 'name': function_name, - 'include': includetext, - 'hdr': header } - - context.Display("Checking for %s function %s()... " % (lang, function_name)) - ret = context.BuildProg(text, suffix) - _YesNoResult(context, ret, "HAVE_" + function_name, text, - "Define to 1 if the system has the function `%s'." %\ - function_name) - return ret - - -def CheckHeader(context, header_name, header = None, language = None, - include_quotes = None): - """ - Configure check for a C or C++ header file "header_name". - Optional "header" can be defined to do something before including the - header file (unusual, supported for consistency). - "language" should be "C" or "C++" and is used to select the compiler. - Default is "C". - Sets HAVE_header_name in context.havedict according to the result. - Note that this uses the current value of compiler and linker flags, make - sure $CFLAGS and $CPPFLAGS are set correctly. - Returns an empty string for success, an error message for failure. - """ - # Why compile the program instead of just running the preprocessor? - # It is possible that the header file exists, but actually using it may - # fail (e.g., because it depends on other header files). Thus this test is - # more strict. It may require using the "header" argument. - # - # Use <> by default, because the check is normally used for system header - # files. SCons passes '""' to overrule this. - - # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H. - if context.headerfilename: - includetext = '#include "%s"\n' % context.headerfilename - else: - includetext = '' - if not header: - header = "" - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for header file %s: %s\n" - % (header_name, msg)) - return msg - - if not include_quotes: - include_quotes = "<>" - - text = "%s%s\n#include %s%s%s\n\n" % (includetext, header, - include_quotes[0], header_name, include_quotes[1]) - - context.Display("Checking for %s header file %s... " % (lang, header_name)) - ret = context.CompileProg(text, suffix) - _YesNoResult(context, ret, "HAVE_" + header_name, text, - "Define to 1 if you have the <%s> header file." % header_name) - return ret - - -def CheckType(context, type_name, fallback = None, - header = None, language = None): - """ - Configure check for a C or C++ type "type_name". - Optional "header" can be defined to include a header file. - "language" should be "C" or "C++" and is used to select the compiler. - Default is "C". - Sets HAVE_type_name in context.havedict according to the result. - Note that this uses the current value of compiler and linker flags, make - sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly. - Returns an empty string for success, an error message for failure. - """ - - # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H. - if context.headerfilename: - includetext = '#include "%s"' % context.headerfilename - else: - includetext = '' - if not header: - header = "" - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for %s type: %s\n" % (type_name, msg)) - return msg - - # Remarks from autoconf about this test: - # - Grepping for the type in include files is not reliable (grep isn't - # portable anyway). - # - Using "TYPE my_var;" doesn't work for const qualified types in C++. - # Adding an initializer is not valid for some C++ classes. - # - Using the type as parameter to a function either fails for K&$ C or for - # C++. - # - Using "TYPE *my_var;" is valid in C for some types that are not - # declared (struct something). - # - Using "sizeof(TYPE)" is valid when TYPE is actually a variable. - # - Using the previous two together works reliably. - text = """ -%(include)s -%(header)s - -int main() { - if ((%(name)s *) 0) - return 0; - if (sizeof (%(name)s)) - return 0; -} -""" % { 'include': includetext, - 'header': header, - 'name': type_name } - - context.Display("Checking for %s type %s... " % (lang, type_name)) - ret = context.BuildProg(text, suffix) - _YesNoResult(context, ret, "HAVE_" + type_name, text, - "Define to 1 if the system has the type `%s'." % type_name) - if ret and fallback and context.headerfilename: - f = open(context.headerfilename, "a") - f.write("typedef %s %s;\n" % (fallback, type_name)) - f.close() - - return ret - -def CheckTypeSize(context, type_name, header = None, language = None, expect = None): - """This check can be used to get the size of a given type, or to check whether - the type is of expected size. - - Arguments: - - type : str - the type to check - - includes : sequence - list of headers to include in the test code before testing the type - - language : str - 'C' or 'C++' - - expect : int - if given, will test wether the type has the given number of bytes. - If not given, will automatically find the size. - - Returns: - status : int - 0 if the check failed, or the found size of the type if the check succeeded.""" - - # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H. - if context.headerfilename: - includetext = '#include "%s"' % context.headerfilename - else: - includetext = '' - - if not header: - header = "" - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for %s type: %s\n" % (type_name, msg)) - return msg - - src = includetext + header - if not expect is None: - # Only check if the given size is the right one - context.Display('Checking %s is %d bytes... ' % (type_name, expect)) - - # test code taken from autoconf: this is a pretty clever hack to find that - # a type is of a given size using only compilation. This speeds things up - # quite a bit compared to straightforward code using TryRun - src = src + r""" -typedef %s scons_check_type; - -int main() -{ - static int test_array[1 - 2 * !(((long int) (sizeof(scons_check_type))) == %d)]; - test_array[0] = 0; - - return 0; -} -""" - - st = context.CompileProg(src % (type_name, expect), suffix) - if not st: - context.Display("yes\n") - _Have(context, "SIZEOF_%s" % type_name, expect, - "The size of `%s', as computed by sizeof." % type_name) - return expect - else: - context.Display("no\n") - _LogFailed(context, src, st) - return 0 - else: - # Only check if the given size is the right one - context.Message('Checking size of %s ... ' % type_name) - - # We have to be careful with the program we wish to test here since - # compilation will be attempted using the current environment's flags. - # So make sure that the program will compile without any warning. For - # example using: 'int main(int argc, char** argv)' will fail with the - # '-Wall -Werror' flags since the variables argc and argv would not be - # used in the program... - # - src = src + """ -#include -#include -int main() { - printf("%d", (int)sizeof(""" + type_name + """)); - return 0; -} - """ - st, out = context.RunProg(src, suffix) - try: - size = int(out) - except ValueError: - # If cannot convert output of test prog to an integer (the size), - # something went wront, so just fail - st = 1 - size = 0 - - if not st: - context.Display("yes\n") - _Have(context, "SIZEOF_%s" % type_name, size, - "The size of `%s', as computed by sizeof." % type_name) - return size - else: - context.Display("no\n") - _LogFailed(context, src, st) - return 0 - - return 0 - -def CheckDeclaration(context, symbol, includes = None, language = None): - """Checks whether symbol is declared. - - Use the same test as autoconf, that is test whether the symbol is defined - as a macro or can be used as an r-value. - - Arguments: - symbol : str - the symbol to check - includes : str - Optional "header" can be defined to include a header file. - language : str - only C and C++ supported. - - Returns: - status : bool - True if the check failed, False if succeeded.""" - - # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H. - if context.headerfilename: - includetext = '#include "%s"' % context.headerfilename - else: - includetext = '' - - if not includes: - includes = "" - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for declaration %s: %s\n" % (type_name, msg)) - return msg - - src = includetext + includes - context.Display('Checking whether %s is declared... ' % symbol) - - src = src + r""" -int main() -{ -#ifndef %s - (void) %s; -#endif - ; - return 0; -} -""" % (symbol, symbol) - - st = context.CompileProg(src, suffix) - _YesNoResult(context, st, "HAVE_DECL_" + symbol, src, - "Set to 1 if %s is defined." % symbol) - return st - -def CheckLib(context, libs, func_name = None, header = None, - extra_libs = None, call = None, language = None, autoadd = 1): - """ - Configure check for a C or C++ libraries "libs". Searches through - the list of libraries, until one is found where the test succeeds. - Tests if "func_name" or "call" exists in the library. Note: if it exists - in another library the test succeeds anyway! - Optional "header" can be defined to include a header file. If not given a - default prototype for "func_name" is added. - Optional "extra_libs" is a list of library names to be added after - "lib_name" in the build command. To be used for libraries that "lib_name" - depends on. - Optional "call" replaces the call to "func_name" in the test code. It must - consist of complete C statements, including a trailing ";". - Both "func_name" and "call" arguments are optional, and in that case, just - linking against the libs is tested. - "language" should be "C" or "C++" and is used to select the compiler. - Default is "C". - Note that this uses the current value of compiler and linker flags, make - sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly. - Returns an empty string for success, an error message for failure. - """ - # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H. - if context.headerfilename: - includetext = '#include "%s"' % context.headerfilename - else: - includetext = '' - if not header: - header = "" - - text = """ -%s -%s""" % (includetext, header) - - # Add a function declaration if needed. - if func_name and func_name != "main": - if not header: - text = text + """ -#ifdef __cplusplus -extern "C" -#endif -char %s(); -""" % func_name - - # The actual test code. - if not call: - call = "%s();" % func_name - - # if no function to test, leave main() blank - text = text + """ -int -main() { - %s -return 0; -} -""" % (call or "") - - if call: - i = string.find(call, "\n") - if i > 0: - calltext = call[:i] + ".." - elif call[-1] == ';': - calltext = call[:-1] - else: - calltext = call - - for lib_name in libs: - - lang, suffix, msg = _lang2suffix(language) - if msg: - context.Display("Cannot check for library %s: %s\n" % (lib_name, msg)) - return msg - - # if a function was specified to run in main(), say it - if call: - context.Display("Checking for %s in %s library %s... " - % (calltext, lang, lib_name)) - # otherwise, just say the name of library and language - else: - context.Display("Checking for %s library %s... " - % (lang, lib_name)) - - if lib_name: - l = [ lib_name ] - if extra_libs: - l.extend(extra_libs) - oldLIBS = context.AppendLIBS(l) - sym = "HAVE_LIB" + lib_name - else: - oldLIBS = -1 - sym = None - - ret = context.BuildProg(text, suffix) - - _YesNoResult(context, ret, sym, text, - "Define to 1 if you have the `%s' library." % lib_name) - if oldLIBS != -1 and (ret or not autoadd): - context.SetLIBS(oldLIBS) - - if not ret: - return ret - - return ret - -# -# END OF PUBLIC FUNCTIONS -# - -def _YesNoResult(context, ret, key, text, comment = None): - """ - Handle the result of a test with a "yes" or "no" result. - "ret" is the return value: empty if OK, error message when not. - "key" is the name of the symbol to be defined (HAVE_foo). - "text" is the source code of the program used for testing. - "comment" is the C comment to add above the line defining the symbol (the - comment is automatically put inside a /* */). If None, no comment is added. - """ - if key: - _Have(context, key, not ret, comment) - if ret: - context.Display("no\n") - _LogFailed(context, text, ret) - else: - context.Display("yes\n") - - -def _Have(context, key, have, comment = None): - """ - Store result of a test in context.havedict and context.headerfilename. - "key" is a "HAVE_abc" name. It is turned into all CAPITALS and non- - alphanumerics are replaced by an underscore. - The value of "have" can be: - 1 - Feature is defined, add "#define key". - 0 - Feature is not defined, add "/* #undef key */". - Adding "undef" is what autoconf does. Not useful for the - compiler, but it shows that the test was done. - number - Feature is defined to this number "#define key have". - Doesn't work for 0 or 1, use a string then. - string - Feature is defined to this string "#define key have". - Give "have" as is should appear in the header file, include quotes - when desired and escape special characters! - """ - key_up = string.upper(key) - key_up = re.sub('[^A-Z0-9_]', '_', key_up) - context.havedict[key_up] = have - if have == 1: - line = "#define %s 1\n" % key_up - elif have == 0: - line = "/* #undef %s */\n" % key_up - elif type(have) == IntType: - line = "#define %s %d\n" % (key_up, have) - else: - line = "#define %s %s\n" % (key_up, str(have)) - - if comment is not None: - lines = "\n/* %s */\n" % comment + line - else: - lines = "\n" + line - - if context.headerfilename: - f = open(context.headerfilename, "a") - f.write(lines) - f.close() - elif hasattr(context,'config_h'): - context.config_h = context.config_h + lines - - -def _LogFailed(context, text, msg): - """ - Write to the log about a failed program. - Add line numbers, so that error messages can be understood. - """ - if LogInputFiles: - context.Log("Failed program was:\n") - lines = string.split(text, '\n') - if len(lines) and lines[-1] == '': - lines = lines[:-1] # remove trailing empty line - n = 1 - for line in lines: - context.Log("%d: %s\n" % (n, line)) - n = n + 1 - if LogErrorMessages: - context.Log("Error message: %s\n" % msg) - - -def _lang2suffix(lang): - """ - Convert a language name to a suffix. - When "lang" is empty or None C is assumed. - Returns a tuple (lang, suffix, None) when it works. - For an unrecognized language returns (None, None, msg). - Where: - lang = the unified language name - suffix = the suffix, including the leading dot - msg = an error message - """ - if not lang or lang in ["C", "c"]: - return ("C", ".c", None) - if lang in ["c++", "C++", "cpp", "CXX", "cxx"]: - return ("C++", ".cpp", None) - - return None, None, "Unsupported language: %s" % lang - - -# vim: set sw=4 et sts=4 tw=79 fo+=l: diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Conftest.pyc deleted file mode 100644 index 1800f4dbaa6eebb7ab2d68993f403fa999fb5e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18263 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.py deleted file mode 100644 index c6485b6fa..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.py +++ /dev/null @@ -1,216 +0,0 @@ -"""SCons.Debug - -Code for debugging SCons internal things. Not everything here is -guaranteed to work all the way back to Python 1.5.2, and shouldn't be -needed by most users. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Debug.py 3842 2008/12/20 22:59:52 scons" - -import os -import string -import sys - -# Recipe 14.10 from the Python Cookbook. -try: - import weakref -except ImportError: - def logInstanceCreation(instance, name=None): - pass -else: - def logInstanceCreation(instance, name=None): - if name is None: - name = instance.__class__.__name__ - if not tracked_classes.has_key(name): - tracked_classes[name] = [] - tracked_classes[name].append(weakref.ref(instance)) - - - -tracked_classes = {} - -def string_to_classes(s): - if s == '*': - c = tracked_classes.keys() - c.sort() - return c - else: - return string.split(s) - -def fetchLoggedInstances(classes="*"): - classnames = string_to_classes(classes) - return map(lambda cn: (cn, len(tracked_classes[cn])), classnames) - -def countLoggedInstances(classes, file=sys.stdout): - for classname in string_to_classes(classes): - file.write("%s: %d\n" % (classname, len(tracked_classes[classname]))) - -def listLoggedInstances(classes, file=sys.stdout): - for classname in string_to_classes(classes): - file.write('\n%s:\n' % classname) - for ref in tracked_classes[classname]: - obj = ref() - if obj is not None: - file.write(' %s\n' % repr(obj)) - -def dumpLoggedInstances(classes, file=sys.stdout): - for classname in string_to_classes(classes): - file.write('\n%s:\n' % classname) - for ref in tracked_classes[classname]: - obj = ref() - if obj is not None: - file.write(' %s:\n' % obj) - for key, value in obj.__dict__.items(): - file.write(' %20s : %s\n' % (key, value)) - - - -if sys.platform[:5] == "linux": - # Linux doesn't actually support memory usage stats from getrusage(). - def memory(): - mstr = open('/proc/self/stat').read() - mstr = string.split(mstr)[22] - return int(mstr) -else: - try: - import resource - except ImportError: - try: - import win32process - import win32api - except ImportError: - def memory(): - return 0 - else: - def memory(): - process_handle = win32api.GetCurrentProcess() - memory_info = win32process.GetProcessMemoryInfo( process_handle ) - return memory_info['PeakWorkingSetSize'] - else: - def memory(): - res = resource.getrusage(resource.RUSAGE_SELF) - return res[4] - -# returns caller's stack -def caller_stack(*backlist): - import traceback - if not backlist: - backlist = [0] - result = [] - for back in backlist: - tb = traceback.extract_stack(limit=3+back) - key = tb[0][:3] - result.append('%s:%d(%s)' % func_shorten(key)) - return result - -caller_bases = {} -caller_dicts = {} - -# trace a caller's stack -def caller_trace(back=0): - import traceback - tb = traceback.extract_stack(limit=3+back) - tb.reverse() - callee = tb[1][:3] - caller_bases[callee] = caller_bases.get(callee, 0) + 1 - for caller in tb[2:]: - caller = callee + caller[:3] - try: - entry = caller_dicts[callee] - except KeyError: - caller_dicts[callee] = entry = {} - entry[caller] = entry.get(caller, 0) + 1 - callee = caller - -# print a single caller and its callers, if any -def _dump_one_caller(key, file, level=0): - l = [] - for c,v in caller_dicts[key].items(): - l.append((-v,c)) - l.sort() - leader = ' '*level - for v,c in l: - file.write("%s %6d %s:%d(%s)\n" % ((leader,-v) + func_shorten(c[-3:]))) - if caller_dicts.has_key(c): - _dump_one_caller(c, file, level+1) - -# print each call tree -def dump_caller_counts(file=sys.stdout): - keys = caller_bases.keys() - keys.sort() - for k in keys: - file.write("Callers of %s:%d(%s), %d calls:\n" - % (func_shorten(k) + (caller_bases[k],))) - _dump_one_caller(k, file) - -shorten_list = [ - ( '/scons/SCons/', 1), - ( '/src/engine/SCons/', 1), - ( '/usr/lib/python', 0), -] - -if os.sep != '/': - def platformize(t): - return (string.replace(t[0], '/', os.sep), t[1]) - shorten_list = map(platformize, shorten_list) - del platformize - -def func_shorten(func_tuple): - f = func_tuple[0] - for t in shorten_list: - i = string.find(f, t[0]) - if i >= 0: - if t[1]: - i = i + len(t[0]) - return (f[i:],)+func_tuple[1:] - return func_tuple - - -TraceFP = {} -if sys.platform == 'win32': - TraceDefault = 'con' -else: - TraceDefault = '/dev/tty' - -def Trace(msg, file=None, mode='w'): - """Write a trace message to a file. Whenever a file is specified, - it becomes the default for the next call to Trace().""" - global TraceDefault - if file is None: - file = TraceDefault - else: - TraceDefault = file - try: - fp = TraceFP[file] - except KeyError: - try: - fp = TraceFP[file] = open(file, mode) - except TypeError: - # Assume we were passed an open file pointer. - fp = file - fp.write(msg) - fp.flush() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Debug.pyc deleted file mode 100644 index 091bb0e3beeed215b4b62c6c0b538ebfaf6f8aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7605 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.py deleted file mode 100644 index fc0ab26ba..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.py +++ /dev/null @@ -1,463 +0,0 @@ -"""SCons.Defaults - -Builders and other things for the local site. Here's where we'll -duplicate the functionality of autoconf until we move it into the -installation procedure or use something like qmconf. - -The code that reads the registry to find MSVC components was borrowed -from distutils.msvccompiler. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Defaults.py 3842 2008/12/20 22:59:52 scons" - - - -import os -import os.path -import shutil -import stat -import string -import time -import types -import sys - -import SCons.Action -import SCons.Builder -import SCons.CacheDir -import SCons.Environment -import SCons.PathList -import SCons.Subst -import SCons.Tool - -# A placeholder for a default Environment (for fetching source files -# from source code management systems and the like). This must be -# initialized later, after the top-level directory is set by the calling -# interface. -_default_env = None - -# Lazily instantiate the default environment so the overhead of creating -# it doesn't apply when it's not needed. -def _fetch_DefaultEnvironment(*args, **kw): - """ - Returns the already-created default construction environment. - """ - global _default_env - return _default_env - -def DefaultEnvironment(*args, **kw): - """ - Initial public entry point for creating the default construction - Environment. - - After creating the environment, we overwrite our name - (DefaultEnvironment) with the _fetch_DefaultEnvironment() function, - which more efficiently returns the initialized default construction - environment without checking for its existence. - - (This function still exists with its _default_check because someone - else (*cough* Script/__init__.py *cough*) may keep a reference - to this function. So we can't use the fully functional idiom of - having the name originally be a something that *only* creates the - construction environment and then overwrites the name.) - """ - global _default_env - if not _default_env: - import SCons.Util - _default_env = apply(SCons.Environment.Environment, args, kw) - if SCons.Util.md5: - _default_env.Decider('MD5') - else: - _default_env.Decider('timestamp-match') - global DefaultEnvironment - DefaultEnvironment = _fetch_DefaultEnvironment - _default_env._CacheDir_path = None - return _default_env - -# Emitters for setting the shared attribute on object files, -# and an action for checking that all of the source files -# going into a shared library are, in fact, shared. -def StaticObjectEmitter(target, source, env): - for tgt in target: - tgt.attributes.shared = None - return (target, source) - -def SharedObjectEmitter(target, source, env): - for tgt in target: - tgt.attributes.shared = 1 - return (target, source) - -def SharedFlagChecker(source, target, env): - same = env.subst('$STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME') - if same == '0' or same == '' or same == 'False': - for src in source: - try: - shared = src.attributes.shared - except AttributeError: - shared = None - if not shared: - raise SCons.Errors.UserError, "Source file: %s is static and is not compatible with shared target: %s" % (src, target[0]) - -SharedCheck = SCons.Action.Action(SharedFlagChecker, None) - -# Some people were using these variable name before we made -# SourceFileScanner part of the public interface. Don't break their -# SConscript files until we've given them some fair warning and a -# transition period. -CScan = SCons.Tool.CScanner -DScan = SCons.Tool.DScanner -LaTeXScan = SCons.Tool.LaTeXScanner -ObjSourceScan = SCons.Tool.SourceFileScanner -ProgScan = SCons.Tool.ProgramScanner - -# These aren't really tool scanners, so they don't quite belong with -# the rest of those in Tool/__init__.py, but I'm not sure where else -# they should go. Leave them here for now. -import SCons.Scanner.Dir -DirScanner = SCons.Scanner.Dir.DirScanner() -DirEntryScanner = SCons.Scanner.Dir.DirEntryScanner() - -# Actions for common languages. -CAction = SCons.Action.Action("$CCCOM", "$CCCOMSTR") -ShCAction = SCons.Action.Action("$SHCCCOM", "$SHCCCOMSTR") -CXXAction = SCons.Action.Action("$CXXCOM", "$CXXCOMSTR") -ShCXXAction = SCons.Action.Action("$SHCXXCOM", "$SHCXXCOMSTR") - -ASAction = SCons.Action.Action("$ASCOM", "$ASCOMSTR") -ASPPAction = SCons.Action.Action("$ASPPCOM", "$ASPPCOMSTR") - -LinkAction = SCons.Action.Action("$LINKCOM", "$LINKCOMSTR") -ShLinkAction = SCons.Action.Action("$SHLINKCOM", "$SHLINKCOMSTR") - -LdModuleLinkAction = SCons.Action.Action("$LDMODULECOM", "$LDMODULECOMSTR") - -# Common tasks that we allow users to perform in platform-independent -# ways by creating ActionFactory instances. -ActionFactory = SCons.Action.ActionFactory - -def get_paths_str(dest): - # If dest is a list, we need to manually call str() on each element - if SCons.Util.is_List(dest): - elem_strs = [] - for element in dest: - elem_strs.append('"' + str(element) + '"') - return '[' + string.join(elem_strs, ', ') + ']' - else: - return '"' + str(dest) + '"' - -def chmod_func(dest, mode): - SCons.Node.FS.invalidate_node_memos(dest) - if not SCons.Util.is_List(dest): - dest = [dest] - for element in dest: - os.chmod(str(element), mode) - -def chmod_strfunc(dest, mode): - return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode) - -Chmod = ActionFactory(chmod_func, chmod_strfunc) - -def copy_func(dest, src): - SCons.Node.FS.invalidate_node_memos(dest) - if SCons.Util.is_List(src) and os.path.isdir(dest): - for file in src: - shutil.copy2(file, dest) - return 0 - elif os.path.isfile(src): - return shutil.copy2(src, dest) - else: - return shutil.copytree(src, dest, 1) - -Copy = ActionFactory(copy_func, - lambda dest, src: 'Copy("%s", "%s")' % (dest, src), - convert=str) - -def delete_func(dest, must_exist=0): - SCons.Node.FS.invalidate_node_memos(dest) - if not SCons.Util.is_List(dest): - dest = [dest] - for entry in dest: - entry = str(entry) - if not must_exist and not os.path.exists(entry): - continue - if not os.path.exists(entry) or os.path.isfile(entry): - os.unlink(entry) - continue - else: - shutil.rmtree(entry, 1) - continue - -def delete_strfunc(dest, must_exist=0): - return 'Delete(%s)' % get_paths_str(dest) - -Delete = ActionFactory(delete_func, delete_strfunc) - -def mkdir_func(dest): - SCons.Node.FS.invalidate_node_memos(dest) - if not SCons.Util.is_List(dest): - dest = [dest] - for entry in dest: - os.makedirs(str(entry)) - -Mkdir = ActionFactory(mkdir_func, - lambda dir: 'Mkdir(%s)' % get_paths_str(dir)) - -def move_func(dest, src): - SCons.Node.FS.invalidate_node_memos(dest) - SCons.Node.FS.invalidate_node_memos(src) - os.rename(src, dest) - -Move = ActionFactory(move_func, - lambda dest, src: 'Move("%s", "%s")' % (dest, src), - convert=str) - -def touch_func(dest): - SCons.Node.FS.invalidate_node_memos(dest) - if not SCons.Util.is_List(dest): - dest = [dest] - for file in dest: - file = str(file) - mtime = int(time.time()) - if os.path.exists(file): - atime = os.path.getatime(file) - else: - open(file, 'w') - atime = mtime - os.utime(file, (atime, mtime)) - -Touch = ActionFactory(touch_func, - lambda file: 'Touch(%s)' % get_paths_str(file)) - -# Internal utility functions - -def _concat(prefix, list, suffix, env, f=lambda x: x, target=None, source=None): - """ - Creates a new list from 'list' by first interpolating each element - in the list using the 'env' dictionary and then calling f on the - list, and finally calling _concat_ixes to concatenate 'prefix' and - 'suffix' onto each element of the list. - """ - if not list: - return list - - l = f(SCons.PathList.PathList(list).subst_path(env, target, source)) - if not l is None: - list = l - - return _concat_ixes(prefix, list, suffix, env) - -def _concat_ixes(prefix, list, suffix, env): - """ - Creates a new list from 'list' by concatenating the 'prefix' and - 'suffix' arguments onto each element of the list. A trailing space - on 'prefix' or leading space on 'suffix' will cause them to be put - into separate list elements rather than being concatenated. - """ - - result = [] - - # ensure that prefix and suffix are strings - prefix = str(env.subst(prefix, SCons.Subst.SUBST_RAW)) - suffix = str(env.subst(suffix, SCons.Subst.SUBST_RAW)) - - for x in list: - if isinstance(x, SCons.Node.FS.File): - result.append(x) - continue - x = str(x) - if x: - - if prefix: - if prefix[-1] == ' ': - result.append(prefix[:-1]) - elif x[:len(prefix)] != prefix: - x = prefix + x - - result.append(x) - - if suffix: - if suffix[0] == ' ': - result.append(suffix[1:]) - elif x[-len(suffix):] != suffix: - result[-1] = result[-1]+suffix - - return result - -def _stripixes(prefix, list, suffix, stripprefixes, stripsuffixes, env, c=None): - """ - This is a wrapper around _concat()/_concat_ixes() that checks for the - existence of prefixes or suffixes on list elements and strips them - where it finds them. This is used by tools (like the GNU linker) - that need to turn something like 'libfoo.a' into '-lfoo'. - """ - - if not list: - return list - - if not callable(c): - env_c = env['_concat'] - if env_c != _concat and callable(env_c): - # There's a custom _concat() method in the construction - # environment, and we've allowed people to set that in - # the past (see test/custom-concat.py), so preserve the - # backwards compatibility. - c = env_c - else: - c = _concat_ixes - - stripprefixes = map(env.subst, SCons.Util.flatten(stripprefixes)) - stripsuffixes = map(env.subst, SCons.Util.flatten(stripsuffixes)) - - stripped = [] - for l in SCons.PathList.PathList(list).subst_path(env, None, None): - if isinstance(l, SCons.Node.FS.File): - stripped.append(l) - continue - - if not SCons.Util.is_String(l): - l = str(l) - - for stripprefix in stripprefixes: - lsp = len(stripprefix) - if l[:lsp] == stripprefix: - l = l[lsp:] - # Do not strip more than one prefix - break - - for stripsuffix in stripsuffixes: - lss = len(stripsuffix) - if l[-lss:] == stripsuffix: - l = l[:-lss] - # Do not strip more than one suffix - break - - stripped.append(l) - - return c(prefix, stripped, suffix, env) - -def _defines(prefix, defs, suffix, env, c=_concat_ixes): - """A wrapper around _concat_ixes that turns a list or string - into a list of C preprocessor command-line definitions. - """ - if SCons.Util.is_List(defs): - l = [] - for d in defs: - if SCons.Util.is_List(d) or type(d) is types.TupleType: - l.append(str(d[0]) + '=' + str(d[1])) - else: - l.append(str(d)) - elif SCons.Util.is_Dict(defs): - # The items in a dictionary are stored in random order, but - # if the order of the command-line options changes from - # invocation to invocation, then the signature of the command - # line will change and we'll get random unnecessary rebuilds. - # Consequently, we have to sort the keys to ensure a - # consistent order... - l = [] - keys = defs.keys() - keys.sort() - for k in keys: - v = defs[k] - if v is None: - l.append(str(k)) - else: - l.append(str(k) + '=' + str(v)) - else: - l = [str(defs)] - return c(prefix, env.subst_path(l), suffix, env) - -class NullCmdGenerator: - """This is a callable class that can be used in place of other - command generators if you don't want them to do anything. - - The __call__ method for this class simply returns the thing - you instantiated it with. - - Example usage: - env["DO_NOTHING"] = NullCmdGenerator - env["LINKCOM"] = "${DO_NOTHING('$LINK $SOURCES $TARGET')}" - """ - - def __init__(self, cmd): - self.cmd = cmd - - def __call__(self, target, source, env, for_signature=None): - return self.cmd - -class Variable_Method_Caller: - """A class for finding a construction variable on the stack and - calling one of its methods. - - We use this to support "construction variables" in our string - eval()s that actually stand in for methods--specifically, use - of "RDirs" in call to _concat that should actually execute the - "TARGET.RDirs" method. (We used to support this by creating a little - "build dictionary" that mapped RDirs to the method, but this got in - the way of Memoizing construction environments, because we had to - create new environment objects to hold the variables.) - """ - def __init__(self, variable, method): - self.variable = variable - self.method = method - def __call__(self, *args, **kw): - try: 1/0 - except ZeroDivisionError: - # Don't start iterating with the current stack-frame to - # prevent creating reference cycles (f_back is safe). - frame = sys.exc_info()[2].tb_frame.f_back - variable = self.variable - while frame: - if frame.f_locals.has_key(variable): - v = frame.f_locals[variable] - if v: - method = getattr(v, self.method) - return apply(method, args, kw) - frame = frame.f_back - return None - -ConstructionEnvironment = { - 'BUILDERS' : {}, - 'SCANNERS' : [], - 'CONFIGUREDIR' : '#/.sconf_temp', - 'CONFIGURELOG' : '#/config.log', - 'CPPSUFFIXES' : SCons.Tool.CSuffixes, - 'DSUFFIXES' : SCons.Tool.DSuffixes, - 'ENV' : {}, - 'IDLSUFFIXES' : SCons.Tool.IDLSuffixes, - 'LATEXSUFFIXES' : SCons.Tool.LaTeXSuffixes, - '_concat' : _concat, - '_defines' : _defines, - '_stripixes' : _stripixes, - '_LIBFLAGS' : '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}', - '_LIBDIRFLAGS' : '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)', - '_CPPINCFLAGS' : '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)', - '_CPPDEFFLAGS' : '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}', - 'TEMPFILE' : NullCmdGenerator, - 'Dir' : Variable_Method_Caller('TARGET', 'Dir'), - 'Dirs' : Variable_Method_Caller('TARGET', 'Dirs'), - 'File' : Variable_Method_Caller('TARGET', 'File'), - 'RDirs' : Variable_Method_Caller('TARGET', 'RDirs'), -} diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Defaults.pyc deleted file mode 100644 index 5d4c3a69a1c6f8cc99ba8ab7c21c7c8cb89bc21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16152 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' % repr(self.name) - - def __str__(self): - return self.__repr__() - - def __getattr__(self, name): - if name == 'env': - return self.object - elif name == 'builder': - return self.method - else: - raise AttributeError, name - - def __setattr__(self, name, value): - if name == 'env': - self.object = value - elif name == 'builder': - self.method = value - else: - self.__dict__[name] = value - - # This allows a Builder to be executed directly - # through the Environment to which it's attached. - # In practice, we shouldn't need this, because - # builders actually get executed through a Node. - # But we do have a unit test for this, and can't - # yet rule out that it would be useful in the - # future, so leave it for now. - #def execute(self, **kw): - # kw['env'] = self.env - # apply(self.builder.execute, (), kw) - -class BuilderDict(UserDict): - """This is a dictionary-like class used by an Environment to hold - the Builders. We need to do this because every time someone changes - the Builders in the Environment's BUILDERS dictionary, we must - update the Environment's attributes.""" - def __init__(self, dict, env): - # Set self.env before calling the superclass initialization, - # because it will end up calling our other methods, which will - # need to point the values in this dictionary to self.env. - self.env = env - UserDict.__init__(self, dict) - - def __semi_deepcopy__(self): - return self.__class__(self.data, self.env) - - def __setitem__(self, item, val): - try: - method = getattr(self.env, item).method - except AttributeError: - pass - else: - self.env.RemoveMethod(method) - UserDict.__setitem__(self, item, val) - BuilderWrapper(self.env, val, item) - - def __delitem__(self, item): - UserDict.__delitem__(self, item) - delattr(self.env, item) - - def update(self, dict): - for i, v in dict.items(): - self.__setitem__(i, v) - - - -_is_valid_var = re.compile(r'[_a-zA-Z]\w*$') - -def is_valid_construction_var(varstr): - """Return if the specified string is a legitimate construction - variable. - """ - return _is_valid_var.match(varstr) - - - -class SubstitutionEnvironment: - """Base class for different flavors of construction environments. - - This class contains a minimal set of methods that handle contruction - variable expansion and conversion of strings to Nodes, which may or - may not be actually useful as a stand-alone class. Which methods - ended up in this class is pretty arbitrary right now. They're - basically the ones which we've empirically determined are common to - the different construction environment subclasses, and most of the - others that use or touch the underlying dictionary of construction - variables. - - Eventually, this class should contain all the methods that we - determine are necessary for a "minimal" interface to the build engine. - A full "native Python" SCons environment has gotten pretty heavyweight - with all of the methods and Tools and construction variables we've - jammed in there, so it would be nice to have a lighter weight - alternative for interfaces that don't need all of the bells and - whistles. (At some point, we'll also probably rename this class - "Base," since that more reflects what we want this class to become, - but because we've released comments that tell people to subclass - Environment.Base to create their own flavors of construction - environment, we'll save that for a future refactoring when this - class actually becomes useful.) - """ - - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - def __init__(self, **kw): - """Initialization of an underlying SubstitutionEnvironment class. - """ - if __debug__: logInstanceCreation(self, 'Environment.SubstitutionEnvironment') - self.fs = SCons.Node.FS.get_default_fs() - self.ans = SCons.Node.Alias.default_ans - self.lookup_list = SCons.Node.arg2nodes_lookups - self._dict = kw.copy() - self._init_special() - self.added_methods = [] - #self._memo = {} - - def _init_special(self): - """Initial the dispatch tables for special handling of - special construction variables.""" - self._special_del = {} - self._special_del['SCANNERS'] = _del_SCANNERS - - self._special_set = {} - for key in reserved_construction_var_names: - self._special_set[key] = _set_reserved - for key in future_reserved_construction_var_names: - self._special_set[key] = _set_future_reserved - self._special_set['BUILDERS'] = _set_BUILDERS - self._special_set['SCANNERS'] = _set_SCANNERS - - # Freeze the keys of self._special_set in a list for use by - # methods that need to check. (Empirically, list scanning has - # gotten better than dict.has_key() in Python 2.5.) - self._special_set_keys = self._special_set.keys() - - def __cmp__(self, other): - return cmp(self._dict, other._dict) - - def __delitem__(self, key): - special = self._special_del.get(key) - if special: - special(self, key) - else: - del self._dict[key] - - def __getitem__(self, key): - return self._dict[key] - - def __setitem__(self, key, value): - # This is heavily used. This implementation is the best we have - # according to the timings in bench/env.__setitem__.py. - # - # The "key in self._special_set_keys" test here seems to perform - # pretty well for the number of keys we have. A hard-coded - # list works a little better in Python 2.5, but that has the - # disadvantage of maybe getting out of sync if we ever add more - # variable names. Using self._special_set.has_key() works a - # little better in Python 2.4, but is worse then this test. - # So right now it seems like a good trade-off, but feel free to - # revisit this with bench/env.__setitem__.py as needed (and - # as newer versions of Python come out). - if key in self._special_set_keys: - self._special_set[key](self, key, value) - else: - # If we already have the entry, then it's obviously a valid - # key and we don't need to check. If we do check, using a - # global, pre-compiled regular expression directly is more - # efficient than calling another function or a method. - if not self._dict.has_key(key) \ - and not _is_valid_var.match(key): - raise SCons.Errors.UserError, "Illegal construction variable `%s'" % key - self._dict[key] = value - - def get(self, key, default=None): - "Emulates the get() method of dictionaries.""" - return self._dict.get(key, default) - - def has_key(self, key): - return self._dict.has_key(key) - - def __contains__(self, key): - return self._dict.__contains__(key) - - def items(self): - return self._dict.items() - - def arg2nodes(self, args, node_factory=_null, lookup_list=_null, **kw): - if node_factory is _null: - node_factory = self.fs.File - if lookup_list is _null: - lookup_list = self.lookup_list - - if not args: - return [] - - args = SCons.Util.flatten(args) - - nodes = [] - for v in args: - if SCons.Util.is_String(v): - n = None - for l in lookup_list: - n = l(v) - if not n is None: - break - if not n is None: - if SCons.Util.is_String(n): - # n = self.subst(n, raw=1, **kw) - kw['raw'] = 1 - n = apply(self.subst, (n,), kw) - if node_factory: - n = node_factory(n) - if SCons.Util.is_List(n): - nodes.extend(n) - else: - nodes.append(n) - elif node_factory: - # v = node_factory(self.subst(v, raw=1, **kw)) - kw['raw'] = 1 - v = node_factory(apply(self.subst, (v,), kw)) - if SCons.Util.is_List(v): - nodes.extend(v) - else: - nodes.append(v) - else: - nodes.append(v) - - return nodes - - def gvars(self): - return self._dict - - def lvars(self): - return {} - - def subst(self, string, raw=0, target=None, source=None, conv=None): - """Recursively interpolates construction variables from the - Environment into the specified string, returning the expanded - result. Construction variables are specified by a $ prefix - in the string and begin with an initial underscore or - alphabetic character followed by any number of underscores - or alphanumeric characters. The construction variable names - may be surrounded by curly braces to separate the name from - trailing characters. - """ - gvars = self.gvars() - lvars = self.lvars() - lvars['__env__'] = self - return SCons.Subst.scons_subst(string, self, raw, target, source, gvars, lvars, conv) - - def subst_kw(self, kw, raw=0, target=None, source=None): - nkw = {} - for k, v in kw.items(): - k = self.subst(k, raw, target, source) - if SCons.Util.is_String(v): - v = self.subst(v, raw, target, source) - nkw[k] = v - return nkw - - def subst_list(self, string, raw=0, target=None, source=None, conv=None): - """Calls through to SCons.Subst.scons_subst_list(). See - the documentation for that function.""" - gvars = self.gvars() - lvars = self.lvars() - lvars['__env__'] = self - return SCons.Subst.scons_subst_list(string, self, raw, target, source, gvars, lvars, conv) - - def subst_path(self, path, target=None, source=None): - """Substitute a path list, turning EntryProxies into Nodes - and leaving Nodes (and other objects) as-is.""" - - if not SCons.Util.is_List(path): - path = [path] - - def s(obj): - """This is the "string conversion" routine that we have our - substitutions use to return Nodes, not strings. This relies - on the fact that an EntryProxy object has a get() method that - returns the underlying Node that it wraps, which is a bit of - architectural dependence that we might need to break or modify - in the future in response to additional requirements.""" - try: - get = obj.get - except AttributeError: - obj = SCons.Util.to_String_for_subst(obj) - else: - obj = get() - return obj - - r = [] - for p in path: - if SCons.Util.is_String(p): - p = self.subst(p, target=target, source=source, conv=s) - if SCons.Util.is_List(p): - if len(p) == 1: - p = p[0] - else: - # We have an object plus a string, or multiple - # objects that we need to smush together. No choice - # but to make them into a string. - p = string.join(map(SCons.Util.to_String_for_subst, p), '') - else: - p = s(p) - r.append(p) - return r - - subst_target_source = subst - - def backtick(self, command): - import subprocess - # common arguments - kw = { 'stdin' : 'devnull', - 'stdout' : subprocess.PIPE, - 'stderr' : subprocess.PIPE, - 'universal_newlines' : True, - } - # if the command is a list, assume it's been quoted - # othewise force a shell - if not SCons.Util.is_List(command): kw['shell'] = True - # run constructed command - #TODO(1.5) p = SCons.Action._subproc(self, command, **kw) - p = apply(SCons.Action._subproc, (self, command), kw) - out,err = p.communicate() - status = p.wait() - if err: - sys.stderr.write(err) - if status: - raise OSError("'%s' exited %d" % (command, status)) - return out - - def AddMethod(self, function, name=None): - """ - Adds the specified function as a method of this construction - environment with the specified name. If the name is omitted, - the default name is the name of the function itself. - """ - method = MethodWrapper(self, function, name) - self.added_methods.append(method) - - def RemoveMethod(self, function): - """ - Removes the specified function's MethodWrapper from the - added_methods list, so we don't re-bind it when making a clone. - """ - is_not_func = lambda dm, f=function: not dm.method is f - self.added_methods = filter(is_not_func, self.added_methods) - - def Override(self, overrides): - """ - Produce a modified environment whose variables are overriden by - the overrides dictionaries. "overrides" is a dictionary that - will override the variables of this environment. - - This function is much more efficient than Clone() or creating - a new Environment because it doesn't copy the construction - environment dictionary, it just wraps the underlying construction - environment, and doesn't even create a wrapper object if there - are no overrides. - """ - if not overrides: return self - o = copy_non_reserved_keywords(overrides) - if not o: return self - overrides = {} - merges = None - for key, value in o.items(): - if key == 'parse_flags': - merges = value - else: - overrides[key] = SCons.Subst.scons_subst_once(value, self, key) - env = OverrideEnvironment(self, overrides) - if merges: env.MergeFlags(merges) - return env - - def ParseFlags(self, *flags): - """ - Parse the set of flags and return a dict with the flags placed - in the appropriate entry. The flags are treated as a typical - set of command-line flags for a GNU-like toolchain and used to - populate the entries in the dict immediately below. If one of - the flag strings begins with a bang (exclamation mark), it is - assumed to be a command and the rest of the string is executed; - the result of that evaluation is then added to the dict. - """ - dict = { - 'ASFLAGS' : SCons.Util.CLVar(''), - 'CFLAGS' : SCons.Util.CLVar(''), - 'CCFLAGS' : SCons.Util.CLVar(''), - 'CPPDEFINES' : [], - 'CPPFLAGS' : SCons.Util.CLVar(''), - 'CPPPATH' : [], - 'FRAMEWORKPATH' : SCons.Util.CLVar(''), - 'FRAMEWORKS' : SCons.Util.CLVar(''), - 'LIBPATH' : [], - 'LIBS' : [], - 'LINKFLAGS' : SCons.Util.CLVar(''), - 'RPATH' : [], - } - - # The use of the "me" parameter to provide our own name for - # recursion is an egregious hack to support Python 2.1 and before. - def do_parse(arg, me, self = self, dict = dict): - # if arg is a sequence, recurse with each element - if not arg: - return - - if not SCons.Util.is_String(arg): - for t in arg: me(t, me) - return - - # if arg is a command, execute it - if arg[0] == '!': - arg = self.backtick(arg[1:]) - - # utility function to deal with -D option - def append_define(name, dict = dict): - t = string.split(name, '=') - if len(t) == 1: - dict['CPPDEFINES'].append(name) - else: - dict['CPPDEFINES'].append([t[0], string.join(t[1:], '=')]) - - # Loop through the flags and add them to the appropriate option. - # This tries to strike a balance between checking for all possible - # flags and keeping the logic to a finite size, so it doesn't - # check for some that don't occur often. It particular, if the - # flag is not known to occur in a config script and there's a way - # of passing the flag to the right place (by wrapping it in a -W - # flag, for example) we don't check for it. Note that most - # preprocessor options are not handled, since unhandled options - # are placed in CCFLAGS, so unless the preprocessor is invoked - # separately, these flags will still get to the preprocessor. - # Other options not currently handled: - # -iqoutedir (preprocessor search path) - # -u symbol (linker undefined symbol) - # -s (linker strip files) - # -static* (linker static binding) - # -shared* (linker dynamic binding) - # -symbolic (linker global binding) - # -R dir (deprecated linker rpath) - # IBM compilers may also accept -qframeworkdir=foo - - params = shlex.split(arg) - append_next_arg_to = None # for multi-word args - for arg in params: - if append_next_arg_to: - if append_next_arg_to == 'CPPDEFINES': - append_define(arg) - elif append_next_arg_to == '-include': - t = ('-include', self.fs.File(arg)) - dict['CCFLAGS'].append(t) - elif append_next_arg_to == '-isysroot': - t = ('-isysroot', arg) - dict['CCFLAGS'].append(t) - dict['LINKFLAGS'].append(t) - elif append_next_arg_to == '-arch': - t = ('-arch', arg) - dict['CCFLAGS'].append(t) - dict['LINKFLAGS'].append(t) - else: - dict[append_next_arg_to].append(arg) - append_next_arg_to = None - elif not arg[0] in ['-', '+']: - dict['LIBS'].append(self.fs.File(arg)) - elif arg[:2] == '-L': - if arg[2:]: - dict['LIBPATH'].append(arg[2:]) - else: - append_next_arg_to = 'LIBPATH' - elif arg[:2] == '-l': - if arg[2:]: - dict['LIBS'].append(arg[2:]) - else: - append_next_arg_to = 'LIBS' - elif arg[:2] == '-I': - if arg[2:]: - dict['CPPPATH'].append(arg[2:]) - else: - append_next_arg_to = 'CPPPATH' - elif arg[:4] == '-Wa,': - dict['ASFLAGS'].append(arg[4:]) - dict['CCFLAGS'].append(arg) - elif arg[:4] == '-Wl,': - if arg[:11] == '-Wl,-rpath=': - dict['RPATH'].append(arg[11:]) - elif arg[:7] == '-Wl,-R,': - dict['RPATH'].append(arg[7:]) - elif arg[:6] == '-Wl,-R': - dict['RPATH'].append(arg[6:]) - else: - dict['LINKFLAGS'].append(arg) - elif arg[:4] == '-Wp,': - dict['CPPFLAGS'].append(arg) - elif arg[:2] == '-D': - if arg[2:]: - append_define(arg[2:]) - else: - append_next_arg_to = 'CPPDEFINES' - elif arg == '-framework': - append_next_arg_to = 'FRAMEWORKS' - elif arg[:14] == '-frameworkdir=': - dict['FRAMEWORKPATH'].append(arg[14:]) - elif arg[:2] == '-F': - if arg[2:]: - dict['FRAMEWORKPATH'].append(arg[2:]) - else: - append_next_arg_to = 'FRAMEWORKPATH' - elif arg == '-mno-cygwin': - dict['CCFLAGS'].append(arg) - dict['LINKFLAGS'].append(arg) - elif arg == '-mwindows': - dict['LINKFLAGS'].append(arg) - elif arg == '-pthread': - dict['CCFLAGS'].append(arg) - dict['LINKFLAGS'].append(arg) - elif arg[:5] == '-std=': - dict['CFLAGS'].append(arg) # C only - elif arg[0] == '+': - dict['CCFLAGS'].append(arg) - dict['LINKFLAGS'].append(arg) - elif arg in ['-include', '-isysroot', '-arch']: - append_next_arg_to = arg - else: - dict['CCFLAGS'].append(arg) - - for arg in flags: - do_parse(arg, do_parse) - return dict - - def MergeFlags(self, args, unique=1, dict=None): - """ - Merge the dict in args into the construction variables of this - env, or the passed-in dict. If args is not a dict, it is - converted into a dict using ParseFlags. If unique is not set, - the flags are appended rather than merged. - """ - - if dict is None: - dict = self - if not SCons.Util.is_Dict(args): - args = self.ParseFlags(args) - if not unique: - apply(self.Append, (), args) - return self - for key, value in args.items(): - if not value: - continue - try: - orig = self[key] - except KeyError: - orig = value - else: - if not orig: - orig = value - elif value: - # Add orig and value. The logic here was lifted from - # part of env.Append() (see there for a lot of comments - # about the order in which things are tried) and is - # used mainly to handle coercion of strings to CLVar to - # "do the right thing" given (e.g.) an original CCFLAGS - # string variable like '-pipe -Wall'. - try: - orig = orig + value - except (KeyError, TypeError): - try: - add_to_orig = orig.append - except AttributeError: - value.insert(0, orig) - orig = value - else: - add_to_orig(value) - t = [] - if key[-4:] == 'PATH': - ### keep left-most occurence - for v in orig: - if v not in t: - t.append(v) - else: - ### keep right-most occurence - orig.reverse() - for v in orig: - if v not in t: - t.insert(0, v) - self[key] = t - return self - -# def MergeShellPaths(self, args, prepend=1): -# """ -# Merge the dict in args into the shell environment in env['ENV']. -# Shell path elements are appended or prepended according to prepend. - -# Uses Pre/AppendENVPath, so it always appends or prepends uniquely. - -# Example: env.MergeShellPaths({'LIBPATH': '/usr/local/lib'}) -# prepends /usr/local/lib to env['ENV']['LIBPATH']. -# """ - -# for pathname, pathval in args.items(): -# if not pathval: -# continue -# if prepend: -# apply(self.PrependENVPath, (pathname, pathval)) -# else: -# apply(self.AppendENVPath, (pathname, pathval)) - - -# Used by the FindSourceFiles() method, below. -# Stuck here for support of pre-2.2 Python versions. -def build_source(ss, result): - for s in ss: - if isinstance(s, SCons.Node.FS.Dir): - build_source(s.all_children(), result) - elif s.has_builder(): - build_source(s.sources, result) - elif isinstance(s.disambiguate(), SCons.Node.FS.File): - result.append(s) - -def default_decide_source(dependency, target, prev_ni): - f = SCons.Defaults.DefaultEnvironment().decide_source - return f(dependency, target, prev_ni) - -def default_decide_target(dependency, target, prev_ni): - f = SCons.Defaults.DefaultEnvironment().decide_target - return f(dependency, target, prev_ni) - -def default_copy_from_cache(src, dst): - f = SCons.Defaults.DefaultEnvironment().copy_from_cache - return f(src, dst) - -class Base(SubstitutionEnvironment): - """Base class for "real" construction Environments. These are the - primary objects used to communicate dependency and construction - information to the build engine. - - Keyword arguments supplied when the construction Environment - is created are construction variables used to initialize the - Environment. - """ - - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - memoizer_counters = [] - - ####################################################################### - # This is THE class for interacting with the SCons build engine, - # and it contains a lot of stuff, so we're going to try to keep this - # a little organized by grouping the methods. - ####################################################################### - - ####################################################################### - # Methods that make an Environment act like a dictionary. These have - # the expected standard names for Python mapping objects. Note that - # we don't actually make an Environment a subclass of UserDict for - # performance reasons. Note also that we only supply methods for - # dictionary functionality that we actually need and use. - ####################################################################### - - def __init__(self, - platform=None, - tools=None, - toolpath=None, - variables=None, - parse_flags = None, - **kw): - """ - Initialization of a basic SCons construction environment, - including setting up special construction variables like BUILDER, - PLATFORM, etc., and searching for and applying available Tools. - - Note that we do *not* call the underlying base class - (SubsitutionEnvironment) initialization, because we need to - initialize things in a very specific order that doesn't work - with the much simpler base class initialization. - """ - if __debug__: logInstanceCreation(self, 'Environment.Base') - self._memo = {} - self.fs = SCons.Node.FS.get_default_fs() - self.ans = SCons.Node.Alias.default_ans - self.lookup_list = SCons.Node.arg2nodes_lookups - self._dict = semi_deepcopy(SCons.Defaults.ConstructionEnvironment) - self._init_special() - self.added_methods = [] - - # We don't use AddMethod, or define these as methods in this - # class, because we *don't* want these functions to be bound - # methods. They need to operate independently so that the - # settings will work properly regardless of whether a given - # target ends up being built with a Base environment or an - # OverrideEnvironment or what have you. - self.decide_target = default_decide_target - self.decide_source = default_decide_source - - self.copy_from_cache = default_copy_from_cache - - self._dict['BUILDERS'] = BuilderDict(self._dict['BUILDERS'], self) - - if platform is None: - platform = self._dict.get('PLATFORM', None) - if platform is None: - platform = SCons.Platform.Platform() - if SCons.Util.is_String(platform): - platform = SCons.Platform.Platform(platform) - self._dict['PLATFORM'] = str(platform) - platform(self) - - # Apply the passed-in and customizable variables to the - # environment before calling the tools, because they may use - # some of them during initialization. - if kw.has_key('options'): - # Backwards compatibility: they may stll be using the - # old "options" keyword. - variables = kw['options'] - del kw['options'] - apply(self.Replace, (), kw) - keys = kw.keys() - if variables: - keys = keys + variables.keys() - variables.Update(self) - - save = {} - for k in keys: - try: - save[k] = self._dict[k] - except KeyError: - # No value may have been set if they tried to pass in a - # reserved variable name like TARGETS. - pass - - SCons.Tool.Initializers(self) - - if tools is None: - tools = self._dict.get('TOOLS', None) - if tools is None: - tools = ['default'] - apply_tools(self, tools, toolpath) - - # Now restore the passed-in and customized variables - # to the environment, since the values the user set explicitly - # should override any values set by the tools. - for key, val in save.items(): - self._dict[key] = val - - # Finally, apply any flags to be merged in - if parse_flags: self.MergeFlags(parse_flags) - - ####################################################################### - # Utility methods that are primarily for internal use by SCons. - # These begin with lower-case letters. - ####################################################################### - - def get_builder(self, name): - """Fetch the builder with the specified name from the environment. - """ - try: - return self._dict['BUILDERS'][name] - except KeyError: - return None - - def get_CacheDir(self): - try: - path = self._CacheDir_path - except AttributeError: - path = SCons.Defaults.DefaultEnvironment()._CacheDir_path - try: - if path == self._last_CacheDir_path: - return self._last_CacheDir - except AttributeError: - pass - cd = SCons.CacheDir.CacheDir(path) - self._last_CacheDir_path = path - self._last_CacheDir = cd - return cd - - def get_factory(self, factory, default='File'): - """Return a factory function for creating Nodes for this - construction environment. - """ - name = default - try: - is_node = issubclass(factory, SCons.Node.Node) - except TypeError: - # The specified factory isn't a Node itself--it's - # most likely None, or possibly a callable. - pass - else: - if is_node: - # The specified factory is a Node (sub)class. Try to - # return the FS method that corresponds to the Node's - # name--that is, we return self.fs.Dir if they want a Dir, - # self.fs.File for a File, etc. - try: name = factory.__name__ - except AttributeError: pass - else: factory = None - if not factory: - # They passed us None, or we picked up a name from a specified - # class, so return the FS method. (Note that we *don't* - # use our own self.{Dir,File} methods because that would - # cause env.subst() to be called twice on the file name, - # interfering with files that have $$ in them.) - factory = getattr(self.fs, name) - return factory - - memoizer_counters.append(SCons.Memoize.CountValue('_gsm')) - - def _gsm(self): - try: - return self._memo['_gsm'] - except KeyError: - pass - - result = {} - - try: - scanners = self._dict['SCANNERS'] - except KeyError: - pass - else: - # Reverse the scanner list so that, if multiple scanners - # claim they can scan the same suffix, earlier scanners - # in the list will overwrite later scanners, so that - # the result looks like a "first match" to the user. - if not SCons.Util.is_List(scanners): - scanners = [scanners] - else: - scanners = scanners[:] # copy so reverse() doesn't mod original - scanners.reverse() - for scanner in scanners: - for k in scanner.get_skeys(self): - result[k] = scanner - - self._memo['_gsm'] = result - - return result - - def get_scanner(self, skey): - """Find the appropriate scanner given a key (usually a file suffix). - """ - return self._gsm().get(skey) - - def scanner_map_delete(self, kw=None): - """Delete the cached scanner map (if we need to). - """ - try: - del self._memo['_gsm'] - except KeyError: - pass - - def _update(self, dict): - """Update an environment's values directly, bypassing the normal - checks that occur when users try to set items. - """ - self._dict.update(dict) - - def get_src_sig_type(self): - try: - return self.src_sig_type - except AttributeError: - t = SCons.Defaults.DefaultEnvironment().src_sig_type - self.src_sig_type = t - return t - - def get_tgt_sig_type(self): - try: - return self.tgt_sig_type - except AttributeError: - t = SCons.Defaults.DefaultEnvironment().tgt_sig_type - self.tgt_sig_type = t - return t - - ####################################################################### - # Public methods for manipulating an Environment. These begin with - # upper-case letters. The essential characteristic of methods in - # this section is that they do *not* have corresponding same-named - # global functions. For example, a stand-alone Append() function - # makes no sense, because Append() is all about appending values to - # an Environment's construction variables. - ####################################################################### - - def Append(self, **kw): - """Append values to existing construction variables - in an Environment. - """ - kw = copy_non_reserved_keywords(kw) - for key, val in kw.items(): - # It would be easier on the eyes to write this using - # "continue" statements whenever we finish processing an item, - # but Python 1.5.2 apparently doesn't let you use "continue" - # within try:-except: blocks, so we have to nest our code. - try: - orig = self._dict[key] - except KeyError: - # No existing variable in the environment, so just set - # it to the new value. - self._dict[key] = val - else: - try: - # Check if the original looks like a dictionary. - # If it is, we can't just try adding the value because - # dictionaries don't have __add__() methods, and - # things like UserList will incorrectly coerce the - # original dict to a list (which we don't want). - update_dict = orig.update - except AttributeError: - try: - # Most straightforward: just try to add them - # together. This will work in most cases, when the - # original and new values are of compatible types. - self._dict[key] = orig + val - except (KeyError, TypeError): - try: - # Check if the original is a list. - add_to_orig = orig.append - except AttributeError: - # The original isn't a list, but the new - # value is (by process of elimination), - # so insert the original in the new value - # (if there's one to insert) and replace - # the variable with it. - if orig: - val.insert(0, orig) - self._dict[key] = val - else: - # The original is a list, so append the new - # value to it (if there's a value to append). - if val: - add_to_orig(val) - else: - # The original looks like a dictionary, so update it - # based on what we think the value looks like. - if SCons.Util.is_List(val): - for v in val: - orig[v] = None - else: - try: - update_dict(val) - except (AttributeError, TypeError, ValueError): - if SCons.Util.is_Dict(val): - for k, v in val.items(): - orig[k] = v - else: - orig[val] = None - self.scanner_map_delete(kw) - - def AppendENVPath(self, name, newpath, envname = 'ENV', - sep = os.pathsep, delete_existing=1): - """Append path elements to the path 'name' in the 'ENV' - dictionary for this environment. Will only add any particular - path once, and will normpath and normcase all paths to help - assure this. This can also handle the case where the env - variable is a list instead of a string. - - If delete_existing is 0, a newpath which is already in the path - will not be moved to the end (it will be left where it is). - """ - - orig = '' - if self._dict.has_key(envname) and self._dict[envname].has_key(name): - orig = self._dict[envname][name] - - nv = SCons.Util.AppendPath(orig, newpath, sep, delete_existing) - - if not self._dict.has_key(envname): - self._dict[envname] = {} - - self._dict[envname][name] = nv - - def AppendUnique(self, delete_existing=0, **kw): - """Append values to existing construction variables - in an Environment, if they're not already there. - If delete_existing is 1, removes existing values first, so - values move to end. - """ - kw = copy_non_reserved_keywords(kw) - for key, val in kw.items(): - if SCons.Util.is_List(val): - val = _delete_duplicates(val, delete_existing) - if not self._dict.has_key(key) or self._dict[key] in ('', None): - self._dict[key] = val - elif SCons.Util.is_Dict(self._dict[key]) and \ - SCons.Util.is_Dict(val): - self._dict[key].update(val) - elif SCons.Util.is_List(val): - dk = self._dict[key] - if not SCons.Util.is_List(dk): - dk = [dk] - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - else: - val = filter(lambda x, dk=dk: x not in dk, val) - self._dict[key] = dk + val - else: - dk = self._dict[key] - if SCons.Util.is_List(dk): - # By elimination, val is not a list. Since dk is a - # list, wrap val in a list first. - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - self._dict[key] = dk + [val] - else: - if not val in dk: - self._dict[key] = dk + [val] - else: - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - self._dict[key] = dk + val - self.scanner_map_delete(kw) - - def Clone(self, tools=[], toolpath=None, parse_flags = None, **kw): - """Return a copy of a construction Environment. The - copy is like a Python "deep copy"--that is, independent - copies are made recursively of each objects--except that - a reference is copied when an object is not deep-copyable - (like a function). There are no references to any mutable - objects in the original Environment. - """ - clone = copy.copy(self) - clone._dict = semi_deepcopy(self._dict) - - try: - cbd = clone._dict['BUILDERS'] - except KeyError: - pass - else: - clone._dict['BUILDERS'] = BuilderDict(cbd, clone) - - # Check the methods added via AddMethod() and re-bind them to - # the cloned environment. Only do this if the attribute hasn't - # been overwritten by the user explicitly and still points to - # the added method. - clone.added_methods = [] - for mw in self.added_methods: - if mw == getattr(self, mw.name): - clone.added_methods.append(mw.clone(clone)) - - clone._memo = {} - - # Apply passed-in variables before the tools - # so the tools can use the new variables - kw = copy_non_reserved_keywords(kw) - new = {} - for key, value in kw.items(): - new[key] = SCons.Subst.scons_subst_once(value, self, key) - apply(clone.Replace, (), new) - - apply_tools(clone, tools, toolpath) - - # apply them again in case the tools overwrote them - apply(clone.Replace, (), new) - - # Finally, apply any flags to be merged in - if parse_flags: clone.MergeFlags(parse_flags) - - if __debug__: logInstanceCreation(self, 'Environment.EnvironmentClone') - return clone - - def Copy(self, *args, **kw): - global _warn_copy_deprecated - if _warn_copy_deprecated: - msg = "The env.Copy() method is deprecated; use the env.Clone() method instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedCopyWarning, msg) - _warn_copy_deprecated = False - return apply(self.Clone, args, kw) - - def _changed_build(self, dependency, target, prev_ni): - if dependency.changed_state(target, prev_ni): - return 1 - return self.decide_source(dependency, target, prev_ni) - - def _changed_content(self, dependency, target, prev_ni): - return dependency.changed_content(target, prev_ni) - - def _changed_source(self, dependency, target, prev_ni): - target_env = dependency.get_build_env() - type = target_env.get_tgt_sig_type() - if type == 'source': - return target_env.decide_source(dependency, target, prev_ni) - else: - return target_env.decide_target(dependency, target, prev_ni) - - def _changed_timestamp_then_content(self, dependency, target, prev_ni): - return dependency.changed_timestamp_then_content(target, prev_ni) - - def _changed_timestamp_newer(self, dependency, target, prev_ni): - return dependency.changed_timestamp_newer(target, prev_ni) - - def _changed_timestamp_match(self, dependency, target, prev_ni): - return dependency.changed_timestamp_match(target, prev_ni) - - def _copy_from_cache(self, src, dst): - return self.fs.copy(src, dst) - - def _copy2_from_cache(self, src, dst): - return self.fs.copy2(src, dst) - - def Decider(self, function): - copy_function = self._copy2_from_cache - if function in ('MD5', 'content'): - if not SCons.Util.md5: - raise UserError, "MD5 signatures are not available in this version of Python." - function = self._changed_content - elif function == 'MD5-timestamp': - function = self._changed_timestamp_then_content - elif function in ('timestamp-newer', 'make'): - function = self._changed_timestamp_newer - copy_function = self._copy_from_cache - elif function == 'timestamp-match': - function = self._changed_timestamp_match - elif not callable(function): - raise UserError, "Unknown Decider value %s" % repr(function) - - # We don't use AddMethod because we don't want to turn the - # function, which only expects three arguments, into a bound - # method, which would add self as an initial, fourth argument. - self.decide_target = function - self.decide_source = function - - self.copy_from_cache = copy_function - - def Detect(self, progs): - """Return the first available program in progs. - """ - if not SCons.Util.is_List(progs): - progs = [ progs ] - for prog in progs: - path = self.WhereIs(prog) - if path: return prog - return None - - def Dictionary(self, *args): - if not args: - return self._dict - dlist = map(lambda x, s=self: s._dict[x], args) - if len(dlist) == 1: - dlist = dlist[0] - return dlist - - def Dump(self, key = None): - """ - Using the standard Python pretty printer, dump the contents of the - scons build environment to stdout. - - If the key passed in is anything other than None, then that will - be used as an index into the build environment dictionary and - whatever is found there will be fed into the pretty printer. Note - that this key is case sensitive. - """ - import pprint - pp = pprint.PrettyPrinter(indent=2) - if key: - dict = self.Dictionary(key) - else: - dict = self.Dictionary() - return pp.pformat(dict) - - def FindIxes(self, paths, prefix, suffix): - """ - Search a list of paths for something that matches the prefix and suffix. - - paths - the list of paths or nodes. - prefix - construction variable for the prefix. - suffix - construction variable for the suffix. - """ - - suffix = self.subst('$'+suffix) - prefix = self.subst('$'+prefix) - - for path in paths: - dir,name = os.path.split(str(path)) - if name[:len(prefix)] == prefix and name[-len(suffix):] == suffix: - return path - - def ParseConfig(self, command, function=None, unique=1): - """ - Use the specified function to parse the output of the command - in order to modify the current environment. The 'command' can - be a string or a list of strings representing a command and - its arguments. 'Function' is an optional argument that takes - the environment, the output of the command, and the unique flag. - If no function is specified, MergeFlags, which treats the output - as the result of a typical 'X-config' command (i.e. gtk-config), - will merge the output into the appropriate variables. - """ - if function is None: - def parse_conf(env, cmd, unique=unique): - return env.MergeFlags(cmd, unique) - function = parse_conf - if SCons.Util.is_List(command): - command = string.join(command) - command = self.subst(command) - return function(self, self.backtick(command)) - - def ParseDepends(self, filename, must_exist=None, only_one=0): - """ - Parse a mkdep-style file for explicit dependencies. This is - completely abusable, and should be unnecessary in the "normal" - case of proper SCons configuration, but it may help make - the transition from a Make hierarchy easier for some people - to swallow. It can also be genuinely useful when using a tool - that can write a .d file, but for which writing a scanner would - be too complicated. - """ - filename = self.subst(filename) - try: - fp = open(filename, 'r') - except IOError: - if must_exist: - raise - return - lines = SCons.Util.LogicalLines(fp).readlines() - lines = filter(lambda l: l[0] != '#', lines) - tdlist = [] - for line in lines: - try: - target, depends = string.split(line, ':', 1) - except (AttributeError, TypeError, ValueError): - # Python 1.5.2 throws TypeError if line isn't a string, - # Python 2.x throws AttributeError because it tries - # to call line.split(). Either can throw ValueError - # if the line doesn't split into two or more elements. - pass - else: - tdlist.append((string.split(target), string.split(depends))) - if only_one: - targets = reduce(lambda x, y: x+y, map(lambda p: p[0], tdlist)) - if len(targets) > 1: - raise SCons.Errors.UserError, "More than one dependency target found in `%s': %s" % (filename, targets) - for target, depends in tdlist: - self.Depends(target, depends) - - def Platform(self, platform): - platform = self.subst(platform) - return SCons.Platform.Platform(platform)(self) - - def Prepend(self, **kw): - """Prepend values to existing construction variables - in an Environment. - """ - kw = copy_non_reserved_keywords(kw) - for key, val in kw.items(): - # It would be easier on the eyes to write this using - # "continue" statements whenever we finish processing an item, - # but Python 1.5.2 apparently doesn't let you use "continue" - # within try:-except: blocks, so we have to nest our code. - try: - orig = self._dict[key] - except KeyError: - # No existing variable in the environment, so just set - # it to the new value. - self._dict[key] = val - else: - try: - # Check if the original looks like a dictionary. - # If it is, we can't just try adding the value because - # dictionaries don't have __add__() methods, and - # things like UserList will incorrectly coerce the - # original dict to a list (which we don't want). - update_dict = orig.update - except AttributeError: - try: - # Most straightforward: just try to add them - # together. This will work in most cases, when the - # original and new values are of compatible types. - self._dict[key] = val + orig - except (KeyError, TypeError): - try: - # Check if the added value is a list. - add_to_val = val.append - except AttributeError: - # The added value isn't a list, but the - # original is (by process of elimination), - # so insert the the new value in the original - # (if there's one to insert). - if val: - orig.insert(0, val) - else: - # The added value is a list, so append - # the original to it (if there's a value - # to append). - if orig: - add_to_val(orig) - self._dict[key] = val - else: - # The original looks like a dictionary, so update it - # based on what we think the value looks like. - if SCons.Util.is_List(val): - for v in val: - orig[v] = None - else: - try: - update_dict(val) - except (AttributeError, TypeError, ValueError): - if SCons.Util.is_Dict(val): - for k, v in val.items(): - orig[k] = v - else: - orig[val] = None - self.scanner_map_delete(kw) - - def PrependENVPath(self, name, newpath, envname = 'ENV', sep = os.pathsep, - delete_existing=1): - """Prepend path elements to the path 'name' in the 'ENV' - dictionary for this environment. Will only add any particular - path once, and will normpath and normcase all paths to help - assure this. This can also handle the case where the env - variable is a list instead of a string. - - If delete_existing is 0, a newpath which is already in the path - will not be moved to the front (it will be left where it is). - """ - - orig = '' - if self._dict.has_key(envname) and self._dict[envname].has_key(name): - orig = self._dict[envname][name] - - nv = SCons.Util.PrependPath(orig, newpath, sep, delete_existing) - - if not self._dict.has_key(envname): - self._dict[envname] = {} - - self._dict[envname][name] = nv - - def PrependUnique(self, delete_existing=0, **kw): - """Prepend values to existing construction variables - in an Environment, if they're not already there. - If delete_existing is 1, removes existing values first, so - values move to front. - """ - kw = copy_non_reserved_keywords(kw) - for key, val in kw.items(): - if SCons.Util.is_List(val): - val = _delete_duplicates(val, not delete_existing) - if not self._dict.has_key(key) or self._dict[key] in ('', None): - self._dict[key] = val - elif SCons.Util.is_Dict(self._dict[key]) and \ - SCons.Util.is_Dict(val): - self._dict[key].update(val) - elif SCons.Util.is_List(val): - dk = self._dict[key] - if not SCons.Util.is_List(dk): - dk = [dk] - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - else: - val = filter(lambda x, dk=dk: x not in dk, val) - self._dict[key] = val + dk - else: - dk = self._dict[key] - if SCons.Util.is_List(dk): - # By elimination, val is not a list. Since dk is a - # list, wrap val in a list first. - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - self._dict[key] = [val] + dk - else: - if not val in dk: - self._dict[key] = [val] + dk - else: - if delete_existing: - dk = filter(lambda x, val=val: x not in val, dk) - self._dict[key] = val + dk - self.scanner_map_delete(kw) - - def Replace(self, **kw): - """Replace existing construction variables in an Environment - with new construction variables and/or values. - """ - try: - kwbd = kw['BUILDERS'] - except KeyError: - pass - else: - kwbd = semi_deepcopy(kwbd) - del kw['BUILDERS'] - self.__setitem__('BUILDERS', kwbd) - kw = copy_non_reserved_keywords(kw) - self._update(semi_deepcopy(kw)) - self.scanner_map_delete(kw) - - def ReplaceIxes(self, path, old_prefix, old_suffix, new_prefix, new_suffix): - """ - Replace old_prefix with new_prefix and old_suffix with new_suffix. - - env - Environment used to interpolate variables. - path - the path that will be modified. - old_prefix - construction variable for the old prefix. - old_suffix - construction variable for the old suffix. - new_prefix - construction variable for the new prefix. - new_suffix - construction variable for the new suffix. - """ - old_prefix = self.subst('$'+old_prefix) - old_suffix = self.subst('$'+old_suffix) - - new_prefix = self.subst('$'+new_prefix) - new_suffix = self.subst('$'+new_suffix) - - dir,name = os.path.split(str(path)) - if name[:len(old_prefix)] == old_prefix: - name = name[len(old_prefix):] - if name[-len(old_suffix):] == old_suffix: - name = name[:-len(old_suffix)] - return os.path.join(dir, new_prefix+name+new_suffix) - - def SetDefault(self, **kw): - for k in kw.keys(): - if self._dict.has_key(k): - del kw[k] - apply(self.Replace, (), kw) - - def _find_toolpath_dir(self, tp): - return self.fs.Dir(self.subst(tp)).srcnode().abspath - - def Tool(self, tool, toolpath=None, **kw): - if SCons.Util.is_String(tool): - tool = self.subst(tool) - if toolpath is None: - toolpath = self.get('toolpath', []) - toolpath = map(self._find_toolpath_dir, toolpath) - tool = apply(SCons.Tool.Tool, (tool, toolpath), kw) - tool(self) - - def WhereIs(self, prog, path=None, pathext=None, reject=[]): - """Find prog in the path. - """ - if path is None: - try: - path = self['ENV']['PATH'] - except KeyError: - pass - elif SCons.Util.is_String(path): - path = self.subst(path) - if pathext is None: - try: - pathext = self['ENV']['PATHEXT'] - except KeyError: - pass - elif SCons.Util.is_String(pathext): - pathext = self.subst(pathext) - prog = self.subst(prog) - path = SCons.Util.WhereIs(prog, path, pathext, reject) - if path: return path - return None - - ####################################################################### - # Public methods for doing real "SCons stuff" (manipulating - # dependencies, setting attributes on targets, etc.). These begin - # with upper-case letters. The essential characteristic of methods - # in this section is that they all *should* have corresponding - # same-named global functions. - ####################################################################### - - def Action(self, *args, **kw): - def subst_string(a, self=self): - if SCons.Util.is_String(a): - a = self.subst(a) - return a - nargs = map(subst_string, args) - nkw = self.subst_kw(kw) - return apply(SCons.Action.Action, nargs, nkw) - - def AddPreAction(self, files, action): - nodes = self.arg2nodes(files, self.fs.Entry) - action = SCons.Action.Action(action) - uniq = {} - for executor in map(lambda n: n.get_executor(), nodes): - uniq[executor] = 1 - for executor in uniq.keys(): - executor.add_pre_action(action) - return nodes - - def AddPostAction(self, files, action): - nodes = self.arg2nodes(files, self.fs.Entry) - action = SCons.Action.Action(action) - uniq = {} - for executor in map(lambda n: n.get_executor(), nodes): - uniq[executor] = 1 - for executor in uniq.keys(): - executor.add_post_action(action) - return nodes - - def Alias(self, target, source=[], action=None, **kw): - tlist = self.arg2nodes(target, self.ans.Alias) - if not SCons.Util.is_List(source): - source = [source] - source = filter(None, source) - - if not action: - if not source: - # There are no source files and no action, so just - # return a target list of classic Alias Nodes, without - # any builder. The externally visible effect is that - # this will make the wrapping Script.BuildTask class - # say that there's "Nothing to be done" for this Alias, - # instead of that it's "up to date." - return tlist - - # No action, but there are sources. Re-call all the target - # builders to add the sources to each target. - result = [] - for t in tlist: - bld = t.get_builder(AliasBuilder) - result.extend(bld(self, t, source)) - return result - - nkw = self.subst_kw(kw) - nkw.update({ - 'action' : SCons.Action.Action(action), - 'source_factory' : self.fs.Entry, - 'multi' : 1, - 'is_explicit' : None, - }) - bld = apply(SCons.Builder.Builder, (), nkw) - - # Apply the Builder separately to each target so that the Aliases - # stay separate. If we did one "normal" Builder call with the - # whole target list, then all of the target Aliases would be - # associated under a single Executor. - result = [] - for t in tlist: - # Calling the convert() method will cause a new Executor to be - # created from scratch, so we have to explicitly initialize - # it with the target's existing sources, plus our new ones, - # so nothing gets lost. - b = t.get_builder() - if b is None or b is AliasBuilder: - b = bld - else: - nkw['action'] = b.action + action - b = apply(SCons.Builder.Builder, (), nkw) - t.convert() - result.extend(b(self, t, t.sources + source)) - return result - - def AlwaysBuild(self, *targets): - tlist = [] - for t in targets: - tlist.extend(self.arg2nodes(t, self.fs.Entry)) - for t in tlist: - t.set_always_build() - return tlist - - def BuildDir(self, *args, **kw): - if kw.has_key('build_dir'): - kw['variant_dir'] = kw['build_dir'] - del kw['build_dir'] - return apply(self.VariantDir, args, kw) - - def Builder(self, **kw): - nkw = self.subst_kw(kw) - return apply(SCons.Builder.Builder, [], nkw) - - def CacheDir(self, path): - import SCons.CacheDir - if not path is None: - path = self.subst(path) - self._CacheDir_path = path - - def Clean(self, targets, files): - global CleanTargets - tlist = self.arg2nodes(targets, self.fs.Entry) - flist = self.arg2nodes(files, self.fs.Entry) - for t in tlist: - try: - CleanTargets[t].extend(flist) - except KeyError: - CleanTargets[t] = flist - - def Configure(self, *args, **kw): - nargs = [self] - if args: - nargs = nargs + self.subst_list(args)[0] - nkw = self.subst_kw(kw) - nkw['_depth'] = kw.get('_depth', 0) + 1 - try: - nkw['custom_tests'] = self.subst_kw(nkw['custom_tests']) - except KeyError: - pass - return apply(SCons.SConf.SConf, nargs, nkw) - - def Command(self, target, source, action, **kw): - """Builds the supplied target files from the supplied - source files using the supplied action. Action may - be any type that the Builder constructor will accept - for an action.""" - bkw = { - 'action' : action, - 'target_factory' : self.fs.Entry, - 'source_factory' : self.fs.Entry, - } - try: bkw['source_scanner'] = kw['source_scanner'] - except KeyError: pass - else: del kw['source_scanner'] - bld = apply(SCons.Builder.Builder, (), bkw) - return apply(bld, (self, target, source), kw) - - def Depends(self, target, dependency): - """Explicity specify that 'target's depend on 'dependency'.""" - tlist = self.arg2nodes(target, self.fs.Entry) - dlist = self.arg2nodes(dependency, self.fs.Entry) - for t in tlist: - t.add_dependency(dlist) - return tlist - - def Dir(self, name, *args, **kw): - """ - """ - s = self.subst(name) - if SCons.Util.is_Sequence(s): - result=[] - for e in s: - result.append(apply(self.fs.Dir, (e,) + args, kw)) - return result - return apply(self.fs.Dir, (s,) + args, kw) - - def NoClean(self, *targets): - """Tags a target so that it will not be cleaned by -c""" - tlist = [] - for t in targets: - tlist.extend(self.arg2nodes(t, self.fs.Entry)) - for t in tlist: - t.set_noclean() - return tlist - - def NoCache(self, *targets): - """Tags a target so that it will not be cached""" - tlist = [] - for t in targets: - tlist.extend(self.arg2nodes(t, self.fs.Entry)) - for t in tlist: - t.set_nocache() - return tlist - - def Entry(self, name, *args, **kw): - """ - """ - s = self.subst(name) - if SCons.Util.is_Sequence(s): - result=[] - for e in s: - result.append(apply(self.fs.Entry, (e,) + args, kw)) - return result - return apply(self.fs.Entry, (s,) + args, kw) - - def Environment(self, **kw): - return apply(SCons.Environment.Environment, [], self.subst_kw(kw)) - - def Execute(self, action, *args, **kw): - """Directly execute an action through an Environment - """ - action = apply(self.Action, (action,) + args, kw) - result = action([], [], self) - if isinstance(result, SCons.Errors.BuildError): - errstr = result.errstr - if result.filename: - errstr = result.filename + ': ' + errstr - sys.stderr.write("scons: *** %s\n" % errstr) - return result.status - else: - return result - - def File(self, name, *args, **kw): - """ - """ - s = self.subst(name) - if SCons.Util.is_Sequence(s): - result=[] - for e in s: - result.append(apply(self.fs.File, (e,) + args, kw)) - return result - return apply(self.fs.File, (s,) + args, kw) - - def FindFile(self, file, dirs): - file = self.subst(file) - nodes = self.arg2nodes(dirs, self.fs.Dir) - return SCons.Node.FS.find_file(file, tuple(nodes)) - - def Flatten(self, sequence): - return SCons.Util.flatten(sequence) - - def GetBuildPath(self, files): - result = map(str, self.arg2nodes(files, self.fs.Entry)) - if SCons.Util.is_List(files): - return result - else: - return result[0] - - def Glob(self, pattern, ondisk=True, source=False, strings=False): - return self.fs.Glob(self.subst(pattern), ondisk, source, strings) - - def Ignore(self, target, dependency): - """Ignore a dependency.""" - tlist = self.arg2nodes(target, self.fs.Entry) - dlist = self.arg2nodes(dependency, self.fs.Entry) - for t in tlist: - t.add_ignore(dlist) - return tlist - - def Literal(self, string): - return SCons.Subst.Literal(string) - - def Local(self, *targets): - ret = [] - for targ in targets: - if isinstance(targ, SCons.Node.Node): - targ.set_local() - ret.append(targ) - else: - for t in self.arg2nodes(targ, self.fs.Entry): - t.set_local() - ret.append(t) - return ret - - def Precious(self, *targets): - tlist = [] - for t in targets: - tlist.extend(self.arg2nodes(t, self.fs.Entry)) - for t in tlist: - t.set_precious() - return tlist - - def Repository(self, *dirs, **kw): - dirs = self.arg2nodes(list(dirs), self.fs.Dir) - apply(self.fs.Repository, dirs, kw) - - def Requires(self, target, prerequisite): - """Specify that 'prerequisite' must be built before 'target', - (but 'target' does not actually depend on 'prerequisite' - and need not be rebuilt if it changes).""" - tlist = self.arg2nodes(target, self.fs.Entry) - plist = self.arg2nodes(prerequisite, self.fs.Entry) - for t in tlist: - t.add_prerequisite(plist) - return tlist - - def Scanner(self, *args, **kw): - nargs = [] - for arg in args: - if SCons.Util.is_String(arg): - arg = self.subst(arg) - nargs.append(arg) - nkw = self.subst_kw(kw) - return apply(SCons.Scanner.Base, nargs, nkw) - - def SConsignFile(self, name=".sconsign", dbm_module=None): - if not name is None: - name = self.subst(name) - if not os.path.isabs(name): - name = os.path.join(str(self.fs.SConstruct_dir), name) - if name: - name = os.path.normpath(name) - sconsign_dir = os.path.dirname(name) - if sconsign_dir and not os.path.exists(sconsign_dir): - self.Execute(SCons.Defaults.Mkdir(sconsign_dir)) - SCons.SConsign.File(name, dbm_module) - - def SideEffect(self, side_effect, target): - """Tell scons that side_effects are built as side - effects of building targets.""" - side_effects = self.arg2nodes(side_effect, self.fs.Entry) - targets = self.arg2nodes(target, self.fs.Entry) - - for side_effect in side_effects: - if side_effect.multiple_side_effect_has_builder(): - raise SCons.Errors.UserError, "Multiple ways to build the same target were specified for: %s" % str(side_effect) - side_effect.add_source(targets) - side_effect.side_effect = 1 - self.Precious(side_effect) - for target in targets: - target.side_effects.append(side_effect) - return side_effects - - def SourceCode(self, entry, builder): - """Arrange for a source code builder for (part of) a tree.""" - entries = self.arg2nodes(entry, self.fs.Entry) - for entry in entries: - entry.set_src_builder(builder) - return entries - - def SourceSignatures(self, type): - global _warn_source_signatures_deprecated - if _warn_source_signatures_deprecated: - msg = "The env.SourceSignatures() method is deprecated;\n" + \ - "\tconvert your build to use the env.Decider() method instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedSourceSignaturesWarning, msg) - _warn_source_signatures_deprecated = False - type = self.subst(type) - self.src_sig_type = type - if type == 'MD5': - if not SCons.Util.md5: - raise UserError, "MD5 signatures are not available in this version of Python." - self.decide_source = self._changed_content - elif type == 'timestamp': - self.decide_source = self._changed_timestamp_match - else: - raise UserError, "Unknown source signature type '%s'" % type - - def Split(self, arg): - """This function converts a string or list into a list of strings - or Nodes. This makes things easier for users by allowing files to - be specified as a white-space separated list to be split. - The input rules are: - - A single string containing names separated by spaces. These will be - split apart at the spaces. - - A single Node instance - - A list containing either strings or Node instances. Any strings - in the list are not split at spaces. - In all cases, the function returns a list of Nodes and strings.""" - if SCons.Util.is_List(arg): - return map(self.subst, arg) - elif SCons.Util.is_String(arg): - return string.split(self.subst(arg)) - else: - return [self.subst(arg)] - - def TargetSignatures(self, type): - global _warn_target_signatures_deprecated - if _warn_target_signatures_deprecated: - msg = "The env.TargetSignatures() method is deprecated;\n" + \ - "\tconvert your build to use the env.Decider() method instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedTargetSignaturesWarning, msg) - _warn_target_signatures_deprecated = False - type = self.subst(type) - self.tgt_sig_type = type - if type in ('MD5', 'content'): - if not SCons.Util.md5: - raise UserError, "MD5 signatures are not available in this version of Python." - self.decide_target = self._changed_content - elif type == 'timestamp': - self.decide_target = self._changed_timestamp_match - elif type == 'build': - self.decide_target = self._changed_build - elif type == 'source': - self.decide_target = self._changed_source - else: - raise UserError, "Unknown target signature type '%s'"%type - - def Value(self, value, built_value=None): - """ - """ - return SCons.Node.Python.Value(value, built_value) - - def VariantDir(self, variant_dir, src_dir, duplicate=1): - variant_dir = self.arg2nodes(variant_dir, self.fs.Dir)[0] - src_dir = self.arg2nodes(src_dir, self.fs.Dir)[0] - self.fs.VariantDir(variant_dir, src_dir, duplicate) - - def FindSourceFiles(self, node='.'): - """ returns a list of all source files. - """ - node = self.arg2nodes(node, self.fs.Entry)[0] - - sources = [] - # Uncomment this and get rid of the global definition when we - # drop support for pre-2.2 Python versions. - #def build_source(ss, result): - # for s in ss: - # if isinstance(s, SCons.Node.FS.Dir): - # build_source(s.all_children(), result) - # elif s.has_builder(): - # build_source(s.sources, result) - # elif isinstance(s.disambiguate(), SCons.Node.FS.File): - # result.append(s) - build_source(node.all_children(), sources) - - # now strip the build_node from the sources by calling the srcnode - # function - def get_final_srcnode(file): - srcnode = file.srcnode() - while srcnode != file.srcnode(): - srcnode = file.srcnode() - return srcnode - - # get the final srcnode for all nodes, this means stripping any - # attached build node. - map( get_final_srcnode, sources ) - - # remove duplicates - return list(set(sources)) - - def FindInstalledFiles(self): - """ returns the list of all targets of the Install and InstallAs Builder. - """ - from SCons.Tool import install - if install._UNIQUE_INSTALLED_FILES is None: - install._UNIQUE_INSTALLED_FILES = SCons.Util.uniquer_hashables(install._INSTALLED_FILES) - return install._UNIQUE_INSTALLED_FILES - -class OverrideEnvironment(Base): - """A proxy that overrides variables in a wrapped construction - environment by returning values from an overrides dictionary in - preference to values from the underlying subject environment. - - This is a lightweight (I hope) proxy that passes through most use of - attributes to the underlying Environment.Base class, but has just - enough additional methods defined to act like a real construction - environment with overridden values. It can wrap either a Base - construction environment, or another OverrideEnvironment, which - can in turn nest arbitrary OverrideEnvironments... - - Note that we do *not* call the underlying base class - (SubsitutionEnvironment) initialization, because we get most of those - from proxying the attributes of the subject construction environment. - But because we subclass SubstitutionEnvironment, this class also - has inherited arg2nodes() and subst*() methods; those methods can't - be proxied because they need *this* object's methods to fetch the - values from the overrides dictionary. - """ - - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - def __init__(self, subject, overrides={}): - if __debug__: logInstanceCreation(self, 'Environment.OverrideEnvironment') - self.__dict__['__subject'] = subject - self.__dict__['overrides'] = overrides - - # Methods that make this class act like a proxy. - def __getattr__(self, name): - return getattr(self.__dict__['__subject'], name) - def __setattr__(self, name, value): - setattr(self.__dict__['__subject'], name, value) - - # Methods that make this class act like a dictionary. - def __getitem__(self, key): - try: - return self.__dict__['overrides'][key] - except KeyError: - return self.__dict__['__subject'].__getitem__(key) - def __setitem__(self, key, value): - if not is_valid_construction_var(key): - raise SCons.Errors.UserError, "Illegal construction variable `%s'" % key - self.__dict__['overrides'][key] = value - def __delitem__(self, key): - try: - del self.__dict__['overrides'][key] - except KeyError: - deleted = 0 - else: - deleted = 1 - try: - result = self.__dict__['__subject'].__delitem__(key) - except KeyError: - if not deleted: - raise - result = None - return result - def get(self, key, default=None): - """Emulates the get() method of dictionaries.""" - try: - return self.__dict__['overrides'][key] - except KeyError: - return self.__dict__['__subject'].get(key, default) - def has_key(self, key): - try: - self.__dict__['overrides'][key] - return 1 - except KeyError: - return self.__dict__['__subject'].has_key(key) - def __contains__(self, key): - if self.__dict__['overrides'].__contains__(key): - return 1 - return self.__dict__['__subject'].__contains__(key) - def Dictionary(self): - """Emulates the items() method of dictionaries.""" - d = self.__dict__['__subject'].Dictionary().copy() - d.update(self.__dict__['overrides']) - return d - def items(self): - """Emulates the items() method of dictionaries.""" - return self.Dictionary().items() - - # Overridden private construction environment methods. - def _update(self, dict): - """Update an environment's values directly, bypassing the normal - checks that occur when users try to set items. - """ - self.__dict__['overrides'].update(dict) - - def gvars(self): - return self.__dict__['__subject'].gvars() - - def lvars(self): - lvars = self.__dict__['__subject'].lvars() - lvars.update(self.__dict__['overrides']) - return lvars - - # Overridden public construction environment methods. - def Replace(self, **kw): - kw = copy_non_reserved_keywords(kw) - self.__dict__['overrides'].update(semi_deepcopy(kw)) - -# The entry point that will be used by the external world -# to refer to a construction environment. This allows the wrapper -# interface to extend a construction environment for its own purposes -# by subclassing SCons.Environment.Base and then assigning the -# class to SCons.Environment.Environment. - -Environment = Base - -# An entry point for returning a proxy subclass instance that overrides -# the subst*() methods so they don't actually perform construction -# variable substitution. This is specifically intended to be the shim -# layer in between global function calls (which don't want construction -# variable substitution) and the DefaultEnvironment() (which would -# substitute variables if left to its own devices).""" -# -# We have to wrap this in a function that allows us to delay definition of -# the class until it's necessary, so that when it subclasses Environment -# it will pick up whatever Environment subclass the wrapper interface -# might have assigned to SCons.Environment.Environment. - -def NoSubstitutionProxy(subject): - class _NoSubstitutionProxy(Environment): - def __init__(self, subject): - self.__dict__['__subject'] = subject - def __getattr__(self, name): - return getattr(self.__dict__['__subject'], name) - def __setattr__(self, name, value): - return setattr(self.__dict__['__subject'], name, value) - def raw_to_mode(self, dict): - try: - raw = dict['raw'] - except KeyError: - pass - else: - del dict['raw'] - dict['mode'] = raw - def subst(self, string, *args, **kwargs): - return string - def subst_kw(self, kw, *args, **kwargs): - return kw - def subst_list(self, string, *args, **kwargs): - nargs = (string, self,) + args - nkw = kwargs.copy() - nkw['gvars'] = {} - self.raw_to_mode(nkw) - return apply(SCons.Subst.scons_subst_list, nargs, nkw) - def subst_target_source(self, string, *args, **kwargs): - nargs = (string, self,) + args - nkw = kwargs.copy() - nkw['gvars'] = {} - self.raw_to_mode(nkw) - return apply(SCons.Subst.scons_subst, nargs, nkw) - return _NoSubstitutionProxy(subject) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Environment.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Environment.pyc deleted file mode 100644 index 3880b4b9ab42a1a1ee2dbffedf4f3b68b8b503c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80691 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.py deleted file mode 100644 index 8369873c7..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.py +++ /dev/null @@ -1,198 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -"""SCons.Errors - -This file contains the exception classes used to handle internal -and user errors in SCons. - -""" - -__revision__ = "src/engine/SCons/Errors.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util - -import exceptions - -class BuildError(Exception): - """ Errors occuring while building. - - BuildError have the following attributes: - - Information about the cause of the build error: - ----------------------------------------------- - - errstr : a description of the error message - - status : the return code of the action that caused the build - error. Must be set to a non-zero value even if the - build error is not due to an action returning a - non-zero returned code. - - exitstatus : SCons exit status due to this build error. - Must be nonzero unless due to an explicit Exit() - call. Not always the same as status, since - actions return a status code that should be - respected, but SCons typically exits with 2 - irrespective of the return value of the failed - action. - - filename : The name of the file or directory that caused the - build error. Set to None if no files are associated with - this error. This might be different from the target - being built. For example, failure to create the - directory in which the target file will appear. It - can be None if the error is not due to a particular - filename. - - exc_info : Info about exception that caused the build - error. Set to (None, None, None) if this build - error is not due to an exception. - - - Information about the cause of the location of the error: - --------------------------------------------------------- - - node : the error occured while building this target node(s) - - executor : the executor that caused the build to fail (might - be None if the build failures is not due to the - executor failing) - - action : the action that caused the build to fail (might be - None if the build failures is not due to the an - action failure) - - command : the command line for the action that caused the - build to fail (might be None if the build failures - is not due to the an action failure) - """ - - def __init__(self, - node=None, errstr="Unknown error", status=2, exitstatus=2, - filename=None, executor=None, action=None, command=None, - exc_info=(None, None, None)): - - self.errstr = errstr - self.status = status - self.exitstatus = exitstatus - self.filename = filename - self.exc_info = exc_info - - self.node = node - self.executor = executor - self.action = action - self.command = command - - Exception.__init__(self, node, errstr, status, exitstatus, filename, - executor, action, command, exc_info) - - def __str__(self): - if self.filename: - return self.filename + ': ' + self.errstr - else: - return self.errstr - -class InternalError(Exception): - pass - -class UserError(Exception): - pass - -class StopError(Exception): - pass - -class EnvironmentError(Exception): - pass - -class ExplicitExit(Exception): - def __init__(self, node=None, status=None, *args): - self.node = node - self.status = status - self.exitstatus = status - apply(Exception.__init__, (self,) + args) - -def convert_to_BuildError(status, exc_info=None): - """ - Convert any return code a BuildError Exception. - - `status' can either be a return code or an Exception. - The buildError.status we set here will normally be - used as the exit status of the "scons" process. - """ - if not exc_info and isinstance(status, Exception): - exc_info = (status.__class__, status, None) - - if isinstance(status, BuildError): - buildError = status - buildError.exitstatus = 2 # always exit with 2 on build errors - elif isinstance(status, ExplicitExit): - status = status.status - errstr = 'Explicit exit, status %s' % status - buildError = BuildError( - errstr=errstr, - status=status, # might be 0, OK here - exitstatus=status, # might be 0, OK here - exc_info=exc_info) - # TODO(1.5): - #elif isinstance(status, (StopError, UserError)): - elif isinstance(status, StopError) or isinstance(status, UserError): - buildError = BuildError( - errstr=str(status), - status=2, - exitstatus=2, - exc_info=exc_info) - elif isinstance(status, exceptions.EnvironmentError): - # If an IOError/OSError happens, raise a BuildError. - # Report the name of the file or directory that caused the - # error, which might be different from the target being built - # (for example, failure to create the directory in which the - # target file will appear). - try: filename = status.filename - except AttributeError: filename = None - buildError = BuildError( - errstr=status.strerror, - status=status.errno, - exitstatus=2, - filename=filename, - exc_info=exc_info) - elif isinstance(status, Exception): - buildError = BuildError( - errstr='%s : %s' % (status.__class__.__name__, status), - status=2, - exitstatus=2, - exc_info=exc_info) - elif SCons.Util.is_String(status): - buildError = BuildError( - errstr=status, - status=2, - exitstatus=2) - else: - buildError = BuildError( - errstr="Error %s" % status, - status=status, - exitstatus=2) - - #import sys - #sys.stderr.write("convert_to_BuildError: status %s => (errstr %s, status %s)"%(status,buildError.errstr, buildError.status)) - return buildError diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Errors.pyc deleted file mode 100644 index 89bb727e6b5aa5fca6a332d520b7684634a8b6d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6338 zcmd5=TW=#t6|S}&$MGbS+3ap+C2pk^vv|bB&W2eu8xVqtvS_4TuhgCu5RjTqcR6Wq zyW8q2=dzkepo~Dg?l0j9@lO!E@FRHS0lsspy6q$$v7jJLJ6$|LpPTOw|ky?3hK6%ntNy=zr(Tf}$E-u0^Y4grhriI>2+M)aWb z2JK*kX0VrMy1QQ#d7<0w=f{bb!z5KQ$}~QNp%*fiAnNIMro+E(sHU*EKM$t z!z{+=Br~eW!nBP?dRIur9PvWh720k6A+1?NJ(V3Lnd)(W&#v5^oXhV$dAuWcwzr@3 z-rwo%Y|EXU-48z8{a{CGVA09HaP>_aJf2RIH0F7gQtnVUvHt-Y1*JgRXrYlM(hjM{ z(s;Cg&_G?hTyYA5UJjOoKj{_jz1F3?trvIS!3v z?63xmWaJfOg3T8%(v_b~wULKPYK2Ybz?0?K))%VCPlL^b~TRf~n3DQ|+6rle?trbE_G0kvTBkn=28sa<5pG zcR0;b$aoI2I-8_Plo+{>WjhZSbBV$tkzxMFob`_i+R{x%&Ce(R7O(RmCs>zOqP7eO<~e;QUG^eoWn4$80n%V=JhED z);#-phQKz2rEx^mGAu~yI**bN^59J`;>8ByES}@(I5|3IyN{FMP!%dOa#-YJb{G>D zN6IW>bEwFU37F~1kFX(i7LF&WdL&6wQ(%GVM}-0w; zd=~j3enXSGSy5YRYX`vX z^5INVQ9d41T4ZsSPuP=^$OPCU7lXgKhC6qzD&V?vUPZrv$yL84f1aJ775q|_dJP%T zXW8djehPOWKTB%pi6{}Hn=-FG-1-8|i<)>LL;#}BgeP7!m_Yv$6X;)I0{wW4!RT)? zfp(b*v@IrD!mNl;aaGp*90PoR7P z>5~NgIyJPCPuzS$;}b7`2~7vLZS+T=dXpkKL8R}Q@uWw{wobOYkGoHLCeKsd;|$rh zTNHZIt@pb--R1%3tWrsJ(`y+O&9e~Evi?~tVX{eFk~ zoPsE02m-cnpz+F7Rt;u4VkDK*X55Iec zmVM^Ft@g?JB6RRYGJT3$x6s%x9(=ygD=YZBp!{`u8zXak{Q$oWfE4>nBOn*wci%SjX;WD& zc_CZueGu*&9iQg>rT&tuCNN+M8WD{o_oMr#xb^qZxZ?tZJ!I^G0Dr9sQ>Q39;u8jS z7Mv3IFKbs01@e3we>p1A0*1mYGT-#vC#PdK?{K)H9n1!EAV8L`XO486K13n;x47Al zDPYmBZ-G=k>{GeMA_Ot#(zl6(&V=9Kc8ZKhQY0gaL3`BySHv7>VYT=!c|GF3@dV_I zM>+#oE2vZr>*B%_h{0}5gU5VKV=hpGVYT7V&;H=K0Zkt8B{NwjQ$nc*gEuc&tEkdI zpE0KqDBa)%DrZ1(DH>px?Uh_w#6|zHToq{nko}G90vr(MG4T?nhDWrvC^XOKpXJ0m zVzkP0_q_8p#vZ__Djr>!-qOh|!y3^p@LI@h8UxGv{YriaIU%EhmMT zGcV#x<5&iE1UzcMd6WJ-^voF}s)8q~K-D2TFKY)}G6?5OURBoPzUh8#^Q`ZnB7|HK zH38HC@hK2q;eeDEZ|9~`run?A9dUf?x{AxGEfs-{!q+xFR5PlaQQ5&&E4T`YLI~xs zl-QNk4foacF6Tw>%1Mz&D8ATA4X3aA9c;9WQalw^6kGCops(j>5|;J5}V%Y7Qjk6g@xp&^qus3%aCndo4E>ST7* z;q7r)B#PJNPY7mhWkEClFX7M7wou+BTMJAcJgrK*zsC#xD>S0D>AhWB_nOFv))5=q zpzLq8{!Q+sr&VvGSr=>GnxOX-Lv1h3+jR5>|Hs%`lew%kIvio?h&2@SgP>3+P+*?9 z)X}*!(tK7QtB6&~;riQnI};jHw-~Nj=RdTW>yN&Hr8Hq^ R)|$0d{5C(`th?XxzX9!T(HZ~% diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.py deleted file mode 100644 index a37da0719..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.py +++ /dev/null @@ -1,393 +0,0 @@ -"""SCons.Executor - -A module for executing actions with specific lists of target and source -Nodes. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Executor.py 3842 2008/12/20 22:59:52 scons" - -import string - -from SCons.Debug import logInstanceCreation -import SCons.Errors -import SCons.Memoize - - -class Executor: - """A class for controlling instances of executing an action. - - This largely exists to hold a single association of an action, - environment, list of environment override dictionaries, targets - and sources for later processing as needed. - """ - - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - memoizer_counters = [] - - def __init__(self, action, env=None, overridelist=[{}], - targets=[], sources=[], builder_kw={}): - if __debug__: logInstanceCreation(self, 'Executor.Executor') - self.set_action_list(action) - self.pre_actions = [] - self.post_actions = [] - self.env = env - self.overridelist = overridelist - self.targets = targets - self.sources = sources[:] - self.sources_need_sorting = False - self.builder_kw = builder_kw - self._memo = {} - - def set_action_list(self, action): - import SCons.Util - if not SCons.Util.is_List(action): - if not action: - import SCons.Errors - raise SCons.Errors.UserError, "Executor must have an action." - action = [action] - self.action_list = action - - def get_action_list(self): - return self.pre_actions + self.action_list + self.post_actions - - memoizer_counters.append(SCons.Memoize.CountValue('get_build_env')) - - def get_build_env(self): - """Fetch or create the appropriate build Environment - for this Executor. - """ - try: - return self._memo['get_build_env'] - except KeyError: - pass - - # Create the build environment instance with appropriate - # overrides. These get evaluated against the current - # environment's construction variables so that users can - # add to existing values by referencing the variable in - # the expansion. - overrides = {} - for odict in self.overridelist: - overrides.update(odict) - - import SCons.Defaults - env = self.env or SCons.Defaults.DefaultEnvironment() - build_env = env.Override(overrides) - - self._memo['get_build_env'] = build_env - - return build_env - - def get_build_scanner_path(self, scanner): - """Fetch the scanner path for this executor's targets and sources. - """ - env = self.get_build_env() - try: - cwd = self.targets[0].cwd - except (IndexError, AttributeError): - cwd = None - return scanner.path(env, cwd, self.targets, self.get_sources()) - - def get_kw(self, kw={}): - result = self.builder_kw.copy() - result.update(kw) - return result - - def do_nothing(self, target, kw): - return 0 - - def do_execute(self, target, kw): - """Actually execute the action list.""" - env = self.get_build_env() - kw = self.get_kw(kw) - status = 0 - for act in self.get_action_list(): - status = apply(act, (self.targets, self.get_sources(), env), kw) - if isinstance(status, SCons.Errors.BuildError): - status.executor = self - raise status - elif status: - msg = "Error %s" % status - raise SCons.Errors.BuildError( - errstr=msg, - node=self.targets, - executor=self, - action=act) - return status - - # use extra indirection because with new-style objects (Python 2.2 - # and above) we can't override special methods, and nullify() needs - # to be able to do this. - - def __call__(self, target, **kw): - return self.do_execute(target, kw) - - def cleanup(self): - self._memo = {} - - def add_sources(self, sources): - """Add source files to this Executor's list. This is necessary - for "multi" Builders that can be called repeatedly to build up - a source file list for a given target.""" - self.sources.extend(sources) - self.sources_need_sorting = True - - def get_sources(self): - if self.sources_need_sorting: - self.sources = SCons.Util.uniquer_hashables(self.sources) - self.sources_need_sorting = False - return self.sources - - def prepare(self): - """ - Preparatory checks for whether this Executor can go ahead - and (try to) build its targets. - """ - for s in self.get_sources(): - if s.missing(): - msg = "Source `%s' not found, needed by target `%s'." - raise SCons.Errors.StopError, msg % (s, self.targets[0]) - - def add_pre_action(self, action): - self.pre_actions.append(action) - - def add_post_action(self, action): - self.post_actions.append(action) - - # another extra indirection for new-style objects and nullify... - - def my_str(self): - env = self.get_build_env() - get = lambda action, t=self.targets, s=self.get_sources(), e=env: \ - action.genstring(t, s, e) - return string.join(map(get, self.get_action_list()), "\n") - - - def __str__(self): - return self.my_str() - - def nullify(self): - self.cleanup() - self.do_execute = self.do_nothing - self.my_str = lambda S=self: '' - - memoizer_counters.append(SCons.Memoize.CountValue('get_contents')) - - def get_contents(self): - """Fetch the signature contents. This is the main reason this - class exists, so we can compute this once and cache it regardless - of how many target or source Nodes there are. - """ - try: - return self._memo['get_contents'] - except KeyError: - pass - env = self.get_build_env() - get = lambda action, t=self.targets, s=self.get_sources(), e=env: \ - action.get_contents(t, s, e) - result = string.join(map(get, self.get_action_list()), "") - self._memo['get_contents'] = result - return result - - def get_timestamp(self): - """Fetch a time stamp for this Executor. We don't have one, of - course (only files do), but this is the interface used by the - timestamp module. - """ - return 0 - - def scan_targets(self, scanner): - self.scan(scanner, self.targets) - - def scan_sources(self, scanner): - if self.sources: - self.scan(scanner, self.get_sources()) - - def scan(self, scanner, node_list): - """Scan a list of this Executor's files (targets or sources) for - implicit dependencies and update all of the targets with them. - This essentially short-circuits an N*M scan of the sources for - each individual target, which is a hell of a lot more efficient. - """ - env = self.get_build_env() - - deps = [] - if scanner: - for node in node_list: - node.disambiguate() - s = scanner.select(node) - if not s: - continue - path = self.get_build_scanner_path(s) - deps.extend(node.get_implicit_deps(env, s, path)) - else: - kw = self.get_kw() - for node in node_list: - node.disambiguate() - scanner = node.get_env_scanner(env, kw) - if not scanner: - continue - scanner = scanner.select(node) - if not scanner: - continue - path = self.get_build_scanner_path(scanner) - deps.extend(node.get_implicit_deps(env, scanner, path)) - - deps.extend(self.get_implicit_deps()) - - for tgt in self.targets: - tgt.add_to_implicit(deps) - - def _get_unignored_sources_key(self, ignore=()): - return tuple(ignore) - - memoizer_counters.append(SCons.Memoize.CountDict('get_unignored_sources', _get_unignored_sources_key)) - - def get_unignored_sources(self, ignore=()): - ignore = tuple(ignore) - try: - memo_dict = self._memo['get_unignored_sources'] - except KeyError: - memo_dict = {} - self._memo['get_unignored_sources'] = memo_dict - else: - try: - return memo_dict[ignore] - except KeyError: - pass - - sourcelist = self.get_sources() - if ignore: - idict = {} - for i in ignore: - idict[i] = 1 - sourcelist = filter(lambda s, i=idict: not i.has_key(s), sourcelist) - - memo_dict[ignore] = sourcelist - - return sourcelist - - def _process_sources_key(self, func, ignore=()): - return (func, tuple(ignore)) - - memoizer_counters.append(SCons.Memoize.CountDict('process_sources', _process_sources_key)) - - def process_sources(self, func, ignore=()): - memo_key = (func, tuple(ignore)) - try: - memo_dict = self._memo['process_sources'] - except KeyError: - memo_dict = {} - self._memo['process_sources'] = memo_dict - else: - try: - return memo_dict[memo_key] - except KeyError: - pass - - result = map(func, self.get_unignored_sources(ignore)) - - memo_dict[memo_key] = result - - return result - - def get_implicit_deps(self): - """Return the executor's implicit dependencies, i.e. the nodes of - the commands to be executed.""" - result = [] - build_env = self.get_build_env() - for act in self.get_action_list(): - result.extend(act.get_implicit_deps(self.targets, self.get_sources(), build_env)) - return result - -nullenv = None - -def get_NullEnvironment(): - """Use singleton pattern for Null Environments.""" - global nullenv - - import SCons.Util - class NullEnvironment(SCons.Util.Null): - import SCons.CacheDir - _CacheDir_path = None - _CacheDir = SCons.CacheDir.CacheDir(None) - def get_CacheDir(self): - return self._CacheDir - - if not nullenv: - nullenv = NullEnvironment() - return nullenv - -class Null: - """A null Executor, with a null build Environment, that does - nothing when the rest of the methods call it. - - This might be able to disapper when we refactor things to - disassociate Builders from Nodes entirely, so we're not - going to worry about unit tests for this--at least for now. - """ - def __init__(self, *args, **kw): - if __debug__: logInstanceCreation(self, 'Executor.Null') - self.targets = kw['targets'] - def get_build_env(self): - return get_NullEnvironment() - def get_build_scanner_path(self): - return None - def cleanup(self): - pass - def prepare(self): - pass - def get_unignored_sources(self, *args, **kw): - return tuple(()) - def get_action_list(self): - return [] - def __call__(self, *args, **kw): - return 0 - def get_contents(self): - return '' - - def _morph(self): - """Morph this Null executor to a real Executor object.""" - self.__class__ = Executor - self.__init__([], targets=self.targets) - - # The following methods require morphing this Null Executor to a - # real Executor object. - - def add_pre_action(self, action): - self._morph() - self.add_pre_action(action) - def add_post_action(self, action): - self._morph() - self.add_post_action(action) - def set_action_list(self, action): - self._morph() - self.set_action_list(action) - - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Executor.pyc deleted file mode 100644 index 4fd826b1a1b243fa0f0e610d615455e776c89eec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16088 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 Gd;bSPyOUl3 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.py deleted file mode 100644 index bcd39819a..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.py +++ /dev/null @@ -1,429 +0,0 @@ -"""SCons.Job - -This module defines the Serial and Parallel classes that execute tasks to -complete a build. The Jobs class provides a higher level interface to start, -stop, and wait on jobs. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Job.py 3842 2008/12/20 22:59:52 scons" - -import os -import signal - -import SCons.Errors - -# The default stack size (in kilobytes) of the threads used to execute -# jobs in parallel. -# -# We use a stack size of 256 kilobytes. The default on some platforms -# is too large and prevents us from creating enough threads to fully -# parallelized the build. For example, the default stack size on linux -# is 8 MBytes. - -explicit_stack_size = None -default_stack_size = 256 - -interrupt_msg = 'Build interrupted.' - - -class InterruptState: - def __init__(self): - self.interrupted = False - - def set(self): - self.interrupted = True - - def __call__(self): - return self.interrupted - - -class Jobs: - """An instance of this class initializes N jobs, and provides - methods for starting, stopping, and waiting on all N jobs. - """ - - def __init__(self, num, taskmaster): - """ - create 'num' jobs using the given taskmaster. - - If 'num' is 1 or less, then a serial job will be used, - otherwise a parallel job with 'num' worker threads will - be used. - - The 'num_jobs' attribute will be set to the actual number of jobs - allocated. If more than one job is requested but the Parallel - class can't do it, it gets reset to 1. Wrapping interfaces that - care should check the value of 'num_jobs' after initialization. - """ - - self.job = None - if num > 1: - stack_size = explicit_stack_size - if stack_size is None: - stack_size = default_stack_size - - try: - self.job = Parallel(taskmaster, num, stack_size) - self.num_jobs = num - except NameError: - pass - if self.job is None: - self.job = Serial(taskmaster) - self.num_jobs = 1 - - def run(self, postfunc=lambda: None): - """Run the jobs. - - postfunc() will be invoked after the jobs has run. It will be - invoked even if the jobs are interrupted by a keyboard - interrupt (well, in fact by a signal such as either SIGINT, - SIGTERM or SIGHUP). The execution of postfunc() is protected - against keyboard interrupts and is guaranteed to run to - completion.""" - self._setup_sig_handler() - try: - self.job.start() - finally: - postfunc() - self._reset_sig_handler() - - def were_interrupted(self): - """Returns whether the jobs were interrupted by a signal.""" - return self.job.interrupted() - - def _setup_sig_handler(self): - """Setup an interrupt handler so that SCons can shutdown cleanly in - various conditions: - - a) SIGINT: Keyboard interrupt - b) SIGTERM: kill or system shutdown - c) SIGHUP: Controlling shell exiting - - We handle all of these cases by stopping the taskmaster. It - turns out that it very difficult to stop the build process - by throwing asynchronously an exception such as - KeyboardInterrupt. For example, the python Condition - variables (threading.Condition) and Queue's do not seem to - asynchronous-exception-safe. It would require adding a whole - bunch of try/finally block and except KeyboardInterrupt all - over the place. - - Note also that we have to be careful to handle the case when - SCons forks before executing another process. In that case, we - want the child to exit immediately. - """ - def handler(signum, stack, self=self, parentpid=os.getpid()): - if os.getpid() == parentpid: - self.job.taskmaster.stop() - self.job.interrupted.set() - else: - os._exit(2) - - self.old_sigint = signal.signal(signal.SIGINT, handler) - self.old_sigterm = signal.signal(signal.SIGTERM, handler) - try: - self.old_sighup = signal.signal(signal.SIGHUP, handler) - except AttributeError: - pass - - def _reset_sig_handler(self): - """Restore the signal handlers to their previous state (before the - call to _setup_sig_handler().""" - - signal.signal(signal.SIGINT, self.old_sigint) - signal.signal(signal.SIGTERM, self.old_sigterm) - try: - signal.signal(signal.SIGHUP, self.old_sighup) - except AttributeError: - pass - -class Serial: - """This class is used to execute tasks in series, and is more efficient - than Parallel, but is only appropriate for non-parallel builds. Only - one instance of this class should be in existence at a time. - - This class is not thread safe. - """ - - def __init__(self, taskmaster): - """Create a new serial job given a taskmaster. - - The taskmaster's next_task() method should return the next task - that needs to be executed, or None if there are no more tasks. The - taskmaster's executed() method will be called for each task when it - is successfully executed or failed() will be called if it failed to - execute (e.g. execute() raised an exception).""" - - self.taskmaster = taskmaster - self.interrupted = InterruptState() - - def start(self): - """Start the job. This will begin pulling tasks from the taskmaster - and executing them, and return when there are no more tasks. If a task - fails to execute (i.e. execute() raises an exception), then the job will - stop.""" - - while 1: - task = self.taskmaster.next_task() - - if task is None: - break - - try: - task.prepare() - if task.needs_execute(): - task.execute() - except: - if self.interrupted(): - try: - raise SCons.Errors.BuildError( - task.targets[0], errstr=interrupt_msg) - except: - task.exception_set() - else: - task.exception_set() - - # Let the failed() callback function arrange for the - # build to stop if that's appropriate. - task.failed() - else: - task.executed() - - task.postprocess() - self.taskmaster.cleanup() - - -# Trap import failure so that everything in the Job module but the -# Parallel class (and its dependent classes) will work if the interpreter -# doesn't support threads. -try: - import Queue - import threading -except ImportError: - pass -else: - class Worker(threading.Thread): - """A worker thread waits on a task to be posted to its request queue, - dequeues the task, executes it, and posts a tuple including the task - and a boolean indicating whether the task executed successfully. """ - - def __init__(self, requestQueue, resultsQueue, interrupted): - threading.Thread.__init__(self) - self.setDaemon(1) - self.requestQueue = requestQueue - self.resultsQueue = resultsQueue - self.interrupted = interrupted - self.start() - - def run(self): - while 1: - task = self.requestQueue.get() - - if task is None: - # The "None" value is used as a sentinel by - # ThreadPool.cleanup(). This indicates that there - # are no more tasks, so we should quit. - break - - try: - if self.interrupted(): - raise SCons.Errors.BuildError( - task.targets[0], errstr=interrupt_msg) - task.execute() - except: - task.exception_set() - ok = False - else: - ok = True - - self.resultsQueue.put((task, ok)) - - class ThreadPool: - """This class is responsible for spawning and managing worker threads.""" - - def __init__(self, num, stack_size, interrupted): - """Create the request and reply queues, and 'num' worker threads. - - One must specify the stack size of the worker threads. The - stack size is specified in kilobytes. - """ - self.requestQueue = Queue.Queue(0) - self.resultsQueue = Queue.Queue(0) - - try: - prev_size = threading.stack_size(stack_size*1024) - except AttributeError, e: - # Only print a warning if the stack size has been - # explicitly set. - if not explicit_stack_size is None: - msg = "Setting stack size is unsupported by this version of Python:\n " + \ - e.args[0] - SCons.Warnings.warn(SCons.Warnings.StackSizeWarning, msg) - except ValueError, e: - msg = "Setting stack size failed:\n " + str(e) - SCons.Warnings.warn(SCons.Warnings.StackSizeWarning, msg) - - # Create worker threads - self.workers = [] - for _ in range(num): - worker = Worker(self.requestQueue, self.resultsQueue, interrupted) - self.workers.append(worker) - - # Once we drop Python 1.5 we can change the following to: - #if 'prev_size' in locals(): - if 'prev_size' in locals().keys(): - threading.stack_size(prev_size) - - def put(self, task): - """Put task into request queue.""" - self.requestQueue.put(task) - - def get(self): - """Remove and return a result tuple from the results queue.""" - return self.resultsQueue.get() - - def preparation_failed(self, task): - self.resultsQueue.put((task, False)) - - def cleanup(self): - """ - Shuts down the thread pool, giving each worker thread a - chance to shut down gracefully. - """ - # For each worker thread, put a sentinel "None" value - # on the requestQueue (indicating that there's no work - # to be done) so that each worker thread will get one and - # terminate gracefully. - for _ in self.workers: - self.requestQueue.put(None) - - # Wait for all of the workers to terminate. - # - # If we don't do this, later Python versions (2.4, 2.5) often - # seem to raise exceptions during shutdown. This happens - # in requestQueue.get(), as an assertion failure that - # requestQueue.not_full is notified while not acquired, - # seemingly because the main thread has shut down (or is - # in the process of doing so) while the workers are still - # trying to pull sentinels off the requestQueue. - # - # Normally these terminations should happen fairly quickly, - # but we'll stick a one-second timeout on here just in case - # someone gets hung. - for worker in self.workers: - worker.join(1.0) - self.workers = [] - - class Parallel: - """This class is used to execute tasks in parallel, and is somewhat - less efficient than Serial, but is appropriate for parallel builds. - - This class is thread safe. - """ - - def __init__(self, taskmaster, num, stack_size): - """Create a new parallel job given a taskmaster. - - The taskmaster's next_task() method should return the next - task that needs to be executed, or None if there are no more - tasks. The taskmaster's executed() method will be called - for each task when it is successfully executed or failed() - will be called if the task failed to execute (i.e. execute() - raised an exception). - - Note: calls to taskmaster are serialized, but calls to - execute() on distinct tasks are not serialized, because - that is the whole point of parallel jobs: they can execute - multiple tasks simultaneously. """ - - self.taskmaster = taskmaster - self.interrupted = InterruptState() - self.tp = ThreadPool(num, stack_size, self.interrupted) - - self.maxjobs = num - - def start(self): - """Start the job. This will begin pulling tasks from the - taskmaster and executing them, and return when there are no - more tasks. If a task fails to execute (i.e. execute() raises - an exception), then the job will stop.""" - - jobs = 0 - - while 1: - # Start up as many available tasks as we're - # allowed to. - while jobs < self.maxjobs: - task = self.taskmaster.next_task() - if task is None: - break - - try: - # prepare task for execution - task.prepare() - except: - task.exception_set() - task.failed() - task.postprocess() - else: - if task.needs_execute(): - # dispatch task - self.tp.put(task) - jobs = jobs + 1 - else: - task.executed() - task.postprocess() - - if not task and not jobs: break - - # Let any/all completed tasks finish up before we go - # back and put the next batch of tasks on the queue. - while 1: - task, ok = self.tp.get() - jobs = jobs - 1 - - if ok: - task.executed() - else: - if self.interrupted(): - try: - raise SCons.Errors.BuildError( - task.targets[0], errstr=interrupt_msg) - except: - task.exception_set() - - # Let the failed() callback function arrange - # for the build to stop if that's appropriate. - task.failed() - - task.postprocess() - - if self.tp.resultsQueue.empty(): - break - - self.tp.cleanup() - self.taskmaster.cleanup() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Job.pyc deleted file mode 100644 index 41a12257e4035b1ab3b6c88026ee9290a6e2b91f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13951 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 z zTBGU^`Fc3yM+K+9No<_-&qUAu05!)k7C)JKAw8S3sRcosL_K}Tt*k-~_&JtcP_|Gd zWOn95oPw-9&eP^nbB=bD&qQ!7SmWo|RmSZi1*EQs3s^ycDFfn*M4e{_A%U|3EE5z& z8$vc=^1hKwu=MQTgHsu!V2eKTJFFLwuw|dwsYhc3)Mw#gi+Q9Ni7P)R7yFzb!^?_H z^WD?Wz{idWc_BB;k5E39lN}RtjPV6OEAECN)VRb^&1;QQYGZ<4$kdLn1NU}UWShwB zEEQa|u-4{dK>#Aq+WeZ1j4|tty(MEFK<9xk@v#*EKEp(OP#i*ibJLsOmuG^s=fZx* zWXKX?qBv05*@jyMT##>o^8E>Z3AMr+L-d1;p)h!3VtNS00Vx&g1*SdV4L8*C89>`! zZ82p!Mp8TU8y(dw7gZ$Tx&rzzxH0 z^O4!^X33B|`_o{fafKWRFZiy!K=L%)WMqX8LAbnt{-7o+g7Sv!F#+qinvQ?SzVZ*b zcJ>_p1(JmR{t(~in9pxT+(m})s*3-6L}K_*S_nrT-?7NK4_QM{vAuc$wlqsqs;oUkmYspkJZEdA1nR`M&I=FoEaA`04&S}rglxj za`Hb|9%K%moq-=yU23fHI)X2ab`w%S;Xj3iACoh>%k&^;Xlx zhQ9UFSb3z6IU6q=ps-APhCMd;N51Pz5c;d@{ijEm%?r=RI7#1e3i8vHLXH_fb&bqpQ_3NSA~@uVieL zHCvgkfI_S^QJPh?S`}Zjf}_Hn5n{d81g(As_y51Bb;6@>b13wV^$7r{bLE5`FUg{k z@)yFk)8R)5%gsATv>6qIbN%O1M(fS1hUWpCs` zk1T?SaNgz;*4ISu^iWEJZ5uDHf6>Gj}?y-jU-5bEjlR9SYru;O0nv8 zcahyyJyq4DI*}HMW)mQb1YQNmI>;(N!5eR~%_1<6Ae$inz>91GB;R-Lt?K4Wj{#-4 ziMp(=x^?b(e&^g%UH|Q3v+URXYpn;evXQ{7}v4MYY>h*}o{qalk1qM@#DA z8!B;e@0{HG@2Pul%Dox&`J=PyQB&y!mEU!uw@Cisk{Uy#^Gd%dQe3Fkd<#o`yCQc3 zD>;}J{eg-uPR&Ui^?7tjD4kcycd57Nvib^YT$-Z#_S6&66+0VKw_4w#{%>%|!gZZ= z<3z7--Aa>u{k|Tg@t^DVaP0o!N8jIYH?Cj*X#IN|>l@eIjg1>0{_w_!8*UzAX8uoa zDrIM9&E`#apo<{v2YK$sgJE9}bW#LGoF;COx?ws>3bz**xf>*rJBagK=Wg0@i=M{K z!EjXQsJR#PN4Q+{g2LSkvN#>(q}ofP+zo>eQ{w~|25B~KH=Cd3+E9owD~(2dJc`vv zgObF477T|Pt637;Tq?o^G9=`%dYqNZf_8ujNgn3~cz5@Maoct8=?u$~ZC5`IC>R$N z(s9zo6NY+In9g)D$`VYjWP%)!Y1Q42i=LaL5CEdO!ypUroX+wa&8CYFg@V>IUlfJw z?#J$w0pZ8p21yS}1((6|8m)xkz_h+;8Q& z-&wI7ldmEh-*_>9M`s*dV*0*Opv#5YK9%xF7<;ZJj;E#{hk97JKhfhmS(aum&FAsd z$m5W%{feK1)Wp=Jkm-EXFJNO4)cU^<75m~YtrcTNPCcrMkITn-`^3+QE7L6V4evv~TNA7rPocVR^dNMUqw4qa}@KNcACm8i)YG22$CsQMD zuZp+_sl5Pg2|xyI%XphY-Q(2pGPrvp2M191W+5m!Ok3EXbH2RcU6sNbOZe!Q!}DC$VbZZHg_2w)-K*g+>ZG4+7Z5AtQR($mfWxhQdNVvBrK46-9H2bK<%6DhE%y_Y zz#4wyeTXw*Jjli_>kU?)snl+riuR$pZIx;PBQ#o~AtTslbQ6v29vaZu2iejq_q5Ar93>aDgF~r%<2r-WRG1q}0FfSrD>E`g4 z41D*w8QzKol7YQ+Vw;5cxb=%FI;>_0V#1$TXbRTXLWC@Fe^n@vKf5j+1rCo~mu3-g znc2l?j$DV@QDqRTp0>~t7Z@OwG1?`2Fg3;@aAH;5%QhEQ%h=+ge>z6* zBXNgW+KKzte$a>HQNRJ_5jsmXIYAe$E+@0f+iK15k>6kt@jgKmxu*GJVg-!_ z!vNK0+CYc8Kh{nUH2Nw-g9$7qObC^YBoq841xdnEH9#LsR&ioXkB8a`Ix4_xR3IpK zs0mO*L1hXXHkGt1Q!HSW_$>r%24p)#N5)`b4YHNTEegAe;fbT3DCJAXk|)rWxl&U_ zUG2>9?lVU@P}x?i&Zp)v$Qq287+=(8iyhG7ECypApM2qQrJ$mMie-OHCRk(r6vbH4 zzzy5RAzw0)dliosY~e6Neivu!!z|tl3cX$ohU*D3@!H&4N1Mc|AWXh2YF(fgS?!#Rz!;)r+d_pNKJhS1&=xr&2e6J z`h21Y@e7eugb4>jkBTndz;Ls4Y3XB4iOqGTBzTR2`#yN_{a<1!V|u6VTy_?nmMES) z`r^I5Uo_>5*>d13)#m$A8v4G+bC35u3N&F?&Q8-`J&;#_i9?ue%r%_(x%s-VHtBVS zoWxIse3$V>ABTLvIeK2ch*5(0CXx|B0_A{ox(Rl3_LsJZALSL8Kn85A-V(8(Rt7Z%$M(Ah=NdPj$Sy5wiMEDYiw z_j5_NB6MIH7UiST)S0Rfzb;4cC3{-n=N*A=>{rVK3#JVw zBUfNrA{z&uxkss%#IXlt$!61#-5d!k6!V~sSkR%CMRgEybH~jiD#2DjNLnd3hWJWg z!uFSdCD2DC;PErM$Y&S;dO*J`PwVOllED=4AthuR0)>)IFEe%2Rk9?PkXLI;F3qT7 zRxULJKWpk4-_;QIHU%MKL3&0L=79vokU)a~>>Wxbn8Hd=qmFI~XSH zoIY~A1^R!FL-4(^&~S=*e3PKPjSbUL&~S14SkS1-C7=gwm;c@K(Bq&hqEttemLM?M zshJl@;(D+%3f6MhG6@?%!l7;3LFl0rCGucP@Dh+yMei#@jsVyc?cNCWhh*nCpF@cFPj0I3mFzdo;bK^$}?P2lI10| z!8V&4nYqVG!2r`$oJ~UbG!aGC{uRiZ>a4zGYEv#v3>1L=2b@d*dVIlRG{l3%SDwz` zz5BaWk#>_s8gCuI>wD^R)StWzm_|`60R0r_GinErJGmbbFUDNO2~(?y<7*-sW%xgFqSqN8V%z z$ir5z$s`2qU*pKh9KpTrTtMY`p?1+ZXJDSD@eaYfl!~t#>%W18{~1S42Wgx`l{hQv zy>EL=Auh}30IgO`*i0JhpHyT*)L}{oR;FS_2(GtgWU0lYC5Bs93}W^rCp%bW$YN6TL4xN|X9S z{6dF?IG_l8BjK91L>=G4es1=kR2fT+T*3pF1vtEGxID4=sT!Nk^dC4RG!@$nHIqgr zIPtpu?OiPY?__}*MIA`H-aHBk+{zkn)A+?&ojoyJQHP6HQWJal6KnYXM0=+nFCSpV z|H5JU&&eo$c~toVdcVvF@P_t5PiU>+O=0)tfk!qWMO^gtM4Z!f2Jy_>qrvdEr8LSZ zSf^W@j{N(je;+l^8O$^0DGft&PSVYU<z?j(FEWPDQ;-~c%+jxDfZNFbr6d5ETefD`C7dxPWMdr4V;KSPRn{5Fg6 z+g~i%ZYng-%U^y=J($Wibx`mK;1VnRxq$T9OqY-iYiSSIp4ID--CM&lXDF)K#W$QY zDE1be5SQgcu|L7_qWnx;XTrI~xqpKJ@&kOK8tg=j<8eDuXII2|983L}Fo?C# zeBx`27WLsRbCBt@p2yhq=r(3gKrrNwMgk`Dq_E|{YqB%>S)!epP?U4Eb_K~9B|QrI z-*t+nZqJbwh7ux+4Dmx(6ZfGj!ZQMl)!PQsJ>!&urZV-B`PuD6V{&$y(BOTDwXT-D zs@kEYroM8YB%JwvruSmL#YOL2nqT52bP(^y92oG@>h|aW9=9`|%i&!P%>Ukd94Mx@ zfk8HYpN@xG-XTcD3SbntWE_=TPVs_o_^~>M(|nQiBlB|L$E-f`A7N7#% diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.py deleted file mode 100644 index 4ce9fff7d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.py +++ /dev/null @@ -1,147 +0,0 @@ - -"""scons.Node.Alias - -Alias nodes. - -This creates a hash of global Aliases (dummy targets). - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Node/Alias.py 3842 2008/12/20 22:59:52 scons" - -import string -import UserDict - -import SCons.Errors -import SCons.Node -import SCons.Util - -class AliasNameSpace(UserDict.UserDict): - def Alias(self, name, **kw): - if isinstance(name, SCons.Node.Alias.Alias): - return name - try: - a = self[name] - except KeyError: - a = apply(SCons.Node.Alias.Alias, (name,), kw) - self[name] = a - return a - - def lookup(self, name, **kw): - try: - return self[name] - except KeyError: - return None - -class AliasNodeInfo(SCons.Node.NodeInfoBase): - current_version_id = 1 - field_list = ['csig'] - def str_to_node(self, s): - return default_ans.Alias(s) - -class AliasBuildInfo(SCons.Node.BuildInfoBase): - current_version_id = 1 - -class Alias(SCons.Node.Node): - - NodeInfo = AliasNodeInfo - BuildInfo = AliasBuildInfo - - def __init__(self, name): - SCons.Node.Node.__init__(self) - self.name = name - - def str_for_display(self): - return '"' + self.__str__() + '"' - - def __str__(self): - return self.name - - def make_ready(self): - self.get_csig() - - really_build = SCons.Node.Node.build - is_up_to_date = SCons.Node.Node.children_are_up_to_date - - def is_under(self, dir): - # Make Alias nodes get built regardless of - # what directory scons was run from. Alias nodes - # are outside the filesystem: - return 1 - - def get_contents(self): - """The contents of an alias is the concatenation - of the content signatures of all its sources.""" - childsigs = map(lambda n: n.get_csig(), self.children()) - return string.join(childsigs, '') - - def sconsign(self): - """An Alias is not recorded in .sconsign files""" - pass - - # - # - # - - def changed_since_last_build(self, target, prev_ni): - cur_csig = self.get_csig() - try: - return cur_csig != prev_ni.csig - except AttributeError: - return 1 - - def build(self): - """A "builder" for aliases.""" - pass - - def convert(self): - try: del self.builder - except AttributeError: pass - self.reset_executor() - self.build = self.really_build - - def get_csig(self): - """ - Generate a node's content signature, the digested signature - of its content. - - node - the node - cache - alternate node to use for the signature cache - returns - the content signature - """ - try: - return self.ninfo.csig - except AttributeError: - pass - - contents = self.get_contents() - csig = SCons.Util.MD5signature(contents) - self.get_ninfo().csig = csig - return csig - -default_ans = AliasNameSpace() - -SCons.Node.arg2nodes_lookups.append(default_ans.lookup) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Alias.pyc deleted file mode 100644 index b0f3e7eeb948d4146d0ff94839d761d4603443f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5725 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 up_to_date: - return 0 - return 1 - - def rdir(self): - if not self.exists(): - norm_name = _my_normcase(self.name) - for dir in self.dir.get_all_rdirs(): - try: node = dir.entries[norm_name] - except KeyError: node = dir.dir_on_disk(self.name) - if node and node.exists() and \ - (isinstance(dir, Dir) or isinstance(dir, Entry)): - return node - return self - - def sconsign(self): - """Return the .sconsign file info for this directory, - creating it first if necessary.""" - if not self._sconsign: - import SCons.SConsign - self._sconsign = SCons.SConsign.ForDirectory(self) - return self._sconsign - - def srcnode(self): - """Dir has a special need for srcnode()...if we - have a srcdir attribute set, then that *is* our srcnode.""" - if self.srcdir: - return self.srcdir - return Base.srcnode(self) - - def get_timestamp(self): - """Return the latest timestamp from among our children""" - stamp = 0 - for kid in self.children(): - if kid.get_timestamp() > stamp: - stamp = kid.get_timestamp() - return stamp - - def entry_abspath(self, name): - return self.abspath + os.sep + name - - def entry_labspath(self, name): - return self.labspath + '/' + name - - def entry_path(self, name): - return self.path + os.sep + name - - def entry_tpath(self, name): - return self.tpath + os.sep + name - - def entry_exists_on_disk(self, name): - try: - d = self.on_disk_entries - except AttributeError: - d = {} - try: - entries = os.listdir(self.abspath) - except OSError: - pass - else: - for entry in map(_my_normcase, entries): - d[entry] = 1 - self.on_disk_entries = d - return d.has_key(_my_normcase(name)) - - memoizer_counters.append(SCons.Memoize.CountValue('srcdir_list')) - - def srcdir_list(self): - try: - return self._memo['srcdir_list'] - except KeyError: - pass - - result = [] - - dirname = '.' - dir = self - while dir: - if dir.srcdir: - result.append(dir.srcdir.Dir(dirname)) - dirname = dir.name + os.sep + dirname - dir = dir.up() - - self._memo['srcdir_list'] = result - - return result - - def srcdir_duplicate(self, name): - for dir in self.srcdir_list(): - if self.is_under(dir): - # We shouldn't source from something in the build path; - # variant_dir is probably under src_dir, in which case - # we are reflecting. - break - if dir.entry_exists_on_disk(name): - srcnode = dir.Entry(name).disambiguate() - if self.duplicate: - node = self.Entry(name).disambiguate() - node.do_duplicate(srcnode) - return node - else: - return srcnode - return None - - def _srcdir_find_file_key(self, filename): - return filename - - memoizer_counters.append(SCons.Memoize.CountDict('srcdir_find_file', _srcdir_find_file_key)) - - def srcdir_find_file(self, filename): - try: - memo_dict = self._memo['srcdir_find_file'] - except KeyError: - memo_dict = {} - self._memo['srcdir_find_file'] = memo_dict - else: - try: - return memo_dict[filename] - except KeyError: - pass - - def func(node): - if (isinstance(node, File) or isinstance(node, Entry)) and \ - (node.is_derived() or node.exists()): - return node - return None - - norm_name = _my_normcase(filename) - - for rdir in self.get_all_rdirs(): - try: node = rdir.entries[norm_name] - except KeyError: node = rdir.file_on_disk(filename) - else: node = func(node) - if node: - result = (node, self) - memo_dict[filename] = result - return result - - for srcdir in self.srcdir_list(): - for rdir in srcdir.get_all_rdirs(): - try: node = rdir.entries[norm_name] - except KeyError: node = rdir.file_on_disk(filename) - else: node = func(node) - if node: - result = (File(filename, self, self.fs), srcdir) - memo_dict[filename] = result - return result - - result = (None, None) - memo_dict[filename] = result - return result - - def dir_on_disk(self, name): - if self.entry_exists_on_disk(name): - try: return self.Dir(name) - except TypeError: pass - node = self.srcdir_duplicate(name) - if isinstance(node, File): - return None - return node - - def file_on_disk(self, name): - if self.entry_exists_on_disk(name) or \ - diskcheck_rcs(self, name) or \ - diskcheck_sccs(self, name): - try: return self.File(name) - except TypeError: pass - node = self.srcdir_duplicate(name) - if isinstance(node, Dir): - return None - return node - - def walk(self, func, arg): - """ - Walk this directory tree by calling the specified function - for each directory in the tree. - - This behaves like the os.path.walk() function, but for in-memory - Node.FS.Dir objects. The function takes the same arguments as - the functions passed to os.path.walk(): - - func(arg, dirname, fnames) - - Except that "dirname" will actually be the directory *Node*, - not the string. The '.' and '..' entries are excluded from - fnames. The fnames list may be modified in-place to filter the - subdirectories visited or otherwise impose a specific order. - The "arg" argument is always passed to func() and may be used - in any way (or ignored, passing None is common). - """ - entries = self.entries - names = entries.keys() - names.remove('.') - names.remove('..') - func(arg, self, names) - select_dirs = lambda n, e=entries: isinstance(e[n], Dir) - for dirname in filter(select_dirs, names): - entries[dirname].walk(func, arg) - - def glob(self, pathname, ondisk=True, source=False, strings=False): - """ - Returns a list of Nodes (or strings) matching a specified - pathname pattern. - - Pathname patterns follow UNIX shell semantics: * matches - any-length strings of any characters, ? matches any character, - and [] can enclose lists or ranges of characters. Matches do - not span directory separators. - - The matches take into account Repositories, returning local - Nodes if a corresponding entry exists in a Repository (either - an in-memory Node or something on disk). - - By defafult, the glob() function matches entries that exist - on-disk, in addition to in-memory Nodes. Setting the "ondisk" - argument to False (or some other non-true value) causes the glob() - function to only match in-memory Nodes. The default behavior is - to return both the on-disk and in-memory Nodes. - - The "source" argument, when true, specifies that corresponding - source Nodes must be returned if you're globbing in a build - directory (initialized with VariantDir()). The default behavior - is to return Nodes local to the VariantDir(). - - The "strings" argument, when true, returns the matches as strings, - not Nodes. The strings are path names relative to this directory. - - The underlying algorithm is adapted from the glob.glob() function - in the Python library (but heavily modified), and uses fnmatch() - under the covers. - """ - dirname, basename = os.path.split(pathname) - if not dirname: - return self._glob1(basename, ondisk, source, strings) - if has_glob_magic(dirname): - list = self.glob(dirname, ondisk, source, strings=False) - else: - list = [self.Dir(dirname, create=True)] - result = [] - for dir in list: - r = dir._glob1(basename, ondisk, source, strings) - if strings: - r = map(lambda x, d=str(dir): os.path.join(d, x), r) - result.extend(r) - result.sort(lambda a, b: cmp(str(a), str(b))) - return result - - def _glob1(self, pattern, ondisk=True, source=False, strings=False): - """ - Globs for and returns a list of entry names matching a single - pattern in this directory. - - This searches any repositories and source directories for - corresponding entries and returns a Node (or string) relative - to the current directory if an entry is found anywhere. - - TODO: handle pattern with no wildcard - """ - search_dir_list = self.get_all_rdirs() - for srcdir in self.srcdir_list(): - search_dir_list.extend(srcdir.get_all_rdirs()) - - selfEntry = self.Entry - names = [] - for dir in search_dir_list: - # We use the .name attribute from the Node because the keys of - # the dir.entries dictionary are normalized (that is, all upper - # case) on case-insensitive systems like Windows. - #node_names = [ v.name for k, v in dir.entries.items() if k not in ('.', '..') ] - entry_names = filter(lambda n: n not in ('.', '..'), dir.entries.keys()) - node_names = map(lambda n, e=dir.entries: e[n].name, entry_names) - names.extend(node_names) - if not strings: - # Make sure the working directory (self) actually has - # entries for all Nodes in repositories or variant dirs. - map(selfEntry, node_names) - if ondisk: - try: - disk_names = os.listdir(dir.abspath) - except os.error: - continue - names.extend(disk_names) - if not strings: - # We're going to return corresponding Nodes in - # the local directory, so we need to make sure - # those Nodes exist. We only want to create - # Nodes for the entries that will match the - # specified pattern, though, which means we - # need to filter the list here, even though - # the overall list will also be filtered later, - # after we exit this loop. - if pattern[0] != '.': - #disk_names = [ d for d in disk_names if d[0] != '.' ] - disk_names = filter(lambda x: x[0] != '.', disk_names) - disk_names = fnmatch.filter(disk_names, pattern) - dirEntry = dir.Entry - for name in disk_names: - # Add './' before disk filename so that '#' at - # beginning of filename isn't interpreted. - name = './' + name - node = dirEntry(name).disambiguate() - n = selfEntry(name) - if n.__class__ != node.__class__: - n.__class__ = node.__class__ - n._morph() - - names = set(names) - if pattern[0] != '.': - #names = [ n for n in names if n[0] != '.' ] - names = filter(lambda x: x[0] != '.', names) - names = fnmatch.filter(names, pattern) - - if strings: - return names - - #return [ self.entries[_my_normcase(n)] for n in names ] - return map(lambda n, e=self.entries: e[_my_normcase(n)], names) - -class RootDir(Dir): - """A class for the root directory of a file system. - - This is the same as a Dir class, except that the path separator - ('/' or '\\') is actually part of the name, so we don't need to - add a separator when creating the path names of entries within - this directory. - """ - def __init__(self, name, fs): - if __debug__: logInstanceCreation(self, 'Node.FS.RootDir') - # We're going to be our own parent directory (".." entry and .dir - # attribute) so we have to set up some values so Base.__init__() - # won't gag won't it calls some of our methods. - self.abspath = '' - self.labspath = '' - self.path = '' - self.tpath = '' - self.path_elements = [] - self.duplicate = 0 - self.root = self - Base.__init__(self, name, self, fs) - - # Now set our paths to what we really want them to be: the - # initial drive letter (the name) plus the directory separator, - # except for the "lookup abspath," which does not have the - # drive letter. - self.abspath = name + os.sep - self.labspath = '' - self.path = name + os.sep - self.tpath = name + os.sep - self._morph() - - self._lookupDict = {} - - # The // and os.sep + os.sep entries are necessary because - # os.path.normpath() seems to preserve double slashes at the - # beginning of a path (presumably for UNC path names), but - # collapses triple slashes to a single slash. - self._lookupDict[''] = self - self._lookupDict['/'] = self - self._lookupDict['//'] = self - self._lookupDict[os.sep] = self - self._lookupDict[os.sep + os.sep] = self - - def must_be_same(self, klass): - if klass is Dir: - return - Base.must_be_same(self, klass) - - def _lookup_abs(self, p, klass, create=1): - """ - Fast (?) lookup of a *normalized* absolute path. - - This method is intended for use by internal lookups with - already-normalized path data. For general-purpose lookups, - use the FS.Entry(), FS.Dir() or FS.File() methods. - - The caller is responsible for making sure we're passed a - normalized absolute path; we merely let Python's dictionary look - up and return the One True Node.FS object for the path. - - If no Node for the specified "p" doesn't already exist, and - "create" is specified, the Node may be created after recursive - invocation to find or create the parent directory or directories. - """ - k = _my_normcase(p) - try: - result = self._lookupDict[k] - except KeyError: - if not create: - raise SCons.Errors.UserError - # There is no Node for this path name, and we're allowed - # to create it. - dir_name, file_name = os.path.split(p) - dir_node = self._lookup_abs(dir_name, Dir) - result = klass(file_name, dir_node, self.fs) - - # Double-check on disk (as configured) that the Node we - # created matches whatever is out there in the real world. - result.diskcheck_match() - - self._lookupDict[k] = result - dir_node.entries[_my_normcase(file_name)] = result - dir_node.implicit = None - else: - # There is already a Node for this path name. Allow it to - # complain if we were looking for an inappropriate type. - result.must_be_same(klass) - return result - - def __str__(self): - return self.abspath - - def entry_abspath(self, name): - return self.abspath + name - - def entry_labspath(self, name): - return '/' + name - - def entry_path(self, name): - return self.path + name - - def entry_tpath(self, name): - return self.tpath + name - - def is_under(self, dir): - if self is dir: - return 1 - else: - return 0 - - def up(self): - return None - - def get_dir(self): - return None - - def src_builder(self): - return _null - -class FileNodeInfo(SCons.Node.NodeInfoBase): - current_version_id = 1 - - field_list = ['csig', 'timestamp', 'size'] - - # This should get reset by the FS initialization. - fs = None - - def str_to_node(self, s): - top = self.fs.Top - root = top.root - if do_splitdrive: - drive, s = os.path.splitdrive(s) - if drive: - root = self.fs.get_root(drive) - if not os.path.isabs(s): - s = top.labspath + '/' + s - return root._lookup_abs(s, Entry) - -class FileBuildInfo(SCons.Node.BuildInfoBase): - current_version_id = 1 - - def convert_to_sconsign(self): - """ - Converts this FileBuildInfo object for writing to a .sconsign file - - This replaces each Node in our various dependency lists with its - usual string representation: relative to the top-level SConstruct - directory, or an absolute path if it's outside. - """ - if os.sep == '/': - node_to_str = str - else: - def node_to_str(n): - try: - s = n.path - except AttributeError: - s = str(n) - else: - s = string.replace(s, os.sep, '/') - return s - for attr in ['bsources', 'bdepends', 'bimplicit']: - try: - val = getattr(self, attr) - except AttributeError: - pass - else: - setattr(self, attr, map(node_to_str, val)) - def convert_from_sconsign(self, dir, name): - """ - Converts a newly-read FileBuildInfo object for in-SCons use - - For normal up-to-date checking, we don't have any conversion to - perform--but we're leaving this method here to make that clear. - """ - pass - def prepare_dependencies(self): - """ - Prepares a FileBuildInfo object for explaining what changed - - The bsources, bdepends and bimplicit lists have all been - stored on disk as paths relative to the top-level SConstruct - directory. Convert the strings to actual Nodes (for use by the - --debug=explain code and --implicit-cache). - """ - attrs = [ - ('bsources', 'bsourcesigs'), - ('bdepends', 'bdependsigs'), - ('bimplicit', 'bimplicitsigs'), - ] - for (nattr, sattr) in attrs: - try: - strings = getattr(self, nattr) - nodeinfos = getattr(self, sattr) - except AttributeError: - continue - nodes = [] - for s, ni in izip(strings, nodeinfos): - if not isinstance(s, SCons.Node.Node): - s = ni.str_to_node(s) - nodes.append(s) - setattr(self, nattr, nodes) - def format(self, names=0): - result = [] - bkids = self.bsources + self.bdepends + self.bimplicit - bkidsigs = self.bsourcesigs + self.bdependsigs + self.bimplicitsigs - for bkid, bkidsig in izip(bkids, bkidsigs): - result.append(str(bkid) + ': ' + - string.join(bkidsig.format(names=names), ' ')) - result.append('%s [%s]' % (self.bactsig, self.bact)) - return string.join(result, '\n') - -class File(Base): - """A class for files in a file system. - """ - - memoizer_counters = [] - - NodeInfo = FileNodeInfo - BuildInfo = FileBuildInfo - - md5_chunksize = 64 - - def diskcheck_match(self): - diskcheck_match(self, self.isdir, - "Directory %s found where file expected.") - - def __init__(self, name, directory, fs): - if __debug__: logInstanceCreation(self, 'Node.FS.File') - Base.__init__(self, name, directory, fs) - self._morph() - - def Entry(self, name): - """Create an entry node named 'name' relative to - the directory of this file.""" - return self.dir.Entry(name) - - def Dir(self, name, create=True): - """Create a directory node named 'name' relative to - the directory of this file.""" - return self.dir.Dir(name, create=create) - - def Dirs(self, pathlist): - """Create a list of directories relative to the SConscript - directory of this file.""" - # TODO(1.5) - # return [self.Dir(p) for p in pathlist] - return map(lambda p, s=self: s.Dir(p), pathlist) - - def File(self, name): - """Create a file node named 'name' relative to - the directory of this file.""" - return self.dir.File(name) - - #def generate_build_dict(self): - # """Return an appropriate dictionary of values for building - # this File.""" - # return {'Dir' : self.Dir, - # 'File' : self.File, - # 'RDirs' : self.RDirs} - - def _morph(self): - """Turn a file system node into a File object.""" - self.scanner_paths = {} - if not hasattr(self, '_local'): - self._local = 0 - - # If there was already a Builder set on this entry, then - # we need to make sure we call the target-decider function, - # not the source-decider. Reaching in and doing this by hand - # is a little bogus. We'd prefer to handle this by adding - # an Entry.builder_set() method that disambiguates like the - # other methods, but that starts running into problems with the - # fragile way we initialize Dir Nodes with their Mkdir builders, - # yet still allow them to be overridden by the user. Since it's - # not clear right now how to fix that, stick with what works - # until it becomes clear... - if self.has_builder(): - self.changed_since_last_build = self.decide_target - - def scanner_key(self): - return self.get_suffix() - - def get_contents(self): - if not self.rexists(): - return '' - fname = self.rfile().abspath - try: - r = open(fname, "rb").read() - except EnvironmentError, e: - if not e.filename: - e.filename = fname - raise - return r - - def get_content_hash(self): - """ - Compute and return the MD5 hash for this file. - """ - if not self.rexists(): - return SCons.Util.MD5signature('') - fname = self.rfile().abspath - try: - cs = SCons.Util.MD5filesignature(fname, - chunksize=SCons.Node.FS.File.md5_chunksize*1024) - except EnvironmentError, e: - if not e.filename: - e.filename = fname - raise - return cs - - - memoizer_counters.append(SCons.Memoize.CountValue('get_size')) - - def get_size(self): - try: - return self._memo['get_size'] - except KeyError: - pass - - if self.rexists(): - size = self.rfile().getsize() - else: - size = 0 - - self._memo['get_size'] = size - - return size - - memoizer_counters.append(SCons.Memoize.CountValue('get_timestamp')) - - def get_timestamp(self): - try: - return self._memo['get_timestamp'] - except KeyError: - pass - - if self.rexists(): - timestamp = self.rfile().getmtime() - else: - timestamp = 0 - - self._memo['get_timestamp'] = timestamp - - return timestamp - - def store_info(self): - # Merge our build information into the already-stored entry. - # This accomodates "chained builds" where a file that's a target - # in one build (SConstruct file) is a source in a different build. - # See test/chained-build.py for the use case. - if do_store_info: - self.dir.sconsign().store_info(self.name, self) - - convert_copy_attrs = [ - 'bsources', - 'bimplicit', - 'bdepends', - 'bact', - 'bactsig', - 'ninfo', - ] - - - convert_sig_attrs = [ - 'bsourcesigs', - 'bimplicitsigs', - 'bdependsigs', - ] - - def convert_old_entry(self, old_entry): - # Convert a .sconsign entry from before the Big Signature - # Refactoring, doing what we can to convert its information - # to the new .sconsign entry format. - # - # The old format looked essentially like this: - # - # BuildInfo - # .ninfo (NodeInfo) - # .bsig - # .csig - # .timestamp - # .size - # .bsources - # .bsourcesigs ("signature" list) - # .bdepends - # .bdependsigs ("signature" list) - # .bimplicit - # .bimplicitsigs ("signature" list) - # .bact - # .bactsig - # - # The new format looks like this: - # - # .ninfo (NodeInfo) - # .bsig - # .csig - # .timestamp - # .size - # .binfo (BuildInfo) - # .bsources - # .bsourcesigs (NodeInfo list) - # .bsig - # .csig - # .timestamp - # .size - # .bdepends - # .bdependsigs (NodeInfo list) - # .bsig - # .csig - # .timestamp - # .size - # .bimplicit - # .bimplicitsigs (NodeInfo list) - # .bsig - # .csig - # .timestamp - # .size - # .bact - # .bactsig - # - # The basic idea of the new structure is that a NodeInfo always - # holds all available information about the state of a given Node - # at a certain point in time. The various .b*sigs lists can just - # be a list of pointers to the .ninfo attributes of the different - # dependent nodes, without any copying of information until it's - # time to pickle it for writing out to a .sconsign file. - # - # The complicating issue is that the *old* format only stored one - # "signature" per dependency, based on however the *last* build - # was configured. We don't know from just looking at it whether - # it was a build signature, a content signature, or a timestamp - # "signature". Since we no longer use build signatures, the - # best we can do is look at the length and if it's thirty two, - # assume that it was (or might have been) a content signature. - # If it was actually a build signature, then it will cause a - # rebuild anyway when it doesn't match the new content signature, - # but that's probably the best we can do. - import SCons.SConsign - new_entry = SCons.SConsign.SConsignEntry() - new_entry.binfo = self.new_binfo() - binfo = new_entry.binfo - for attr in self.convert_copy_attrs: - try: - value = getattr(old_entry, attr) - except AttributeError: - continue - setattr(binfo, attr, value) - delattr(old_entry, attr) - for attr in self.convert_sig_attrs: - try: - sig_list = getattr(old_entry, attr) - except AttributeError: - continue - value = [] - for sig in sig_list: - ninfo = self.new_ninfo() - if len(sig) == 32: - ninfo.csig = sig - else: - ninfo.timestamp = sig - value.append(ninfo) - setattr(binfo, attr, value) - delattr(old_entry, attr) - return new_entry - - memoizer_counters.append(SCons.Memoize.CountValue('get_stored_info')) - - def get_stored_info(self): - try: - return self._memo['get_stored_info'] - except KeyError: - pass - - try: - sconsign_entry = self.dir.sconsign().get_entry(self.name) - except (KeyError, EnvironmentError): - import SCons.SConsign - sconsign_entry = SCons.SConsign.SConsignEntry() - sconsign_entry.binfo = self.new_binfo() - sconsign_entry.ninfo = self.new_ninfo() - else: - if isinstance(sconsign_entry, FileBuildInfo): - # This is a .sconsign file from before the Big Signature - # Refactoring; convert it as best we can. - sconsign_entry = self.convert_old_entry(sconsign_entry) - try: - delattr(sconsign_entry.ninfo, 'bsig') - except AttributeError: - pass - - self._memo['get_stored_info'] = sconsign_entry - - return sconsign_entry - - def get_stored_implicit(self): - binfo = self.get_stored_info().binfo - binfo.prepare_dependencies() - try: return binfo.bimplicit - except AttributeError: return None - - def rel_path(self, other): - return self.dir.rel_path(other) - - def _get_found_includes_key(self, env, scanner, path): - return (id(env), id(scanner), path) - - memoizer_counters.append(SCons.Memoize.CountDict('get_found_includes', _get_found_includes_key)) - - def get_found_includes(self, env, scanner, path): - """Return the included implicit dependencies in this file. - Cache results so we only scan the file once per path - regardless of how many times this information is requested. - """ - memo_key = (id(env), id(scanner), path) - try: - memo_dict = self._memo['get_found_includes'] - except KeyError: - memo_dict = {} - self._memo['get_found_includes'] = memo_dict - else: - try: - return memo_dict[memo_key] - except KeyError: - pass - - if scanner: - # result = [n.disambiguate() for n in scanner(self, env, path)] - result = scanner(self, env, path) - result = map(lambda N: N.disambiguate(), result) - else: - result = [] - - memo_dict[memo_key] = result - - return result - - def _createDir(self): - # ensure that the directories for this node are - # created. - self.dir._create() - - def retrieve_from_cache(self): - """Try to retrieve the node's content from a cache - - This method is called from multiple threads in a parallel build, - so only do thread safe stuff here. Do thread unsafe stuff in - built(). - - Returns true iff the node was successfully retrieved. - """ - if self.nocache: - return None - if not self.is_derived(): - return None - return self.get_build_env().get_CacheDir().retrieve(self) - - def built(self): - """ - Called just after this node is successfully built. - """ - # Push this file out to cache before the superclass Node.built() - # method has a chance to clear the build signature, which it - # will do if this file has a source scanner. - # - # We have to clear the memoized values *before* we push it to - # cache so that the memoization of the self.exists() return - # value doesn't interfere. - self.clear_memoized_values() - if self.exists(): - self.get_build_env().get_CacheDir().push(self) - SCons.Node.Node.built(self) - - def visited(self): - if self.exists(): - self.get_build_env().get_CacheDir().push_if_forced(self) - - ninfo = self.get_ninfo() - - csig = self.get_max_drift_csig() - if csig: - ninfo.csig = csig - - ninfo.timestamp = self.get_timestamp() - ninfo.size = self.get_size() - - if not self.has_builder(): - # This is a source file, but it might have been a target file - # in another build that included more of the DAG. Copy - # any build information that's stored in the .sconsign file - # into our binfo object so it doesn't get lost. - old = self.get_stored_info() - self.get_binfo().__dict__.update(old.binfo.__dict__) - - self.store_info() - - def find_src_builder(self): - if self.rexists(): - return None - scb = self.dir.src_builder() - if scb is _null: - if diskcheck_sccs(self.dir, self.name): - scb = get_DefaultSCCSBuilder() - elif diskcheck_rcs(self.dir, self.name): - scb = get_DefaultRCSBuilder() - else: - scb = None - if scb is not None: - try: - b = self.builder - except AttributeError: - b = None - if b is None: - self.builder_set(scb) - return scb - - def has_src_builder(self): - """Return whether this Node has a source builder or not. - - If this Node doesn't have an explicit source code builder, this - is where we figure out, on the fly, if there's a transparent - source code builder for it. - - Note that if we found a source builder, we also set the - self.builder attribute, so that all of the methods that actually - *build* this file don't have to do anything different. - """ - try: - scb = self.sbuilder - except AttributeError: - scb = self.sbuilder = self.find_src_builder() - return scb is not None - - def alter_targets(self): - """Return any corresponding targets in a variant directory. - """ - if self.is_derived(): - return [], None - return self.fs.variant_dir_target_climb(self, self.dir, [self.name]) - - def _rmv_existing(self): - self.clear_memoized_values() - e = Unlink(self, [], None) - if isinstance(e, SCons.Errors.BuildError): - raise e - - # - # Taskmaster interface subsystem - # - - def make_ready(self): - self.has_src_builder() - self.get_binfo() - - def prepare(self): - """Prepare for this file to be created.""" - SCons.Node.Node.prepare(self) - - if self.get_state() != SCons.Node.up_to_date: - if self.exists(): - if self.is_derived() and not self.precious: - self._rmv_existing() - else: - try: - self._createDir() - except SCons.Errors.StopError, drive: - desc = "No drive `%s' for target `%s'." % (drive, self) - raise SCons.Errors.StopError, desc - - # - # - # - - def remove(self): - """Remove this file.""" - if self.exists() or self.islink(): - self.fs.unlink(self.path) - return 1 - return None - - def do_duplicate(self, src): - self._createDir() - Unlink(self, None, None) - e = Link(self, src, None) - if isinstance(e, SCons.Errors.BuildError): - desc = "Cannot duplicate `%s' in `%s': %s." % (src.path, self.dir.path, e.errstr) - raise SCons.Errors.StopError, desc - self.linked = 1 - # The Link() action may or may not have actually - # created the file, depending on whether the -n - # option was used or not. Delete the _exists and - # _rexists attributes so they can be reevaluated. - self.clear() - - memoizer_counters.append(SCons.Memoize.CountValue('exists')) - - def exists(self): - try: - return self._memo['exists'] - except KeyError: - pass - # Duplicate from source path if we are set up to do this. - if self.duplicate and not self.is_derived() and not self.linked: - src = self.srcnode() - if src is not self: - # At this point, src is meant to be copied in a variant directory. - src = src.rfile() - if src.abspath != self.abspath: - if src.exists(): - self.do_duplicate(src) - # Can't return 1 here because the duplication might - # not actually occur if the -n option is being used. - else: - # The source file does not exist. Make sure no old - # copy remains in the variant directory. - if Base.exists(self) or self.islink(): - self.fs.unlink(self.path) - # Return None explicitly because the Base.exists() call - # above will have cached its value if the file existed. - self._memo['exists'] = None - return None - result = Base.exists(self) - self._memo['exists'] = result - return result - - # - # SIGNATURE SUBSYSTEM - # - - def get_max_drift_csig(self): - """ - Returns the content signature currently stored for this node - if it's been unmodified longer than the max_drift value, or the - max_drift value is 0. Returns None otherwise. - """ - old = self.get_stored_info() - mtime = self.get_timestamp() - - max_drift = self.fs.max_drift - if max_drift > 0: - if (time.time() - mtime) > max_drift: - try: - n = old.ninfo - if n.timestamp and n.csig and n.timestamp == mtime: - return n.csig - except AttributeError: - pass - elif max_drift == 0: - try: - return old.ninfo.csig - except AttributeError: - pass - - return None - - def get_csig(self): - """ - Generate a node's content signature, the digested signature - of its content. - - node - the node - cache - alternate node to use for the signature cache - returns - the content signature - """ - ninfo = self.get_ninfo() - try: - return ninfo.csig - except AttributeError: - pass - - csig = self.get_max_drift_csig() - if csig is None: - - try: - if self.get_size() < SCons.Node.FS.File.md5_chunksize: - contents = self.get_contents() - else: - csig = self.get_content_hash() - except IOError: - # This can happen if there's actually a directory on-disk, - # which can be the case if they've disabled disk checks, - # or if an action with a File target actually happens to - # create a same-named directory by mistake. - csig = '' - else: - if not csig: - csig = SCons.Util.MD5signature(contents) - - ninfo.csig = csig - - return csig - - # - # DECISION SUBSYSTEM - # - - def builder_set(self, builder): - SCons.Node.Node.builder_set(self, builder) - self.changed_since_last_build = self.decide_target - - def changed_content(self, target, prev_ni): - cur_csig = self.get_csig() - try: - return cur_csig != prev_ni.csig - except AttributeError: - return 1 - - def changed_state(self, target, prev_ni): - return self.state != SCons.Node.up_to_date - - def changed_timestamp_then_content(self, target, prev_ni): - if not self.changed_timestamp_match(target, prev_ni): - try: - self.get_ninfo().csig = prev_ni.csig - except AttributeError: - pass - return False - return self.changed_content(target, prev_ni) - - def changed_timestamp_newer(self, target, prev_ni): - try: - return self.get_timestamp() > target.get_timestamp() - except AttributeError: - return 1 - - def changed_timestamp_match(self, target, prev_ni): - try: - return self.get_timestamp() != prev_ni.timestamp - except AttributeError: - return 1 - - def decide_source(self, target, prev_ni): - return target.get_build_env().decide_source(self, target, prev_ni) - - def decide_target(self, target, prev_ni): - return target.get_build_env().decide_target(self, target, prev_ni) - - # Initialize this Node's decider function to decide_source() because - # every file is a source file until it has a Builder attached... - changed_since_last_build = decide_source - - def is_up_to_date(self): - T = 0 - if T: Trace('is_up_to_date(%s):' % self) - if not self.exists(): - if T: Trace(' not self.exists():') - # The file doesn't exist locally... - r = self.rfile() - if r != self: - # ...but there is one in a Repository... - if not self.changed(r): - if T: Trace(' changed(%s):' % r) - # ...and it's even up-to-date... - if self._local: - # ...and they'd like a local copy. - e = LocalCopy(self, r, None) - if isinstance(e, SCons.Errors.BuildError): - raise - self.store_info() - if T: Trace(' 1\n') - return 1 - self.changed() - if T: Trace(' None\n') - return None - else: - r = self.changed() - if T: Trace(' self.exists(): %s\n' % r) - return not r - - memoizer_counters.append(SCons.Memoize.CountValue('rfile')) - - def rfile(self): - try: - return self._memo['rfile'] - except KeyError: - pass - result = self - if not self.exists(): - norm_name = _my_normcase(self.name) - for dir in self.dir.get_all_rdirs(): - try: node = dir.entries[norm_name] - except KeyError: node = dir.file_on_disk(self.name) - if node and node.exists() and \ - (isinstance(node, File) or isinstance(node, Entry) \ - or not node.is_derived()): - result = node - break - self._memo['rfile'] = result - return result - - def rstr(self): - return str(self.rfile()) - - def get_cachedir_csig(self): - """ - Fetch a Node's content signature for purposes of computing - another Node's cachesig. - - This is a wrapper around the normal get_csig() method that handles - the somewhat obscure case of using CacheDir with the -n option. - Any files that don't exist would normally be "built" by fetching - them from the cache, but the normal get_csig() method will try - to open up the local file, which doesn't exist because the -n - option meant we didn't actually pull the file from cachedir. - But since the file *does* actually exist in the cachedir, we - can use its contents for the csig. - """ - try: - return self.cachedir_csig - except AttributeError: - pass - - cachedir, cachefile = self.get_build_env().get_CacheDir().cachepath(self) - if not self.exists() and cachefile and os.path.exists(cachefile): - self.cachedir_csig = SCons.Util.MD5filesignature(cachefile, \ - SCons.Node.FS.File.md5_chunksize * 1024) - else: - self.cachedir_csig = self.get_csig() - return self.cachedir_csig - - def get_cachedir_bsig(self): - try: - return self.cachesig - except AttributeError: - pass - - # Add the path to the cache signature, because multiple - # targets built by the same action will all have the same - # build signature, and we have to differentiate them somehow. - children = self.children() - executor = self.get_executor() - # sigs = [n.get_cachedir_csig() for n in children] - sigs = map(lambda n: n.get_cachedir_csig(), children) - sigs.append(SCons.Util.MD5signature(executor.get_contents())) - sigs.append(self.path) - result = self.cachesig = SCons.Util.MD5collect(sigs) - return result - - -default_fs = None - -def get_default_fs(): - global default_fs - if not default_fs: - default_fs = FS() - return default_fs - -class FileFinder: - """ - """ - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - memoizer_counters = [] - - def __init__(self): - self._memo = {} - - def filedir_lookup(self, p, fd=None): - """ - A helper method for find_file() that looks up a directory for - a file we're trying to find. This only creates the Dir Node if - it exists on-disk, since if the directory doesn't exist we know - we won't find any files in it... :-) - - It would be more compact to just use this as a nested function - with a default keyword argument (see the commented-out version - below), but that doesn't work unless you have nested scopes, - so we define it here just so this work under Python 1.5.2. - """ - if fd is None: - fd = self.default_filedir - dir, name = os.path.split(fd) - drive, d = os.path.splitdrive(dir) - if d in ('/', os.sep): - return p.fs.get_root(drive).dir_on_disk(name) - if dir: - p = self.filedir_lookup(p, dir) - if not p: - return None - norm_name = _my_normcase(name) - try: - node = p.entries[norm_name] - except KeyError: - return p.dir_on_disk(name) - if isinstance(node, Dir): - return node - if isinstance(node, Entry): - node.must_be_same(Dir) - return node - return None - - def _find_file_key(self, filename, paths, verbose=None): - return (filename, paths) - - memoizer_counters.append(SCons.Memoize.CountDict('find_file', _find_file_key)) - - def find_file(self, filename, paths, verbose=None): - """ - find_file(str, [Dir()]) -> [nodes] - - filename - a filename to find - paths - a list of directory path *nodes* to search in. Can be - represented as a list, a tuple, or a callable that is - called with no arguments and returns the list or tuple. - - returns - the node created from the found file. - - Find a node corresponding to either a derived file or a file - that exists already. - - Only the first file found is returned, and none is returned - if no file is found. - """ - memo_key = self._find_file_key(filename, paths) - try: - memo_dict = self._memo['find_file'] - except KeyError: - memo_dict = {} - self._memo['find_file'] = memo_dict - else: - try: - return memo_dict[memo_key] - except KeyError: - pass - - if verbose and not callable(verbose): - if not SCons.Util.is_String(verbose): - verbose = "find_file" - verbose = ' %s: ' % verbose - verbose = lambda s, v=verbose: sys.stdout.write(v + s) - - filedir, filename = os.path.split(filename) - if filedir: - # More compact code that we can't use until we drop - # support for Python 1.5.2: - # - #def filedir_lookup(p, fd=filedir): - # """ - # A helper function that looks up a directory for a file - # we're trying to find. This only creates the Dir Node - # if it exists on-disk, since if the directory doesn't - # exist we know we won't find any files in it... :-) - # """ - # dir, name = os.path.split(fd) - # if dir: - # p = filedir_lookup(p, dir) - # if not p: - # return None - # norm_name = _my_normcase(name) - # try: - # node = p.entries[norm_name] - # except KeyError: - # return p.dir_on_disk(name) - # if isinstance(node, Dir): - # return node - # if isinstance(node, Entry): - # node.must_be_same(Dir) - # return node - # if isinstance(node, Dir) or isinstance(node, Entry): - # return node - # return None - #paths = filter(None, map(filedir_lookup, paths)) - - self.default_filedir = filedir - paths = filter(None, map(self.filedir_lookup, paths)) - - result = None - for dir in paths: - if verbose: - verbose("looking for '%s' in '%s' ...\n" % (filename, dir)) - node, d = dir.srcdir_find_file(filename) - if node: - if verbose: - verbose("... FOUND '%s' in '%s'\n" % (filename, d)) - result = node - break - - memo_dict[memo_key] = result - - return result - -find_file = FileFinder().find_file - - -def invalidate_node_memos(targets): - """ - Invalidate the memoized values of all Nodes (files or directories) - that are associated with the given entries. Has been added to - clear the cache of nodes affected by a direct execution of an - action (e.g. Delete/Copy/Chmod). Existing Node caches become - inconsistent if the action is run through Execute(). The argument - `targets` can be a single Node object or filename, or a sequence - of Nodes/filenames. - """ - from traceback import extract_stack - - # First check if the cache really needs to be flushed. Only - # actions run in the SConscript with Execute() seem to be - # affected. XXX The way to check if Execute() is in the stacktrace - # is a very dirty hack and should be replaced by a more sensible - # solution. - for f in extract_stack(): - if f[2] == 'Execute' and f[0][-14:] == 'Environment.py': - break - else: - # Dont have to invalidate, so return - return - - if not SCons.Util.is_List(targets): - targets = [targets] - - for entry in targets: - # If the target is a Node object, clear the cache. If it is a - # filename, look up potentially existing Node object first. - try: - entry.clear_memoized_values() - except AttributeError: - # Not a Node object, try to look up Node by filename. XXX - # This creates Node objects even for those filenames which - # do not correspond to an existing Node object. - node = get_default_fs().Entry(entry) - if node: - node.clear_memoized_values() - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/FS.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/FS.pyc deleted file mode 100644 index 8f3ef02a00330a18136d792c95b41149898e9792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104244 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.py deleted file mode 100644 index 21fbb157c..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.py +++ /dev/null @@ -1,119 +0,0 @@ -"""scons.Node.Python - -Python nodes. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Node/Python.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Node - -class ValueNodeInfo(SCons.Node.NodeInfoBase): - current_version_id = 1 - - field_list = ['csig'] - - def str_to_node(self, s): - return Value(s) - -class ValueBuildInfo(SCons.Node.BuildInfoBase): - current_version_id = 1 - -class Value(SCons.Node.Node): - """A class for Python variables, typically passed on the command line - or generated by a script, but not from a file or some other source. - """ - - NodeInfo = ValueNodeInfo - BuildInfo = ValueBuildInfo - - def __init__(self, value, built_value=None): - SCons.Node.Node.__init__(self) - self.value = value - if not built_value is None: - self.built_value = built_value - - def str_for_display(self): - return repr(self.value) - - def __str__(self): - return str(self.value) - - def make_ready(self): - self.get_csig() - - def build(self, **kw): - if not hasattr(self, 'built_value'): - apply (SCons.Node.Node.build, (self,), kw) - - is_up_to_date = SCons.Node.Node.children_are_up_to_date - - def is_under(self, dir): - # Make Value nodes get built regardless of - # what directory scons was run from. Value nodes - # are outside the filesystem: - return 1 - - def write(self, built_value): - """Set the value of the node.""" - self.built_value = built_value - - def read(self): - """Return the value. If necessary, the value is built.""" - self.build() - if not hasattr(self, 'built_value'): - self.built_value = self.value - return self.built_value - - def get_contents(self): - """By the assumption that the node.built_value is a - deterministic product of the sources, the contents of a Value - are the concatenation of all the contents of its sources. As - the value need not be built when get_contents() is called, we - cannot use the actual node.built_value.""" - contents = str(self.value) - for kid in self.children(None): - contents = contents + kid.get_contents() - return contents - - def changed_since_last_build(self, target, prev_ni): - cur_csig = self.get_csig() - try: - return cur_csig != prev_ni.csig - except AttributeError: - return 1 - - def get_csig(self, calc=None): - """Because we're a Python value node and don't have a real - timestamp, we get to ignore the calculator and just use the - value contents.""" - try: - return self.ninfo.csig - except AttributeError: - pass - contents = self.get_contents() - self.get_ninfo().csig = contents - return contents diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/Python.pyc deleted file mode 100644 index 5c13c01d7cda4b1f9aeef9140a18f7e061292cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4901 zcmcgw?QR>#6`dt1%A{p0{)p2APBKY>nr&@TX6(XE(jb!4A8An`SQU24qFAhUhtf*R zU3OUFvDhZIR!*#2Ren*LXFcUl(RuK(5rp4oo4Yd_<#DjAsK zBrD9|=qcV9@Qr~V*`Ln!M^7FN^>A8B|Fx=C_;m41E|MBCYmie>);&bS(VWMYo zJ~Mpz%VJ#C&Ir(Rz-2Uqfiqw$Bs>wQ6L0x-R1@t_6|U>?CQRvAmw5 zZE2uW>P4Vl1+bT+4@J5yG)0RZUyv!R$;XaEY!5<-uzyBtFs-tS*qMQwOb2wxgNwcX zqyCeDE6dyt#5gY>hnU6{&dWf5hmj2dSqPoq4uF61;T12$qsh$YmAxNIAu9kd&r zhP#fYc=TYF<>`-aEXS;GEVhvjmu-{{4LM=BO+im=+73GSH@IXA+Cj*jsNu+)19tu! zVqI&H5fC(6iu~IlI==xr!8eaiAs1oVC3D%hy5Q_+N11Et?7IB#s?i&yF9+OEsStN` zlceR7TPhX0j&7^8D^K2(wXVuqcSryd$$ks5uai8sR*%a{FKBxaS6O_V8+%{7`7{G4 z^SPd4kV$n}Xm@IKQcfmuk?I_D)?JMcUOzE~sQ~pJi&~xTOk-h)dQI7{XeKJVICokOg6~B6DB}v46qXvgj|25bhX=1ZCLaQAXuLf-!sp zVuiBTP4|#{^ca^VnpJQs=ma}KLd^53{lj65Q{tkvP{jdaN@b>%C@g#lssHA*cDtCK zK?;D1(#%ftc>W0=Q62SD)u*nQ?B~;-(IbkeebJubO40REOx;|Rgk ziE$AV%g^F;#-d4lZlcP>>3kn|>;9$@EnLh;b_n6&g4pw_p=@6vak+*%Lzy6z0_;Mi zz`WN~!IDUv4QXDq&7Mo#yk987kaiKL?RIspLoj9o7I(FE@w1@NF#c z1ujc#Rj?b>S-svk_Q3EXQR~nr4-Q^alb}npYIAxDJ~A84iquqp!fJlATD7)xl)#MK zUIe-|we352d}N%2Vu?(;9Lo*Mg1)a({9bV;asGybmF)Lrl{xbjR`m8X>R3gOiai4~ zRFto$p!eI##mflOeNtJ5>Jcm9Bz^+^6QQ2)BOa0|T@ zs4xC;N4N%b*d^NLhPPtL zz0Bjtil&+%C0dsydRn1=OxzM)K2ftSkQ$(Hs3t8tWBrT?vYsWb%yLYEilB%^1rE&f zWk>yThB+29_qE=)^(?CmEexs(77@qB@2tK&H3cdT#MsiS(fc(GVXQPP&0?jYL0>J|CZ#=`OwA`z0}0<@p+bR zE`Wp@EBqao2UL4ExD(tCq;w+OXvkCc{tlw1+sme!-%u~4U_vo<4sJa!ZmJf-@_AQP z4^xS8(uym1NixK=G8Ylb zD{;@P@(B^+d;#*hD<<~~%$%IY#feEHn-z(PP}{ml^3WK4a;8(LqME^t;F`}4RJ(TA zK5pjM7e0fN;Gr9}hd!W(ia>qsBhxD-RFsJ2sTc_@eI;PO!&C<*iHW;Qa}R`wR|Ph> zA_&whqSLat=k#fO!6670`HBG9#8?+krUW$6u3f3KlcHSGE6$Ty9y^rNoak(3Yn<0} z_=vc~X5XI_X>gI@{484<{t~x>Dc3=Z5SPwXy(@JjxRrz-V88}}O_)t^SyE87n!$DK zQwuw`8yxl|de?_M0az5JWfDbls1%g3uIKqNWJx6E94wENLSm_^!<*;~Z&Tc%VBN4* zyKtQ)^CN_^Xg1}UJ4GauUm%#e>nGt|zWgr5dlZ_2NAr-jtXw6n*Nu2NbUwg3mTR}0 z?FJ9jJMB(W{#v_@PP^0UY state): - state = s - return (state == 0 or state == SCons.Node.up_to_date) - - def is_literal(self): - """Always pass the string representation of a Node to - the command interpreter literally.""" - return 1 - - def render_include_tree(self): - """ - Return a text representation, suitable for displaying to the - user, of the include tree for the sources of this node. - """ - if self.is_derived() and self.env: - env = self.get_build_env() - for s in self.sources: - scanner = self.get_source_scanner(s) - if scanner: - path = self.get_build_scanner_path(scanner) - else: - path = None - def f(node, env=env, scanner=scanner, path=path): - return node.get_found_includes(env, scanner, path) - return SCons.Util.render_tree(s, f, 1) - else: - return None - - def get_abspath(self): - """ - Return an absolute path to the Node. This will return simply - str(Node) by default, but for Node types that have a concept of - relative path, this might return something different. - """ - return str(self) - - def for_signature(self): - """ - Return a string representation of the Node that will always - be the same for this particular Node, no matter what. This - is by contrast to the __str__() method, which might, for - instance, return a relative path for a file Node. The purpose - of this method is to generate a value to be used in signature - calculation for the command line used to build a target, and - we use this method instead of str() to avoid unnecessary - rebuilds. This method does not need to return something that - would actually work in a command line; it can return any kind of - nonsense, so long as it does not change. - """ - return str(self) - - def get_string(self, for_signature): - """This is a convenience function designed primarily to be - used in command generators (i.e., CommandGeneratorActions or - Environment variables that are callable), which are called - with a for_signature argument that is nonzero if the command - generator is being called to generate a signature for the - command line, which determines if we should rebuild or not. - - Such command generators should use this method in preference - to str(Node) when converting a Node to a string, passing - in the for_signature parameter, such that we will call - Node.for_signature() or str(Node) properly, depending on whether - we are calculating a signature or actually constructing a - command line.""" - if for_signature: - return self.for_signature() - return str(self) - - def get_subst_proxy(self): - """ - This method is expected to return an object that will function - exactly like this Node, except that it implements any additional - special features that we would like to be in effect for - Environment variable substitution. The principle use is that - some Nodes would like to implement a __getattr__() method, - but putting that in the Node type itself has a tendency to kill - performance. We instead put it in a proxy and return it from - this method. It is legal for this method to return self - if no new functionality is needed for Environment substitution. - """ - return self - - def explain(self): - if not self.exists(): - return "building `%s' because it doesn't exist\n" % self - - if self.always_build: - return "rebuilding `%s' because AlwaysBuild() is specified\n" % self - - old = self.get_stored_info() - if old is None: - return None - - old = old.binfo - old.prepare_dependencies() - - try: - old_bkids = old.bsources + old.bdepends + old.bimplicit - old_bkidsigs = old.bsourcesigs + old.bdependsigs + old.bimplicitsigs - except AttributeError: - return "Cannot explain why `%s' is being rebuilt: No previous build information found\n" % self - - new = self.get_binfo() - - new_bkids = new.bsources + new.bdepends + new.bimplicit - new_bkidsigs = new.bsourcesigs + new.bdependsigs + new.bimplicitsigs - - osig = dict(izip(old_bkids, old_bkidsigs)) - nsig = dict(izip(new_bkids, new_bkidsigs)) - - # The sources and dependencies we'll want to report are all stored - # as relative paths to this target's directory, but we want to - # report them relative to the top-level SConstruct directory, - # so we only print them after running them through this lambda - # to turn them into the right relative Node and then return - # its string. - def stringify( s, E=self.dir.Entry ) : - if hasattr( s, 'dir' ) : - return str(E(s)) - return str(s) - - lines = [] - - removed = filter(lambda x, nk=new_bkids: not x in nk, old_bkids) - if removed: - removed = map(stringify, removed) - fmt = "`%s' is no longer a dependency\n" - lines.extend(map(lambda s, fmt=fmt: fmt % s, removed)) - - for k in new_bkids: - if not k in old_bkids: - lines.append("`%s' is a new dependency\n" % stringify(k)) - elif k.changed_since_last_build(self, osig[k]): - lines.append("`%s' changed\n" % stringify(k)) - - if len(lines) == 0 and old_bkids != new_bkids: - lines.append("the dependency order changed:\n" + - "%sold: %s\n" % (' '*15, map(stringify, old_bkids)) + - "%snew: %s\n" % (' '*15, map(stringify, new_bkids))) - - if len(lines) == 0: - def fmt_with_title(title, strlines): - lines = string.split(strlines, '\n') - sep = '\n' + ' '*(15 + len(title)) - return ' '*15 + title + string.join(lines, sep) + '\n' - if old.bactsig != new.bactsig: - if old.bact == new.bact: - lines.append("the contents of the build action changed\n" + - fmt_with_title('action: ', new.bact)) - else: - lines.append("the build action changed:\n" + - fmt_with_title('old: ', old.bact) + - fmt_with_title('new: ', new.bact)) - - if len(lines) == 0: - return "rebuilding `%s' for unknown reasons\n" % self - - preamble = "rebuilding `%s' because" % self - if len(lines) == 1: - return "%s %s" % (preamble, lines[0]) - else: - lines = ["%s:\n" % preamble] + lines - return string.join(lines, ' '*11) - -try: - [].extend(UserList.UserList([])) -except TypeError: - # Python 1.5.2 doesn't allow a list to be extended by list-like - # objects (such as UserList instances), so just punt and use - # real lists. - def NodeList(l): - return l -else: - class NodeList(UserList.UserList): - def __str__(self): - return str(map(str, self.data)) - -def get_children(node, parent): return node.children() -def ignore_cycle(node, stack): pass -def do_nothing(node, parent): pass - -class Walker: - """An iterator for walking a Node tree. - - This is depth-first, children are visited before the parent. - The Walker object can be initialized with any node, and - returns the next node on the descent with each next() call. - 'kids_func' is an optional function that will be called to - get the children of a node instead of calling 'children'. - 'cycle_func' is an optional function that will be called - when a cycle is detected. - - This class does not get caught in node cycles caused, for example, - by C header file include loops. - """ - def __init__(self, node, kids_func=get_children, - cycle_func=ignore_cycle, - eval_func=do_nothing): - self.kids_func = kids_func - self.cycle_func = cycle_func - self.eval_func = eval_func - node.wkids = copy.copy(kids_func(node, None)) - self.stack = [node] - self.history = {} # used to efficiently detect and avoid cycles - self.history[node] = None - - def next(self): - """Return the next node for this walk of the tree. - - This function is intentionally iterative, not recursive, - to sidestep any issues of stack size limitations. - """ - - while self.stack: - if self.stack[-1].wkids: - node = self.stack[-1].wkids.pop(0) - if not self.stack[-1].wkids: - self.stack[-1].wkids = None - if self.history.has_key(node): - self.cycle_func(node, self.stack) - else: - node.wkids = copy.copy(self.kids_func(node, self.stack[-1])) - self.stack.append(node) - self.history[node] = None - else: - node = self.stack.pop() - del self.history[node] - if node: - if self.stack: - parent = self.stack[-1] - else: - parent = None - self.eval_func(node, parent) - return node - return None - - def is_done(self): - return not self.stack - - -arg2nodes_lookups = [] diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/__init__.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Node/__init__.pyc deleted file mode 100644 index 486e2ad1fc47a92290da5b5e1efda32685251b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48811 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.py deleted file mode 100644 index c5fed0a14..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.py +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Options/BoolOption.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """Place-holder for the old SCons.Options module hierarchy - -This is for backwards compatibility. The new equivalent is the Variables/ -class hierarchy. These will have deprecation warnings added (some day), -and will then be removed entirely (some day). -""" - -import SCons.Variables -import SCons.Warnings - -warned = False - -def BoolOption(*args, **kw): - global warned - if not warned: - msg = "The BoolOption() function is deprecated; use the BoolVariable() function instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg) - warned = True - return apply(SCons.Variables.BoolVariable, args, kw) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/BoolOption.pyc deleted file mode 100644 index dd7ed557d63b80428a95f7733f0557a6a5f105ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmcIj!EVz)5FI_taNARrO2kf0tCoTgg2Ig!+6tszqK$W&xZSMH?j}*Baw`AG zhj8QoGfvXb3pcEIc6R+{cHeuO#?J?FwDsdd4vQzG@io0}pMnCopcueK04fC403E_b zW0^NO$2E`~Qb-;a(G!u2-WYJfQN;TFfh6P$_ z^WiLx&xeH*^y8Yo%&(`?Dkt)CR7qd-3tjkGBE&g$GdLCabzDrOM&r4L_xLPrA^RF# z8s}O%x9UAFb10^T)?z3pC=^x}b81`~K^vLE44jZkp%QIZjtC%U+fQR@)Vzo`Frtsb z;;5Vui1sZk>e*lDBrbl_b6h*rASIggp0Kt@6g-UyJM=9CAHY=zSB+)Tgqsj`$UmtSXtBF7MEj_*KA0QB{@_t#F%KaIt*SabPsNv zN2!wb1|Kq_z;d9XqX5*F`E|;^EHv^=iV^-XB}WStQ7vp;z-rXF9b?@^R+XN4?!P>M z^P4ogcO(|9E|YfPJQKa1dR`p4L7N7sgFB@xtt?sZG4-P=HKoGNq?_y}2dO8HF0HTP zJa%-MOWoN?vZVX3d+lRtyOMK@W{#I2jDje55^Mx*7NI_MuV-;mIJ!8!o^R1=ucykK z@<)`<@Aw_f(}1fU-hH@Jk;Q#4wL|6ur>w?`_taNARrO2kf0tCoTg5-m4cXe*Fhw{|96Q5OE41ROw89Tj&`i{QlSN-KD%Dt{7#3)y z&4;r%z8Drx(2r~SGQXKhtDMNoQ6+uRFLdE&i4Ygm&EQnv*KskC8ja@~-s7{hh3so| zX`E~6+^YAy%%PYTT8p8apio#@%&Bo{1Z`vrGjKvGg-WztIU<0ZZ9k8tQS&0&z=%Ey zi=%QvAlkREsAqqnleqXz&q?i2gOq5}d&=4#QSdY-?9jImd;r%WTsM|U6K+Ge3nB1i z5r83dRDWy1^*Y=F+y-#RcCqIt?h{3pVP#EwTU?DzUb7)JmgG>q5@Vvx>M(ez&;z(} z9;Hg!8+^!!0?UDljsj3y=GQ6vve3vgDMt9GlpHNoM76MW0jp6Lc8qlwSyg)Gx&QJ2 z&TrD}!I4<7x=h-E^Gx(+>UnYG25lOk4(^Pyw6bKq$JCFi)RYQ4lWww`9HhQ1wM*-( zIFB7&=2CZdk}T=|>t6eq+OFi>qM73*2%{hho&_60n?_taNARrO2kf0tCoTg5``1A&{iPz5^cQGWZTW!csGe6l~egg zK7=C&m~oPZUbtb!v$N|rv-{rLG=4saqpcqwa#%bejj!o-`xF$w1;qd^0#G5S2AB{o z8q2)NIj(_>KsDhzfm@6@Yp-#Gw;ZZGMLW~Qb-;a(xe1y5tb4t)#32XGa_Rb!bn;UP*Yhn}?e$cV zQ~rqZ`5nKbc^Yul!@Cc6Dzdomq;bf6;FQ%^k^HYrna9idpYIi0So4fpQMegwhEezj Dta3AD diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.py deleted file mode 100644 index 7fcbe5f1d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.py +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Options/PackageOption.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """Place-holder for the old SCons.Options module hierarchy - -This is for backwards compatibility. The new equivalent is the Variables/ -class hierarchy. These will have deprecation warnings added (some day), -and will then be removed entirely (some day). -""" - -import SCons.Variables -import SCons.Warnings - -warned = False - -def PackageOption(*args, **kw): - global warned - if not warned: - msg = "The PackageOption() function is deprecated; use the PackageVariable() function instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg) - warned = True - return apply(SCons.Variables.PackageVariable, args, kw) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PackageOption.pyc deleted file mode 100644 index 2fa4364a72fcf60783279e5982bb9d9a25928c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmcIj!EVz)5FI0cM<}rCc~+#j~^PH*fd7*))D^#L?#Wk2x%!kjA(4x)&4_zy-wsE&@;?s0Qc| zE*i_c$vLioj6gNv8-ZJlIc={n!3PdDPtgntgX!tJ(zx`f@&%8_GQXAsoKKT#CZ6x@ zWFqT!_tNbw&AKAX_IF?I?`Fc~gm*uQ>{!bjJHt{dwBoX~!VgiAsXwrMc_8w61G$!1nuOavVu0ptKER!bOgm4=| z;HgUhhR{*{tp!)Ba074?z%6%-+kWWIDY6X@y3^hgmt&LHg2<4iK2)#7n3S_Y3;fcj z2NlM7lqzYj@lhiRYzitm5J25Hze?Hp!YR+v7~!8#ah_^cG diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.py deleted file mode 100644 index 649fc45ea..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.py +++ /dev/null @@ -1,70 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Options/PathOption.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """Place-holder for the old SCons.Options module hierarchy - -This is for backwards compatibility. The new equivalent is the Variables/ -class hierarchy. These will have deprecation warnings added (some day), -and will then be removed entirely (some day). -""" - -import SCons.Variables -import SCons.Warnings - -warned = False - -class _PathOptionClass: - def warn(self): - global warned - if not warned: - msg = "The PathOption() function is deprecated; use the PathVariable() function instead." - SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg) - warned = True - - def __call__(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable, args, kw) - - def PathAccept(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable.PathAccept, args, kw) - - def PathIsDir(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable.PathIsDir, args, kw) - - def PathIsDirCreate(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable.PathIsDirCreate, args, kw) - - def PathIsFile(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable.PathIsFile, args, kw) - - def PathExists(self, *args, **kw): - self.warn() - return apply(SCons.Variables.PathVariable.PathExists, args, kw) - -PathOption = _PathOptionClass() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Options/PathOption.pyc deleted file mode 100644 index 2203b915382df78c1015f3ff20e6c359ed688be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2891 zcmc&$-*4PR5FYz3zT`;x)faeM38}aev9G2@A)pGHwx~#?#fgfz7i;64FgkH(KNslS)lBicx`$Z1T~(-#-}@M$kX^IhFaF3)v_m@@i5`TbvfU zu=7ZW6UtWNg}~pY#Y}1}E%)IuUdyJCry5P%&$TpWoxAO3P+SyRi;Ik~6AF;?`(N~BsoG97Kq*d9G&red6hz||4eI$@(NVwnmwrd~Lt-IY z^LEISSt;q!%O_0u4`h&(APs@_8IqEobDWa=gw*S}CtIu}KUs=NLXxojWE;{}#+)B< zszvQA!d%ozGetLJcV|$aS;jvx=OJCd8IzJ1*A3N+#n?{jxU3ZJ%?8oKXg{`9rA_SW zx3zn^%B9|W5GB#z{}w~av;3Tz;kkn!c!Bq+=Vah1@Y|Qvj39FfFm_AOBN40o~JB_-669i*4SOTyGAvSm-1S6EXd~E&=>%3E^eFzr(2d0 zVLHnq8q+Xt@cQo{;xl^jZX(88T#DDZ;3{!kqzvBCkoMVokBnuHDfm9mv9{rgfRwpO z?~u81=;;SE3a_yZL1r2l@(c5{Xl@5F?`&Uf4lxtFLVVaDE#KS0{Si&%U~{;a#r?uO zFZ3-z{+QrC-aO=IzZb@u+fn&0!F}>JP7@UH-K*a8P)2%(4b&g`p20g2QJTy zpI2M^jkY>z+QWxawl7u(G#^yYr8b!I!Ie^5Z^`W`y&2q2oNrq>9`nb7VTeI5@OQmk JKk)C0{{Zs%erD%+pXBcmIg}Np?VQ6x{Iykbn{INE?St%b4;y)sovgqfvpPD8cOiKseHGpye>7dyU zKnR#sxEB%2qq=5;>bgyG4&Fbp5kIpz7qn%Baxyeb#m7N>?UID z1g&YgX7cA{vEoWqJgk01zN5hq7c#$sj z%rGv56l`Rw5(W6?v-=^}qEW&NG&_~7mSwd6(^{2h)w%z_P(JgX|z z#Cv`AonDr2pZ!o6d-H6c(uf)0GkNovOdfGNZ_aEVw+(A{RYzAp!)5Lxkyv#IIS}M2 zR+Hx#S9NsKr2-(P2g&iMiwZfZ6GQ7IE|Va!_>M^X*A7?@&V4xFF=PVKAht-fJ>mVyY%3rOCPQ}Sf+qQ=cCy}^Ast;*#^NH)DX=rI8uDYmI&Lw(A|n@ zVDm&Qb;6WKSt);7JVt&yIV0Qby6>-v%(h(wXtM> zS6a^Iwjo^3oQjd^%rU&48B5V!tSwD|(#%Hq0!Pdda`B?Zy0tR4xG`flib+h$#8>swlF#* z-$v-z)#{-OF4;r*gbFR8nzXciD#R`wBQl=cC326*`$%p%Ue{RYLkrv&c%vco;dUaX zuwLm4U9I&yjheu1{b(b9f+x2b`G;u#MOByFZUg^bs>O-?#l8#FKiGNGgunHLX2^{! zjHndaCe^%@S?1~`%bL$kmbrFG$XY@HCNvGMEA|%Kl*SSbWivn$c*Ahm8}>#7tLv&P ztL3UN_&GwCso}CrR5|k0T+Nqr3xjbDX-T#D$9Bfiu!e+YctRs6am`7s@21%cu8d45 lKdzS(a_Ikv+@bNL$^X}sZbR7*`hmaa?fLh-_RkOee*g@{B`N>_ diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.py deleted file mode 100644 index 8b877fa4f..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.py +++ /dev/null @@ -1,226 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/PathList.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """SCons.PathList - -A module for handling lists of directory paths (the sort of things -that get set as CPPPATH, LIBPATH, etc.) with as much caching of data and -efficiency as we can while still keeping the evaluation delayed so that we -Do the Right Thing (almost) regardless of how the variable is specified. - -""" - -import os -import string - -import SCons.Memoize -import SCons.Node -import SCons.Util - -# -# Variables to specify the different types of entries in a PathList object: -# - -TYPE_STRING_NO_SUBST = 0 # string with no '$' -TYPE_STRING_SUBST = 1 # string containing '$' -TYPE_OBJECT = 2 # other object - -def node_conv(obj): - """ - This is the "string conversion" routine that we have our substitutions - use to return Nodes, not strings. This relies on the fact that an - EntryProxy object has a get() method that returns the underlying - Node that it wraps, which is a bit of architectural dependence - that we might need to break or modify in the future in response to - additional requirements. - """ - try: - get = obj.get - except AttributeError: - if isinstance(obj, SCons.Node.Node) or SCons.Util.is_Sequence( obj ): - result = obj - else: - result = str(obj) - else: - result = get() - return result - -class _PathList: - """ - An actual PathList object. - """ - def __init__(self, pathlist): - """ - Initializes a PathList object, canonicalizing the input and - pre-processing it for quicker substitution later. - - The stored representation of the PathList is a list of tuples - containing (type, value), where the "type" is one of the TYPE_* - variables defined above. We distinguish between: - - strings that contain no '$' and therefore need no - delayed-evaluation string substitution (we expect that there - will be many of these and that we therefore get a pretty - big win from avoiding string substitution) - - strings that contain '$' and therefore need substitution - (the hard case is things like '${TARGET.dir}/include', - which require re-evaluation for every target + source) - - other objects (which may be something like an EntryProxy - that needs a method called to return a Node) - - Pre-identifying the type of each element in the PathList up-front - and storing the type in the list of tuples is intended to reduce - the amount of calculation when we actually do the substitution - over and over for each target. - """ - if SCons.Util.is_String(pathlist): - pathlist = string.split(pathlist, os.pathsep) - elif not SCons.Util.is_Sequence(pathlist): - pathlist = [pathlist] - - pl = [] - for p in pathlist: - try: - index = string.find(p, '$') - except (AttributeError, TypeError): - type = TYPE_OBJECT - else: - if index == -1: - type = TYPE_STRING_NO_SUBST - else: - type = TYPE_STRING_SUBST - pl.append((type, p)) - - self.pathlist = tuple(pl) - - def __len__(self): return len(self.pathlist) - - def __getitem__(self, i): return self.pathlist[i] - - def subst_path(self, env, target, source): - """ - Performs construction variable substitution on a pre-digested - PathList for a specific target and source. - """ - result = [] - for type, value in self.pathlist: - if type == TYPE_STRING_SUBST: - value = env.subst(value, target=target, source=source, - conv=node_conv) - if SCons.Util.is_Sequence(value): - result.extend(value) - continue - - elif type == TYPE_OBJECT: - value = node_conv(value) - if value: - result.append(value) - return tuple(result) - - -class PathListCache: - """ - A class to handle caching of PathList lookups. - - This class gets instantiated once and then deleted from the namespace, - so it's used as a Singleton (although we don't enforce that in the - usual Pythonic ways). We could have just made the cache a dictionary - in the module namespace, but putting it in this class allows us to - use the same Memoizer pattern that we use elsewhere to count cache - hits and misses, which is very valuable. - - Lookup keys in the cache are computed by the _PathList_key() method. - Cache lookup should be quick, so we don't spend cycles canonicalizing - all forms of the same lookup key. For example, 'x:y' and ['x', - 'y'] logically represent the same list, but we don't bother to - split string representations and treat those two equivalently. - (Note, however, that we do, treat lists and tuples the same.) - - The main type of duplication we're trying to catch will come from - looking up the same path list from two different clones of the - same construction environment. That is, given - - env2 = env1.Clone() - - both env1 and env2 will have the same CPPPATH value, and we can - cheaply avoid re-parsing both values of CPPPATH by using the - common value from this cache. - """ - if SCons.Memoize.use_memoizer: - __metaclass__ = SCons.Memoize.Memoized_Metaclass - - memoizer_counters = [] - - def __init__(self): - self._memo = {} - - def _PathList_key(self, pathlist): - """ - Returns the key for memoization of PathLists. - - Note that we want this to be pretty quick, so we don't completely - canonicalize all forms of the same list. For example, - 'dir1:$ROOT/dir2' and ['$ROOT/dir1', 'dir'] may logically - represent the same list if you're executing from $ROOT, but - we're not going to bother splitting strings into path elements, - or massaging strings into Nodes, to identify that equivalence. - We just want to eliminate obvious redundancy from the normal - case of re-using exactly the same cloned value for a path. - """ - if SCons.Util.is_Sequence(pathlist): - pathlist = tuple(SCons.Util.flatten(pathlist)) - return pathlist - - memoizer_counters.append(SCons.Memoize.CountDict('PathList', _PathList_key)) - - def PathList(self, pathlist): - """ - Returns the cached _PathList object for the specified pathlist, - creating and caching a new object as necessary. - """ - pathlist = self._PathList_key(pathlist) - try: - memo_dict = self._memo['PathList'] - except KeyError: - memo_dict = {} - self._memo['PathList'] = memo_dict - else: - try: - return memo_dict[pathlist] - except KeyError: - pass - - result = _PathList(pathlist) - - memo_dict[pathlist] = result - - return result - -PathList = PathListCache().PathList - - -del PathListCache diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/PathList.pyc deleted file mode 100644 index 7e2a7c0c05732af30be60b85059ccacce6799d87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8007 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.py deleted file mode 100644 index 12158650b..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -"""SCons.Platform - -SCons platform selection. - -This looks for modules that define a callable object that can modify a -construction environment as appropriate for a given platform. - -Note that we take a more simplistic view of "platform" than Python does. -We're looking for a single string that determines a set of -tool-independent variables with which to initialize a construction -environment. Consequently, we'll examine both sys.platform and os.name -(and anything else that might come in to play) in order to return some -specification which is unique enough for our purposes. - -Note that because this subsysem just *selects* a callable that can -modify a construction environment, it's possible for people to define -their own "platform specification" in an arbitrary callable function. -No one needs to use or tie in to this subsystem in order to roll -their own platform definition. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/__init__.py 3842 2008/12/20 22:59:52 scons" - -import imp -import os -import string -import sys -import tempfile - -import SCons.Errors -import SCons.Tool - -def platform_default(): - """Return the platform string for our execution environment. - - The returned value should map to one of the SCons/Platform/*.py - files. Since we're architecture independent, though, we don't - care about the machine architecture. - """ - osname = os.name - if osname == 'java': - osname = os._osType - if osname == 'posix': - if sys.platform == 'cygwin': - return 'cygwin' - elif string.find(sys.platform, 'irix') != -1: - return 'irix' - elif string.find(sys.platform, 'sunos') != -1: - return 'sunos' - elif string.find(sys.platform, 'hp-ux') != -1: - return 'hpux' - elif string.find(sys.platform, 'aix') != -1: - return 'aix' - elif string.find(sys.platform, 'darwin') != -1: - return 'darwin' - else: - return 'posix' - elif os.name == 'os2': - return 'os2' - else: - return sys.platform - -def platform_module(name = platform_default()): - """Return the imported module for the platform. - - This looks for a module name that matches the specified argument. - If the name is unspecified, we fetch the appropriate default for - our execution environment. - """ - full_name = 'SCons.Platform.' + name - if not sys.modules.has_key(full_name): - if os.name == 'java': - eval(full_name) - else: - try: - file, path, desc = imp.find_module(name, - sys.modules['SCons.Platform'].__path__) - try: - mod = imp.load_module(full_name, file, path, desc) - finally: - if file: - file.close() - except ImportError: - try: - import zipimport - importer = zipimport.zipimporter( sys.modules['SCons.Platform'].__path__[0] ) - mod = importer.load_module(full_name) - except ImportError: - raise SCons.Errors.UserError, "No platform named '%s'" % name - setattr(SCons.Platform, name, mod) - return sys.modules[full_name] - -def DefaultToolList(platform, env): - """Select a default tool list for the specified platform. - """ - return SCons.Tool.tool_list(platform, env) - -class PlatformSpec: - def __init__(self, name): - self.name = name - - def __str__(self): - return self.name - -class TempFileMunge: - """A callable class. You can set an Environment variable to this, - then call it with a string argument, then it will perform temporary - file substitution on it. This is used to circumvent the long command - line limitation. - - Example usage: - env["TEMPFILE"] = TempFileMunge - env["LINKCOM"] = "${TEMPFILE('$LINK $TARGET $SOURCES')}" - - By default, the name of the temporary file used begins with a - prefix of '@'. This may be configred for other tool chains by - setting '$TEMPFILEPREFIX'. - - env["TEMPFILEPREFIX"] = '-@' # diab compiler - env["TEMPFILEPREFIX"] = '-via' # arm tool chain - """ - def __init__(self, cmd): - self.cmd = cmd - - def __call__(self, target, source, env, for_signature): - if for_signature: - return self.cmd - cmd = env.subst_list(self.cmd, 0, target, source)[0] - try: - maxline = int(env.subst('$MAXLINELENGTH')) - except ValueError: - maxline = 2048 - - if (reduce(lambda x, y: x + len(y), cmd, 0) + len(cmd)) <= maxline: - return self.cmd - - # We do a normpath because mktemp() has what appears to be - # a bug in Windows that will use a forward slash as a path - # delimiter. Windows's link mistakes that for a command line - # switch and barfs. - # - # We use the .lnk suffix for the benefit of the Phar Lap - # linkloc linker, which likes to append an .lnk suffix if - # none is given. - tmp = os.path.normpath(tempfile.mktemp('.lnk')) - native_tmp = SCons.Util.get_native_path(tmp) - - if env['SHELL'] and env['SHELL'] == 'sh': - # The sh shell will try to escape the backslashes in the - # path, so unescape them. - native_tmp = string.replace(native_tmp, '\\', r'\\\\') - # In Cygwin, we want to use rm to delete the temporary - # file, because del does not exist in the sh shell. - rm = env.Detect('rm') or 'del' - else: - # Don't use 'rm' if the shell is not sh, because rm won't - # work with the Windows shells (cmd.exe or command.com) or - # Windows path names. - rm = 'del' - - prefix = env.subst('$TEMPFILEPREFIX') - if not prefix: - prefix = '@' - - args = map(SCons.Subst.quote_spaces, cmd[1:]) - open(tmp, 'w').write(string.join(args, " ") + "\n") - # XXX Using the SCons.Action.print_actions value directly - # like this is bogus, but expedient. This class should - # really be rewritten as an Action that defines the - # __call__() and strfunction() methods and lets the - # normal action-execution logic handle whether or not to - # print/execute the action. The problem, though, is all - # of that is decided before we execute this method as - # part of expanding the $TEMPFILE construction variable. - # Consequently, refactoring this will have to wait until - # we get more flexible with allowing Actions to exist - # independently and get strung together arbitrarily like - # Ant tasks. In the meantime, it's going to be more - # user-friendly to not let obsession with architectural - # purity get in the way of just being helpful, so we'll - # reach into SCons.Action directly. - if SCons.Action.print_actions: - print("Using tempfile "+native_tmp+" for command line:\n"+ - str(cmd[0]) + " " + string.join(args," ")) - return [ cmd[0], prefix + native_tmp + '\n' + rm, native_tmp ] - -def Platform(name = platform_default()): - """Select a canned Platform specification. - """ - module = platform_module(name) - spec = PlatformSpec(name) - spec.__call__ = module.generate - return spec diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/__init__.pyc deleted file mode 100644 index 994622eb5a7211007fe7fd0c709d842f46e3c3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7086 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 VtQAmFtupn}>`PPQ=O@m){{hGV=H~za diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/aix.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/aix.py deleted file mode 100644 index c8cb7e89f..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/aix.py +++ /dev/null @@ -1,65 +0,0 @@ -"""engine.SCons.Platform.aix - -Platform-specific initialization for IBM AIX systems. - -There normally shouldn't be any need to import this module directly. It -will usually be imported through the generic SCons.Platform.Platform() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/aix.py 3842 2008/12/20 22:59:52 scons" - -import os -import string - -import posix - -def get_xlc(env, xlc=None, xlc_r=None, packages=[]): - # Use the AIX package installer tool lslpp to figure out where a - # given xl* compiler is installed and what version it is. - xlcPath = None - xlcVersion = None - - if xlc is None: - xlc = env.get('CC', 'xlc') - if xlc_r is None: - xlc_r = xlc + '_r' - for package in packages: - cmd = "lslpp -fc " + package + " 2>/dev/null | egrep '" + xlc + "([^-_a-zA-Z0-9].*)?$'" - line = os.popen(cmd).readline() - if line: - v, p = string.split(line, ':')[1:3] - xlcVersion = string.split(v)[1] - xlcPath = string.split(p)[0] - xlcPath = xlcPath[:xlcPath.rindex('/')] - break - return (xlcPath, xlc, xlc_r, xlcVersion) - -def generate(env): - posix.generate(env) - #Based on AIX 5.2: ARG_MAX=24576 - 3000 for environment expansion - env['MAXLINELENGTH'] = 21576 - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/cygwin.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/cygwin.py deleted file mode 100644 index f51eeb16e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/cygwin.py +++ /dev/null @@ -1,49 +0,0 @@ -"""SCons.Platform.cygwin - -Platform-specific initialization for Cygwin systems. - -There normally shouldn't be any need to import this module directly. It -will usually be imported through the generic SCons.Platform.Platform() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/cygwin.py 3842 2008/12/20 22:59:52 scons" - -import posix -from SCons.Platform import TempFileMunge - -def generate(env): - posix.generate(env) - - env['PROGPREFIX'] = '' - env['PROGSUFFIX'] = '.exe' - env['SHLIBPREFIX'] = '' - env['SHLIBSUFFIX'] = '.dll' - env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX' ] - env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ] - env['TEMPFILE'] = TempFileMunge - env['TEMPFILEPREFIX'] = '@' - env['MAXLINELENGTH'] = 2048 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.py deleted file mode 100644 index 94365465c..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.py +++ /dev/null @@ -1,40 +0,0 @@ -"""engine.SCons.Platform.darwin - -Platform-specific initialization for Mac OS X systems. - -There normally shouldn't be any need to import this module directly. It -will usually be imported through the generic SCons.Platform.Platform() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/darwin.py 3842 2008/12/20 22:59:52 scons" - -import posix - -def generate(env): - posix.generate(env) - env['SHLIBSUFFIX'] = '.dylib' - env['ENV']['PATH'] = env['ENV']['PATH'] + ':/sw/bin' diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/darwin.pyc deleted file mode 100644 index 2b5cd8f7df29ee7d636dc94043262c94ad5a8d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmcIiO>Yx15cMW)sFwDOdYcQd9Ac+SBc)MQ$!Xj?) zANe6%xWRZsR0)YAmi%V?@y2gv-2QP8cAkB|%*db7Li-x0eTu*dnIZ;c8W7$hyiHV# zOwrjP-|(pIcamt=U;l|9^g?PulQW|&y;iBaH&sD-TCJrH!|g`bmLik)G6Sillc|!Q zQzwlEybYIW23HB(fvv3*g{5J5n~O?-#!#tJHQ3xN71z%l%mt*n1}y{!XFwLEsT{am zS||)(Dgj(pB6F&y0Am-frBbl8%O(txHv~`4E3;hWXay{U78PpyD~YZ6=tXFS!k}Jo zAzW@a4ehC~K$Wpg0a(LjTMFA0fR;799300G_j&_%6tlPoaXjpw4Er(I3`-_|;h1Cr z2J^Fx^UMeCBRE1n2ILDNUjq_gL(s#9jJ#=+L+r;P-z85TmLqIk5_OO{u^uU}m7KfB z=q4BM#;3{q^YihY^KZPJd~iExuixBW*gbTH%&ys7>d5~E=et`PD?d4Z)|4l8BJv6w zy3nf#ebRuvLXVY|T;Uz&ijrx=MR(Ps$8^A)G0L(g*9~@+$x_ulqA~6LvuZb9od1nY zA|yBn!XWZ{?h(Rl#!WVxx&6kk#7bIh&1`n#Q){RX>i(O=rZl6?r+c-B4>wXfhn?1b F>o+z3> 8 - -def exec_spawnvpe(l, env): - stat = os.spawnvpe(os.P_WAIT, l[0], l, env) - # os.spawnvpe() returns the actual exit code, not the encoding - # returned by os.waitpid() or os.system(). - return stat - -def exec_fork(l, env): - pid = os.fork() - if not pid: - # Child process. - exitval = 127 - try: - os.execvpe(l[0], l, env) - except OSError, e: - exitval = exitvalmap.get(e[0], e[0]) - sys.stderr.write("scons: %s: %s\n" % (l[0], e[1])) - os._exit(exitval) - else: - # Parent process. - pid, stat = os.waitpid(pid, 0) - if stat & 0xff: - return stat | 0x80 - return stat >> 8 - -def _get_env_command(sh, escape, cmd, args, env): - s = string.join(args) - if env: - l = ['env', '-'] + \ - map(lambda t, e=escape: e(t[0])+'='+e(t[1]), env.items()) + \ - [sh, '-c', escape(s)] - s = string.join(l) - return s - -def env_spawn(sh, escape, cmd, args, env): - return exec_system([_get_env_command( sh, escape, cmd, args, env)], env) - -def spawnvpe_spawn(sh, escape, cmd, args, env): - return exec_spawnvpe([sh, '-c', string.join(args)], env) - -def fork_spawn(sh, escape, cmd, args, env): - return exec_fork([sh, '-c', string.join(args)], env) - -def process_cmd_output(cmd_stdout, cmd_stderr, stdout, stderr): - stdout_eof = stderr_eof = 0 - while not (stdout_eof and stderr_eof): - try: - (i,o,e) = select.select([cmd_stdout, cmd_stderr], [], []) - if cmd_stdout in i: - str = cmd_stdout.read() - if len(str) == 0: - stdout_eof = 1 - elif stdout != None: - stdout.write(str) - if cmd_stderr in i: - str = cmd_stderr.read() - if len(str) == 0: - #sys.__stderr__.write( "stderr_eof=1\n" ) - stderr_eof = 1 - else: - #sys.__stderr__.write( "str(stderr) = %s\n" % str ) - stderr.write(str) - except select.error, (_errno, _strerror): - if _errno != errno.EINTR: - raise - -def exec_popen3(l, env, stdout, stderr): - proc = subprocess.Popen(string.join(l), - stdout=stdout, - stderr=stderr, - shell=True) - stat = proc.wait() - if stat & 0xff: - return stat | 0x80 - return stat >> 8 - -def exec_piped_fork(l, env, stdout, stderr): - # spawn using fork / exec and providing a pipe for the command's - # stdout / stderr stream - if stdout != stderr: - (rFdOut, wFdOut) = os.pipe() - (rFdErr, wFdErr) = os.pipe() - else: - (rFdOut, wFdOut) = os.pipe() - rFdErr = rFdOut - wFdErr = wFdOut - # do the fork - pid = os.fork() - if not pid: - # Child process - os.close( rFdOut ) - if rFdOut != rFdErr: - os.close( rFdErr ) - os.dup2( wFdOut, 1 ) # is there some symbolic way to do that ? - os.dup2( wFdErr, 2 ) - os.close( wFdOut ) - if stdout != stderr: - os.close( wFdErr ) - exitval = 127 - try: - os.execvpe(l[0], l, env) - except OSError, e: - exitval = exitvalmap.get(e[0], e[0]) - stderr.write("scons: %s: %s\n" % (l[0], e[1])) - os._exit(exitval) - else: - # Parent process - pid, stat = os.waitpid(pid, 0) - os.close( wFdOut ) - if stdout != stderr: - os.close( wFdErr ) - childOut = os.fdopen( rFdOut ) - if stdout != stderr: - childErr = os.fdopen( rFdErr ) - else: - childErr = childOut - process_cmd_output(childOut, childErr, stdout, stderr) - os.close( rFdOut ) - if stdout != stderr: - os.close( rFdErr ) - if stat & 0xff: - return stat | 0x80 - return stat >> 8 - -def piped_env_spawn(sh, escape, cmd, args, env, stdout, stderr): - # spawn using Popen3 combined with the env command - # the command name and the command's stdout is written to stdout - # the command's stderr is written to stderr - return exec_popen3([_get_env_command(sh, escape, cmd, args, env)], - env, stdout, stderr) - -def piped_fork_spawn(sh, escape, cmd, args, env, stdout, stderr): - # spawn using fork / exec and providing a pipe for the command's - # stdout / stderr stream - return exec_piped_fork([sh, '-c', string.join(args)], - env, stdout, stderr) - - - -def generate(env): - # If os.spawnvpe() exists, we use it to spawn commands. Otherwise - # if the env utility exists, we use os.system() to spawn commands, - # finally we fall back on os.fork()/os.exec(). - # - # os.spawnvpe() is prefered because it is the most efficient. But - # for Python versions without it, os.system() is prefered because it - # is claimed that it works better with threads (i.e. -j) and is more - # efficient than forking Python. - # - # NB: Other people on the scons-users mailing list have claimed that - # os.fork()/os.exec() works better than os.system(). There may just - # not be a default that works best for all users. - - if os.__dict__.has_key('spawnvpe'): - spawn = spawnvpe_spawn - elif env.Detect('env'): - spawn = env_spawn - else: - spawn = fork_spawn - - if env.Detect('env'): - pspawn = piped_env_spawn - else: - pspawn = piped_fork_spawn - - if not env.has_key('ENV'): - env['ENV'] = {} - env['ENV']['PATH'] = os.environ.get("PATH") - env['OBJPREFIX'] = '' - env['OBJSUFFIX'] = '.o' - env['SHOBJPREFIX'] = '$OBJPREFIX' - env['SHOBJSUFFIX'] = '$OBJSUFFIX' - env['PROGPREFIX'] = '' - env['PROGSUFFIX'] = '' - env['LIBPREFIX'] = 'lib' - env['LIBSUFFIX'] = '.a' - env['SHLIBPREFIX'] = '$LIBPREFIX' - env['SHLIBSUFFIX'] = '.so' - env['LIBPREFIXES'] = [ '$LIBPREFIX' ] - env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ] - env['PSPAWN'] = pspawn - env['SPAWN'] = spawn - env['SHELL'] = 'sh' - env['ESCAPE'] = escape - env['TEMPFILE'] = TempFileMunge - env['TEMPFILEPREFIX'] = '@' - #Based on LINUX: ARG_MAX=ARG_MAX=131072 - 3000 for environment expansion - #Note: specific platforms might rise or lower this value - env['MAXLINELENGTH'] = 128072 - - # This platform supports RPATH specifications. - env['__RPATH'] = '$_RPATH' diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/posix.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/posix.pyc deleted file mode 100644 index f0255a2991d3c94d89642d60747e7a808a0abbd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7562 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 DX@K0N diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/sunos.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/sunos.py deleted file mode 100644 index 03435c691..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/sunos.py +++ /dev/null @@ -1,44 +0,0 @@ -"""engine.SCons.Platform.sunos - -Platform-specific initialization for Sun systems. - -There normally shouldn't be any need to import this module directly. It -will usually be imported through the generic SCons.Platform.Platform() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/sunos.py 3842 2008/12/20 22:59:52 scons" - -import posix - -def generate(env): - posix.generate(env) - # Based on sunSparc 8:32bit - # ARG_MAX=1048320 - 3000 for environment expansion - env['MAXLINELENGTH'] = 1045320 - env['PKGINFO'] = 'pkginfo' - env['PKGCHK'] = '/usr/sbin/pkgchk' - env['ENV']['PATH'] = env['ENV']['PATH'] + ':/opt/SUNWspro/bin:/usr/ccs/bin' diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.py deleted file mode 100644 index 3ec0a526d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.py +++ /dev/null @@ -1,324 +0,0 @@ -"""SCons.Platform.win32 - -Platform-specific initialization for Win32 systems. - -There normally shouldn't be any need to import this module directly. It -will usually be imported through the generic SCons.Platform.Platform() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Platform/win32.py 3842 2008/12/20 22:59:52 scons" - -import os -import os.path -import string -import sys -import tempfile - -from SCons.Platform.posix import exitvalmap -from SCons.Platform import TempFileMunge -import SCons.Util - - - -try: - import msvcrt - import win32api - import win32con - - msvcrt.get_osfhandle - win32api.SetHandleInformation - win32con.HANDLE_FLAG_INHERIT -except ImportError: - parallel_msg = \ - "you do not seem to have the pywin32 extensions installed;\n" + \ - "\tparallel (-j) builds may not work reliably with open Python files." -except AttributeError: - parallel_msg = \ - "your pywin32 extensions do not support file handle operations;\n" + \ - "\tparallel (-j) builds may not work reliably with open Python files." -else: - parallel_msg = None - - import __builtin__ - - _builtin_file = __builtin__.file - _builtin_open = __builtin__.open - - def _scons_file(*args, **kw): - fp = apply(_builtin_file, args, kw) - win32api.SetHandleInformation(msvcrt.get_osfhandle(fp.fileno()), - win32con.HANDLE_FLAG_INHERIT, - 0) - return fp - - def _scons_open(*args, **kw): - fp = apply(_builtin_open, args, kw) - win32api.SetHandleInformation(msvcrt.get_osfhandle(fp.fileno()), - win32con.HANDLE_FLAG_INHERIT, - 0) - return fp - - __builtin__.file = _scons_file - __builtin__.open = _scons_open - - - -# The upshot of all this is that, if you are using Python 1.5.2, -# you had better have cmd or command.com in your PATH when you run -# scons. - -def piped_spawn(sh, escape, cmd, args, env, stdout, stderr): - # There is no direct way to do that in python. What we do - # here should work for most cases: - # In case stdout (stderr) is not redirected to a file, - # we redirect it into a temporary file tmpFileStdout - # (tmpFileStderr) and copy the contents of this file - # to stdout (stderr) given in the argument - if not sh: - sys.stderr.write("scons: Could not find command interpreter, is it in your PATH?\n") - return 127 - else: - # one temporary file for stdout and stderr - tmpFileStdout = os.path.normpath(tempfile.mktemp()) - tmpFileStderr = os.path.normpath(tempfile.mktemp()) - - # check if output is redirected - stdoutRedirected = 0 - stderrRedirected = 0 - for arg in args: - # are there more possibilities to redirect stdout ? - if (string.find( arg, ">", 0, 1 ) != -1 or - string.find( arg, "1>", 0, 2 ) != -1): - stdoutRedirected = 1 - # are there more possibilities to redirect stderr ? - if string.find( arg, "2>", 0, 2 ) != -1: - stderrRedirected = 1 - - # redirect output of non-redirected streams to our tempfiles - if stdoutRedirected == 0: - args.append(">" + str(tmpFileStdout)) - if stderrRedirected == 0: - args.append("2>" + str(tmpFileStderr)) - - # actually do the spawn - try: - args = [sh, '/C', escape(string.join(args)) ] - ret = os.spawnve(os.P_WAIT, sh, args, env) - except OSError, e: - # catch any error - try: - ret = exitvalmap[e[0]] - except KeyError: - sys.stderr.write("scons: unknown OSError exception code %d - %s: %s\n" % (e[0], cmd, e[1])) - if stderr != None: - stderr.write("scons: %s: %s\n" % (cmd, e[1])) - # copy child output from tempfiles to our streams - # and do clean up stuff - if stdout != None and stdoutRedirected == 0: - try: - stdout.write(open( tmpFileStdout, "r" ).read()) - os.remove( tmpFileStdout ) - except (IOError, OSError): - pass - - if stderr != None and stderrRedirected == 0: - try: - stderr.write(open( tmpFileStderr, "r" ).read()) - os.remove( tmpFileStderr ) - except (IOError, OSError): - pass - return ret - -def exec_spawn(l, env): - try: - result = os.spawnve(os.P_WAIT, l[0], l, env) - except OSError, e: - try: - result = exitvalmap[e[0]] - sys.stderr.write("scons: %s: %s\n" % (l[0], e[1])) - except KeyError: - result = 127 - if len(l) > 2: - if len(l[2]) < 1000: - command = string.join(l[0:3]) - else: - command = l[0] - else: - command = l[0] - sys.stderr.write("scons: unknown OSError exception code %d - '%s': %s\n" % (e[0], command, e[1])) - return result - -def spawn(sh, escape, cmd, args, env): - if not sh: - sys.stderr.write("scons: Could not find command interpreter, is it in your PATH?\n") - return 127 - return exec_spawn([sh, '/C', escape(string.join(args))], env) - -# Windows does not allow special characters in file names anyway, so no -# need for a complex escape function, we will just quote the arg, except -# that "cmd /c" requires that if an argument ends with a backslash it -# needs to be escaped so as not to interfere with closing double quote -# that we add. -def escape(x): - if x[-1] == '\\': - x = x + '\\' - return '"' + x + '"' - -# Get the windows system directory name -def get_system_root(): - # A resonable default if we can't read the registry - try: - val = os.environ['SYSTEMROOT'] - except KeyError: - val = "C:/WINDOWS" - pass - - # First see if we can look in the registry... - if SCons.Util.can_read_reg: - try: - # Look for Windows NT system root - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Microsoft\\Windows NT\\CurrentVersion') - val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot') - except SCons.Util.RegError: - try: - # Okay, try the Windows 9x system root - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Microsoft\\Windows\\CurrentVersion') - val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot') - except KeyboardInterrupt: - raise - except: - pass - return val - -# Get the location of the program files directory -def get_program_files_dir(): - # Now see if we can look in the registry... - val = '' - if SCons.Util.can_read_reg: - try: - # Look for Windows Program Files directory - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Microsoft\\Windows\\CurrentVersion') - val, tok = SCons.Util.RegQueryValueEx(k, 'ProgramFilesDir') - except SCons.Util.RegError: - val = '' - pass - - if val == '': - # A reasonable default if we can't read the registry - # (Actually, it's pretty reasonable even if we can :-) - val = os.path.join(os.path.dirname(get_system_root()),"Program Files") - - return val - -def generate(env): - # Attempt to find cmd.exe (for WinNT/2k/XP) or - # command.com for Win9x - cmd_interp = '' - # First see if we can look in the registry... - if SCons.Util.can_read_reg: - try: - # Look for Windows NT system root - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Microsoft\\Windows NT\\CurrentVersion') - val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot') - cmd_interp = os.path.join(val, 'System32\\cmd.exe') - except SCons.Util.RegError: - try: - # Okay, try the Windows 9x system root - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Microsoft\\Windows\\CurrentVersion') - val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot') - cmd_interp = os.path.join(val, 'command.com') - except KeyboardInterrupt: - raise - except: - pass - - # For the special case of not having access to the registry, we - # use a temporary path and pathext to attempt to find the command - # interpreter. If we fail, we try to find the interpreter through - # the env's PATH. The problem with that is that it might not - # contain an ENV and a PATH. - if not cmd_interp: - systemroot = r'C:\Windows' - if os.environ.has_key('SYSTEMROOT'): - systemroot = os.environ['SYSTEMROOT'] - tmp_path = systemroot + os.pathsep + \ - os.path.join(systemroot,'System32') - tmp_pathext = '.com;.exe;.bat;.cmd' - if os.environ.has_key('PATHEXT'): - tmp_pathext = os.environ['PATHEXT'] - cmd_interp = SCons.Util.WhereIs('cmd', tmp_path, tmp_pathext) - if not cmd_interp: - cmd_interp = SCons.Util.WhereIs('command', tmp_path, tmp_pathext) - - if not cmd_interp: - cmd_interp = env.Detect('cmd') - if not cmd_interp: - cmd_interp = env.Detect('command') - - - if not env.has_key('ENV'): - env['ENV'] = {} - - # Import things from the external environment to the construction - # environment's ENV. This is a potential slippery slope, because we - # *don't* want to make builds dependent on the user's environment by - # default. We're doing this for SYSTEMROOT, though, because it's - # needed for anything that uses sockets, and seldom changes, and - # for SYSTEMDRIVE because it's related. - # - # Weigh the impact carefully before adding other variables to this list. - import_env = [ 'SYSTEMDRIVE', 'SYSTEMROOT', 'TEMP', 'TMP' ] - for var in import_env: - v = os.environ.get(var) - if v: - env['ENV'][var] = v - - env['ENV']['PATHEXT'] = '.COM;.EXE;.BAT;.CMD' - env['OBJPREFIX'] = '' - env['OBJSUFFIX'] = '.obj' - env['SHOBJPREFIX'] = '$OBJPREFIX' - env['SHOBJSUFFIX'] = '$OBJSUFFIX' - env['PROGPREFIX'] = '' - env['PROGSUFFIX'] = '.exe' - env['LIBPREFIX'] = '' - env['LIBSUFFIX'] = '.lib' - env['SHLIBPREFIX'] = '' - env['SHLIBSUFFIX'] = '.dll' - env['LIBPREFIXES'] = [ '$LIBPREFIX' ] - env['LIBSUFFIXES'] = [ '$LIBSUFFIX' ] - env['PSPAWN'] = piped_spawn - env['SPAWN'] = spawn - env['SHELL'] = cmd_interp - env['TEMPFILE'] = TempFileMunge - env['TEMPFILEPREFIX'] = '@' - env['MAXLINELENGTH'] = 2048 - env['ESCAPE'] = escape diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Platform/win32.pyc deleted file mode 100644 index c269802527d99140f3c6d5b7699b73b95a35f9a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8193 zcmcgx&2Jmm5uZoOl1P17{*q-o_WCQPlbCW8yG<@p6}onMvBNGT0*O6Ns$vHCr*_ZEdelad=K0~ zOC2rzAzC`rf;(xcQ{WD&bWydNmbyvt_(N1lP&G+QN%IcgJ+#zIjqkOF_R&&b3+|_- z{uVqyO9Q0)sC<}|?x*q~9s^W9LTbUgNgetqttBb=11Y5(%-uypOUKA7q35{td@eoR z?Vce1$xrxRn4YT?qh&v+rZ-*h zjnQPX^?og^>5{wbmMqtEBez&_e^88E-?Kn$EikPWHo{0(!*nt^zp4Xmd0enldcO|kOYpdurEKh64ihRqh*8Cu{qE$Dvs=iaNXv=W}U5YA=v}I+Z(}2Ld3|(b^tv@Vdh6y}w{BvwC1}h28vk-Bm@Y+0G3Q8)Rx|gH27l< z=sS$Ce(j7U!wC#e)QSPWSFF^v@>T0`-K{uKUlD2r$4x(2vjSali;toCO*dM#{F?Tx zxds-F-GU@xI(*xR5m?WeuO(W&CY!?}AfM;p0ZxJJdN`JpBOC{x4*X{E3&+qz_*1k^ zw5{k#oOWUq#i$&osDsLfXd7@RJt2CcDC(jz4uy~@bmUVpjL*4fD3xGV>>G-;TBQ-O z9t*tC$n^>=P}B{KXsTFqqhol<>u5@Z%zA9TB4yNxj%v733L;^#qN9QzE}O+jC-Z{V z+T5_I(NPSV8qZBmXA1YG$L|-ixv7kuolo&vu?)x*tb|w<(b}dwmTM`zkThWq&`2$C zH;R!SiK?{`&v*2-jqB+f={H9r->-xtVmhY1R`E;4%C*z7+N_&+dbqUc*Qv=Jps^3YjFyHwx_pCdb@XfgI_W+n0nZT zHWQh{*-Q3F$da`Fi2oM0g<>s6!M|9Fa*`*8J#AwViiUW7V7Lu*oS5pIYEmVH3Y>ST z5GbJ`1S6bm7NM6pq91=NSTBw^Cg_v4UmQT3wmWzQJH52v{e(KA0SSkHRcfb?RO1Lm zhiMxTH%`ODLh~Ka3<}L}5lhwXPC#Ho2RFgcAsSwe(+Lq@(c(6uE)HXyg3lCS-a81l zOByqz>z^r)sgWxf>TGORKiOF08lek=;Q*i?1kxw)R>#PAE5)lj-c+1gSkJ~fq7#HA zEyqOSObikOyU6-%%kwn0tJ|kCgNVm7z)GG!gD4#{Jl!|LFJy+NW`JJ!>|f2?AsUdaI;s5^+oLf7WHk zx@KJl-Q_SDve3<8O_a;WH#7{?1nyg zCtY)E+9`;pzt6JHp`or$by#)8PpXsgPQ4v!Uw$GXAcA5IUE0UisE0`5Wr0uuQa3-rRD!6}G$T3GK;9k3JT^0iz8gn5J* zAUO~`*;)q$zbAuX#|Edy0f8v^m~+Z9e4j{%d&PP5?R3!kr>)uW;=vyq>G85FPW(fu5D;>u~c!HWFm2mi|D@QNJ$l%xPB zFxs}bInT`nZtx?UGcU1k`#3`v(TGhVN3%~e<{X+7@1~e&#eR)J-q}Eh^-5&3Tyn;m ze(zvy*kt^=WK8&{m^(a+hG2>p)d1Rl^)d{!6J~ls4afRoNp($?So~)Ul5=tF;fr$* z-e3e%gk6(F$9KanM_ArR&cpt9aiHnnQ>@wjo5B~EeVbulW!x*=yvmIvd%QIVtA19Z zIFDa5z|NSUYd8;8;^4(UHd{ILEMfDU;IMM4^OC&BXlRExsbU2a4dF4=)TRl3%;lk2 z+Xb^4M#%ftfv!%}`8&)N@+J_L)wi4F^U7se{{YY!Z2B^GOIXZ;Hw4dRvXWQC=fsHD zh|~v%$>g!Y7hLyfzIL_%b0LFuVE~NH5W`i$BZ-+k6h`bE*S`?w$jp-B+&<%pUdR$@ z?tf?bIau}xvp+Gj9}%rfp{471K%^=i+4&&3z7|d5a9;PF0fSe3Y;3CSrLS-S7wnja5k|edBy6QZWK@w ziMTv7^=r4aSFCD# z23T`xf0z5;<7S$1_#Ir0g9APrNX@KM3LRkqGW`)9;Ypr5)`?7S*E~@7i1o&=#KhTi z$Z31U!!U3*3-~azlh~@SsA0EWpKBIK=h|k03uN0YaJ5BZC9aXL?#QLgzAAXZuiCa^ zyx`x&3%+O`;|0I@JSdcj*IZctvh5oG(sGSoGJuXn2qCUfQTUNUlDKn7r0wOqIF|+# z1!on@-^;JV=;j-$A?l~0-Id{5oZuOUc5r=75|=k*6!Ym3KFcjWJ>b(Nr3j<40l9GF zJfW-reWCs*(lix{-aft)w|mz=lBxq}K2bOssH@|?&bh4_*hb=hEXegwgdUU-rJs@E z-<4|udOzLf=#4pWp$4NtT0x54OJBo3+_xC_Y$D9f;-p7S%A(9 z?gF5Tv|^^YgqO>$mzU`_yg$!=1rSOGfKqfDx@G7pa7Ln6Fz8jmy#@$X4D_bai)sa+ z5#ZSST*nE?**Ub|Iy%~%p@w{&%u9%TWAq^|sA;{Wznvos`II&@^E95#sND+7_8oLf z@M}#I@`ZpY$9S@_^y6YQmd4cBPk2AnEi#MqCgpsKhjLuYip3 zZ4(-q+H}(0e#_+B-Fw)!$7b@T1d^W{U&u)zW)C!#nVyynW9{C{PG=;gcqi(I^evQG zg3F~=sZq>~FHR$YnaOOnzc~E|Zdw^bO+Iv!Tm`vn(dG-$5gmv04lZNS_4e z!cd4x6kE&!f0fFb%F-lCVWmhc0%6C#$qe}Wh0XcB&3Bnp`x+yg1G6ibDw+w25*#@$ zO0UUlIIR(VpfppEk`(i3z2K9M(3)>p1upBb#cmV>QQOAB23Y7H0Tv(1@Ll37z~L4e zig(6ZG4-?>ZYNy~H`6ZEWB3AlSS4|ZH4uMuIE!dJfame}fa*(f9p(tX#ri?_pa1*N zzZaXjjJah`3I)e66$+9B7myBbxSWp{3X-7+g&(F_mFCVV6@p-SA1&BY%qI;#t8!Sf@|n`))ttV!KEM^K;ffghcoYTh z<9eip#=g`VSZIH=Du@^2%B0PkZnFYxN#a>lo1LpMLb+dyC9)ApHfF!i5bxKni3oHM zADh@tZkunhcNh-Y&^w3OPMZH?hhYu99dYv>>%#Y^9@OdL*kNvaVxWyBP_s*P;lE0B RC+;MUCVCQ`i8F~~{{|pn(eD5N diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.py deleted file mode 100644 index ec80fe97a..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.py +++ /dev/null @@ -1,1012 +0,0 @@ -"""SCons.SConf - -Autoconf-like configuration support. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/SConf.py 3842 2008/12/20 22:59:52 scons" - -import os -import re -import string -import StringIO -import sys -import traceback -import types - -import SCons.Action -import SCons.Builder -import SCons.Errors -import SCons.Job -import SCons.Node.FS -import SCons.Taskmaster -import SCons.Util -import SCons.Warnings -import SCons.Conftest - -from SCons.Debug import Trace - -# Turn off the Conftest error logging -SCons.Conftest.LogInputFiles = 0 -SCons.Conftest.LogErrorMessages = 0 - -# Set -build_type = None -build_types = ['clean', 'help'] - -def SetBuildType(type): - global build_type - build_type = type - -# to be set, if we are in dry-run mode -dryrun = 0 - -AUTO=0 # use SCons dependency scanning for up-to-date checks -FORCE=1 # force all tests to be rebuilt -CACHE=2 # force all tests to be taken from cache (raise an error, if necessary) -cache_mode = AUTO - -def SetCacheMode(mode): - """Set the Configure cache mode. mode must be one of "auto", "force", - or "cache".""" - global cache_mode - if mode == "auto": - cache_mode = AUTO - elif mode == "force": - cache_mode = FORCE - elif mode == "cache": - cache_mode = CACHE - else: - raise ValueError, "SCons.SConf.SetCacheMode: Unknown mode " + mode - -progress_display = SCons.Util.display # will be overwritten by SCons.Script -def SetProgressDisplay(display): - """Set the progress display to use (called from SCons.Script)""" - global progress_display - progress_display = display - -SConfFS = None - -_ac_build_counter = 0 # incremented, whenever TryBuild is called -_ac_config_logs = {} # all config.log files created in this build -_ac_config_hs = {} # all config.h files created in this build -sconf_global = None # current sconf object - -def _createConfigH(target, source, env): - t = open(str(target[0]), "w") - defname = re.sub('[^A-Za-z0-9_]', '_', string.upper(str(target[0]))) - t.write("""#ifndef %(DEFNAME)s_SEEN -#define %(DEFNAME)s_SEEN - -""" % {'DEFNAME' : defname}) - t.write(source[0].get_contents()) - t.write(""" -#endif /* %(DEFNAME)s_SEEN */ -""" % {'DEFNAME' : defname}) - t.close() - -def _stringConfigH(target, source, env): - return "scons: Configure: creating " + str(target[0]) - -def CreateConfigHBuilder(env): - """Called just before the building targets phase begins.""" - if len(_ac_config_hs) == 0: - return - action = SCons.Action.Action(_createConfigH, - _stringConfigH) - sconfigHBld = SCons.Builder.Builder(action=action) - env.Append( BUILDERS={'SConfigHBuilder':sconfigHBld} ) - for k in _ac_config_hs.keys(): - env.SConfigHBuilder(k, env.Value(_ac_config_hs[k])) - -class SConfWarning(SCons.Warnings.Warning): - pass -SCons.Warnings.enableWarningClass(SConfWarning) - -# some error definitions -class SConfError(SCons.Errors.UserError): - def __init__(self,msg): - SCons.Errors.UserError.__init__(self,msg) - -class ConfigureDryRunError(SConfError): - """Raised when a file or directory needs to be updated during a Configure - process, but the user requested a dry-run""" - def __init__(self,target): - if not isinstance(target, SCons.Node.FS.File): - msg = 'Cannot create configure directory "%s" within a dry-run.' % str(target) - else: - msg = 'Cannot update configure test "%s" within a dry-run.' % str(target) - SConfError.__init__(self,msg) - -class ConfigureCacheError(SConfError): - """Raised when a use explicitely requested the cache feature, but the test - is run the first time.""" - def __init__(self,target): - SConfError.__init__(self, '"%s" is not yet built and cache is forced.' % str(target)) - -# define actions for building text files -def _createSource( target, source, env ): - fd = open(str(target[0]), "w") - fd.write(source[0].get_contents()) - fd.close() -def _stringSource( target, source, env ): - return (str(target[0]) + ' <-\n |' + - string.replace( source[0].get_contents(), - '\n', "\n |" ) ) - -# python 2.2 introduces types.BooleanType -BooleanTypes = [types.IntType] -if hasattr(types, 'BooleanType'): BooleanTypes.append(types.BooleanType) - -class SConfBuildInfo(SCons.Node.FS.FileBuildInfo): - """ - Special build info for targets of configure tests. Additional members - are result (did the builder succeed last time?) and string, which - contains messages of the original build phase. - """ - result = None # -> 0/None -> no error, != 0 error - string = None # the stdout / stderr output when building the target - - def set_build_result(self, result, string): - self.result = result - self.string = string - - -class Streamer: - """ - 'Sniffer' for a file-like writable object. Similar to the unix tool tee. - """ - def __init__(self, orig): - self.orig = orig - self.s = StringIO.StringIO() - - def write(self, str): - if self.orig: - self.orig.write(str) - self.s.write(str) - - def writelines(self, lines): - for l in lines: - self.write(l + '\n') - - def getvalue(self): - """ - Return everything written to orig since the Streamer was created. - """ - return self.s.getvalue() - - def flush(self): - if self.orig: - self.orig.flush() - self.s.flush() - - -class SConfBuildTask(SCons.Taskmaster.Task): - """ - This is almost the same as SCons.Script.BuildTask. Handles SConfErrors - correctly and knows about the current cache_mode. - """ - def display(self, message): - if sconf_global.logstream: - sconf_global.logstream.write("scons: Configure: " + message + "\n") - - def display_cached_string(self, bi): - """ - Logs the original builder messages, given the SConfBuildInfo instance - bi. - """ - if not isinstance(bi, SConfBuildInfo): - SCons.Warnings.warn(SConfWarning, - "The stored build information has an unexpected class: %s" % bi.__class__) - else: - self.display("The original builder output was:\n" + - string.replace(" |" + str(bi.string), - "\n", "\n |")) - - def failed(self): - # check, if the reason was a ConfigureDryRunError or a - # ConfigureCacheError and if yes, reraise the exception - exc_type = self.exc_info()[0] - if issubclass(exc_type, SConfError): - raise - elif issubclass(exc_type, SCons.Errors.BuildError): - # we ignore Build Errors (occurs, when a test doesn't pass) - # Clear the exception to prevent the contained traceback - # to build a reference cycle. - self.exc_clear() - else: - self.display('Caught exception while building "%s":\n' % - self.targets[0]) - try: - excepthook = sys.excepthook - except AttributeError: - # Earlier versions of Python don't have sys.excepthook... - def excepthook(type, value, tb): - traceback.print_tb(tb) - print type, value - apply(excepthook, self.exc_info()) - return SCons.Taskmaster.Task.failed(self) - - def collect_node_states(self): - # returns (is_up_to_date, cached_error, cachable) - # where is_up_to_date is 1, if the node(s) are up_to_date - # cached_error is 1, if the node(s) are up_to_date, but the - # build will fail - # cachable is 0, if some nodes are not in our cache - T = 0 - changed = False - cached_error = False - cachable = True - for t in self.targets: - if T: Trace('%s' % (t)) - bi = t.get_stored_info().binfo - if isinstance(bi, SConfBuildInfo): - if T: Trace(': SConfBuildInfo') - if cache_mode == CACHE: - t.set_state(SCons.Node.up_to_date) - if T: Trace(': set_state(up_to-date)') - else: - if T: Trace(': get_state() %s' % t.get_state()) - if T: Trace(': changed() %s' % t.changed()) - if (t.get_state() != SCons.Node.up_to_date and t.changed()): - changed = True - if T: Trace(': changed %s' % changed) - cached_error = cached_error or bi.result - else: - if T: Trace(': else') - # the node hasn't been built in a SConf context or doesn't - # exist - cachable = False - changed = ( t.get_state() != SCons.Node.up_to_date ) - if T: Trace(': changed %s' % changed) - if T: Trace('\n') - return (not changed, cached_error, cachable) - - def execute(self): - if not self.targets[0].has_builder(): - return - - sconf = sconf_global - - is_up_to_date, cached_error, cachable = self.collect_node_states() - - if cache_mode == CACHE and not cachable: - raise ConfigureCacheError(self.targets[0]) - elif cache_mode == FORCE: - is_up_to_date = 0 - - if cached_error and is_up_to_date: - self.display("Building \"%s\" failed in a previous run and all " - "its sources are up to date." % str(self.targets[0])) - binfo = self.targets[0].get_stored_info().binfo - self.display_cached_string(binfo) - raise SCons.Errors.BuildError # will be 'caught' in self.failed - elif is_up_to_date: - self.display("\"%s\" is up to date." % str(self.targets[0])) - binfo = self.targets[0].get_stored_info().binfo - self.display_cached_string(binfo) - elif dryrun: - raise ConfigureDryRunError(self.targets[0]) - else: - # note stdout and stderr are the same here - s = sys.stdout = sys.stderr = Streamer(sys.stdout) - try: - env = self.targets[0].get_build_env() - env['PSTDOUT'] = env['PSTDERR'] = s - try: - sconf.cached = 0 - self.targets[0].build() - finally: - sys.stdout = sys.stderr = env['PSTDOUT'] = \ - env['PSTDERR'] = sconf.logstream - except KeyboardInterrupt: - raise - except SystemExit: - exc_value = sys.exc_info()[1] - raise SCons.Errors.ExplicitExit(self.targets[0],exc_value.code) - except Exception, e: - for t in self.targets: - binfo = t.get_binfo() - binfo.__class__ = SConfBuildInfo - binfo.set_build_result(1, s.getvalue()) - sconsign_entry = SCons.SConsign.SConsignEntry() - sconsign_entry.binfo = binfo - #sconsign_entry.ninfo = self.get_ninfo() - # We'd like to do this as follows: - # t.store_info(binfo) - # However, we need to store it as an SConfBuildInfo - # object, and store_info() will turn it into a - # regular FileNodeInfo if the target is itself a - # regular File. - sconsign = t.dir.sconsign() - sconsign.set_entry(t.name, sconsign_entry) - sconsign.merge() - raise e - else: - for t in self.targets: - binfo = t.get_binfo() - binfo.__class__ = SConfBuildInfo - binfo.set_build_result(0, s.getvalue()) - sconsign_entry = SCons.SConsign.SConsignEntry() - sconsign_entry.binfo = binfo - #sconsign_entry.ninfo = self.get_ninfo() - # We'd like to do this as follows: - # t.store_info(binfo) - # However, we need to store it as an SConfBuildInfo - # object, and store_info() will turn it into a - # regular FileNodeInfo if the target is itself a - # regular File. - sconsign = t.dir.sconsign() - sconsign.set_entry(t.name, sconsign_entry) - sconsign.merge() - -class SConfBase: - """This is simply a class to represent a configure context. After - creating a SConf object, you can call any tests. After finished with your - tests, be sure to call the Finish() method, which returns the modified - environment. - Some words about caching: In most cases, it is not necessary to cache - Test results explicitely. Instead, we use the scons dependency checking - mechanism. For example, if one wants to compile a test program - (SConf.TryLink), the compiler is only called, if the program dependencies - have changed. However, if the program could not be compiled in a former - SConf run, we need to explicitely cache this error. - """ - - def __init__(self, env, custom_tests = {}, conf_dir='$CONFIGUREDIR', - log_file='$CONFIGURELOG', config_h = None, _depth = 0): - """Constructor. Pass additional tests in the custom_tests-dictinary, - e.g. custom_tests={'CheckPrivate':MyPrivateTest}, where MyPrivateTest - defines a custom test. - Note also the conf_dir and log_file arguments (you may want to - build tests in the VariantDir, not in the SourceDir) - """ - global SConfFS - if not SConfFS: - SConfFS = SCons.Node.FS.default_fs or \ - SCons.Node.FS.FS(env.fs.pathTop) - if not sconf_global is None: - raise (SCons.Errors.UserError, - "Only one SConf object may be active at one time") - self.env = env - if log_file != None: - log_file = SConfFS.File(env.subst(log_file)) - self.logfile = log_file - self.logstream = None - self.lastTarget = None - self.depth = _depth - self.cached = 0 # will be set, if all test results are cached - - # add default tests - default_tests = { - 'CheckCC' : CheckCC, - 'CheckCXX' : CheckCXX, - 'CheckSHCC' : CheckSHCC, - 'CheckSHCXX' : CheckSHCXX, - 'CheckFunc' : CheckFunc, - 'CheckType' : CheckType, - 'CheckTypeSize' : CheckTypeSize, - 'CheckDeclaration' : CheckDeclaration, - 'CheckHeader' : CheckHeader, - 'CheckCHeader' : CheckCHeader, - 'CheckCXXHeader' : CheckCXXHeader, - 'CheckLib' : CheckLib, - 'CheckLibWithHeader' : CheckLibWithHeader, - } - self.AddTests(default_tests) - self.AddTests(custom_tests) - self.confdir = SConfFS.Dir(env.subst(conf_dir)) - if not config_h is None: - config_h = SConfFS.File(config_h) - self.config_h = config_h - self._startup() - - def Finish(self): - """Call this method after finished with your tests: - env = sconf.Finish() - """ - self._shutdown() - return self.env - - def Define(self, name, value = None, comment = None): - """ - Define a pre processor symbol name, with the optional given value in the - current config header. - - If value is None (default), then #define name is written. If value is not - none, then #define name value is written. - - comment is a string which will be put as a C comment in the - header, to explain the meaning of the value (appropriate C comments /* and - */ will be put automatically.""" - lines = [] - if comment: - comment_str = "/* %s */" % comment - lines.append(comment_str) - - if value is not None: - define_str = "#define %s %s" % (name, value) - else: - define_str = "#define %s" % name - lines.append(define_str) - lines.append('') - - self.config_h_text = self.config_h_text + string.join(lines, '\n') - - def BuildNodes(self, nodes): - """ - Tries to build the given nodes immediately. Returns 1 on success, - 0 on error. - """ - if self.logstream != None: - # override stdout / stderr to write in log file - oldStdout = sys.stdout - sys.stdout = self.logstream - oldStderr = sys.stderr - sys.stderr = self.logstream - - # the engine assumes the current path is the SConstruct directory ... - old_fs_dir = SConfFS.getcwd() - old_os_dir = os.getcwd() - SConfFS.chdir(SConfFS.Top, change_os_dir=1) - - # Because we take responsibility here for writing out our - # own .sconsign info (see SConfBuildTask.execute(), above), - # we override the store_info() method with a null place-holder - # so we really control how it gets written. - for n in nodes: - n.store_info = n.do_not_store_info - - ret = 1 - - try: - # ToDo: use user options for calc - save_max_drift = SConfFS.get_max_drift() - SConfFS.set_max_drift(0) - tm = SCons.Taskmaster.Taskmaster(nodes, SConfBuildTask) - # we don't want to build tests in parallel - jobs = SCons.Job.Jobs(1, tm ) - jobs.run() - for n in nodes: - state = n.get_state() - if (state != SCons.Node.executed and - state != SCons.Node.up_to_date): - # the node could not be built. we return 0 in this case - ret = 0 - finally: - SConfFS.set_max_drift(save_max_drift) - os.chdir(old_os_dir) - SConfFS.chdir(old_fs_dir, change_os_dir=0) - if self.logstream != None: - # restore stdout / stderr - sys.stdout = oldStdout - sys.stderr = oldStderr - return ret - - def pspawn_wrapper(self, sh, escape, cmd, args, env): - """Wrapper function for handling piped spawns. - - This looks to the calling interface (in Action.py) like a "normal" - spawn, but associates the call with the PSPAWN variable from - the construction environment and with the streams to which we - want the output logged. This gets slid into the construction - environment as the SPAWN variable so Action.py doesn't have to - know or care whether it's spawning a piped command or not. - """ - return self.pspawn(sh, escape, cmd, args, env, self.logstream, self.logstream) - - - def TryBuild(self, builder, text = None, extension = ""): - """Low level TryBuild implementation. Normally you don't need to - call that - you can use TryCompile / TryLink / TryRun instead - """ - global _ac_build_counter - - # Make sure we have a PSPAWN value, and save the current - # SPAWN value. - try: - self.pspawn = self.env['PSPAWN'] - except KeyError: - raise SCons.Errors.UserError('Missing PSPAWN construction variable.') - try: - save_spawn = self.env['SPAWN'] - except KeyError: - raise SCons.Errors.UserError('Missing SPAWN construction variable.') - - nodesToBeBuilt = [] - - f = "conftest_" + str(_ac_build_counter) - pref = self.env.subst( builder.builder.prefix ) - suff = self.env.subst( builder.builder.suffix ) - target = self.confdir.File(pref + f + suff) - - try: - # Slide our wrapper into the construction environment as - # the SPAWN function. - self.env['SPAWN'] = self.pspawn_wrapper - sourcetext = self.env.Value(text) - - if text != None: - textFile = self.confdir.File(f + extension) - textFileNode = self.env.SConfSourceBuilder(target=textFile, - source=sourcetext) - nodesToBeBuilt.extend(textFileNode) - source = textFileNode - else: - source = None - - nodes = builder(target = target, source = source) - if not SCons.Util.is_List(nodes): - nodes = [nodes] - nodesToBeBuilt.extend(nodes) - result = self.BuildNodes(nodesToBeBuilt) - - finally: - self.env['SPAWN'] = save_spawn - - _ac_build_counter = _ac_build_counter + 1 - if result: - self.lastTarget = nodes[0] - else: - self.lastTarget = None - - return result - - def TryAction(self, action, text = None, extension = ""): - """Tries to execute the given action with optional source file - contents and optional source file extension , - Returns the status (0 : failed, 1 : ok) and the contents of the - output file. - """ - builder = SCons.Builder.Builder(action=action) - self.env.Append( BUILDERS = {'SConfActionBuilder' : builder} ) - ok = self.TryBuild(self.env.SConfActionBuilder, text, extension) - del self.env['BUILDERS']['SConfActionBuilder'] - if ok: - outputStr = self.lastTarget.get_contents() - return (1, outputStr) - return (0, "") - - def TryCompile( self, text, extension): - """Compiles the program given in text to an env.Object, using extension - as file extension (e.g. '.c'). Returns 1, if compilation was - successful, 0 otherwise. The target is saved in self.lastTarget (for - further processing). - """ - return self.TryBuild(self.env.Object, text, extension) - - def TryLink( self, text, extension ): - """Compiles the program given in text to an executable env.Program, - using extension as file extension (e.g. '.c'). Returns 1, if - compilation was successful, 0 otherwise. The target is saved in - self.lastTarget (for further processing). - """ - return self.TryBuild(self.env.Program, text, extension ) - - def TryRun(self, text, extension ): - """Compiles and runs the program given in text, using extension - as file extension (e.g. '.c'). Returns (1, outputStr) on success, - (0, '') otherwise. The target (a file containing the program's stdout) - is saved in self.lastTarget (for further processing). - """ - ok = self.TryLink(text, extension) - if( ok ): - prog = self.lastTarget - pname = str(prog) - output = SConfFS.File(pname+'.out') - node = self.env.Command(output, prog, [ [ pname, ">", "${TARGET}"] ]) - ok = self.BuildNodes(node) - if ok: - outputStr = output.get_contents() - return( 1, outputStr) - return (0, "") - - class TestWrapper: - """A wrapper around Tests (to ensure sanity)""" - def __init__(self, test, sconf): - self.test = test - self.sconf = sconf - def __call__(self, *args, **kw): - if not self.sconf.active: - raise (SCons.Errors.UserError, - "Test called after sconf.Finish()") - context = CheckContext(self.sconf) - ret = apply(self.test, (context,) + args, kw) - if not self.sconf.config_h is None: - self.sconf.config_h_text = self.sconf.config_h_text + context.config_h - context.Result("error: no result") - return ret - - def AddTest(self, test_name, test_instance): - """Adds test_class to this SConf instance. It can be called with - self.test_name(...)""" - setattr(self, test_name, SConfBase.TestWrapper(test_instance, self)) - - def AddTests(self, tests): - """Adds all the tests given in the tests dictionary to this SConf - instance - """ - for name in tests.keys(): - self.AddTest(name, tests[name]) - - def _createDir( self, node ): - dirName = str(node) - if dryrun: - if not os.path.isdir( dirName ): - raise ConfigureDryRunError(dirName) - else: - if not os.path.isdir( dirName ): - os.makedirs( dirName ) - node._exists = 1 - - def _startup(self): - """Private method. Set up logstream, and set the environment - variables necessary for a piped build - """ - global _ac_config_logs - global sconf_global - global SConfFS - - self.lastEnvFs = self.env.fs - self.env.fs = SConfFS - self._createDir(self.confdir) - self.confdir.up().add_ignore( [self.confdir] ) - - if self.logfile != None and not dryrun: - # truncate logfile, if SConf.Configure is called for the first time - # in a build - if _ac_config_logs.has_key(self.logfile): - log_mode = "a" - else: - _ac_config_logs[self.logfile] = None - log_mode = "w" - fp = open(str(self.logfile), log_mode) - self.logstream = SCons.Util.Unbuffered(fp) - # logfile may stay in a build directory, so we tell - # the build system not to override it with a eventually - # existing file with the same name in the source directory - self.logfile.dir.add_ignore( [self.logfile] ) - - tb = traceback.extract_stack()[-3-self.depth] - old_fs_dir = SConfFS.getcwd() - SConfFS.chdir(SConfFS.Top, change_os_dir=0) - self.logstream.write('file %s,line %d:\n\tConfigure(confdir = %s)\n' % - (tb[0], tb[1], str(self.confdir)) ) - SConfFS.chdir(old_fs_dir) - else: - self.logstream = None - # we use a special builder to create source files from TEXT - action = SCons.Action.Action(_createSource, - _stringSource) - sconfSrcBld = SCons.Builder.Builder(action=action) - self.env.Append( BUILDERS={'SConfSourceBuilder':sconfSrcBld} ) - self.config_h_text = _ac_config_hs.get(self.config_h, "") - self.active = 1 - # only one SConf instance should be active at a time ... - sconf_global = self - - def _shutdown(self): - """Private method. Reset to non-piped spawn""" - global sconf_global, _ac_config_hs - - if not self.active: - raise SCons.Errors.UserError, "Finish may be called only once!" - if self.logstream != None and not dryrun: - self.logstream.write("\n") - self.logstream.close() - self.logstream = None - # remove the SConfSourceBuilder from the environment - blds = self.env['BUILDERS'] - del blds['SConfSourceBuilder'] - self.env.Replace( BUILDERS=blds ) - self.active = 0 - sconf_global = None - if not self.config_h is None: - _ac_config_hs[self.config_h] = self.config_h_text - self.env.fs = self.lastEnvFs - -class CheckContext: - """Provides a context for configure tests. Defines how a test writes to the - screen and log file. - - A typical test is just a callable with an instance of CheckContext as - first argument: - - def CheckCustom(context, ...) - context.Message('Checking my weird test ... ') - ret = myWeirdTestFunction(...) - context.Result(ret) - - Often, myWeirdTestFunction will be one of - context.TryCompile/context.TryLink/context.TryRun. The results of - those are cached, for they are only rebuild, if the dependencies have - changed. - """ - - def __init__(self, sconf): - """Constructor. Pass the corresponding SConf instance.""" - self.sconf = sconf - self.did_show_result = 0 - - # for Conftest.py: - self.vardict = {} - self.havedict = {} - self.headerfilename = None - self.config_h = "" # config_h text will be stored here - # we don't regenerate the config.h file after each test. That means, - # that tests won't be able to include the config.h file, and so - # they can't do an #ifdef HAVE_XXX_H. This shouldn't be a major - # issue, though. If it turns out, that we need to include config.h - # in tests, we must ensure, that the dependencies are worked out - # correctly. Note that we can't use Conftest.py's support for config.h, - # cause we will need to specify a builder for the config.h file ... - - def Message(self, text): - """Inform about what we are doing right now, e.g. - 'Checking for SOMETHING ... ' - """ - self.Display(text) - self.sconf.cached = 1 - self.did_show_result = 0 - - def Result(self, res): - """Inform about the result of the test. res may be an integer or a - string. In case of an integer, the written text will be 'ok' or - 'failed'. - The result is only displayed when self.did_show_result is not set. - """ - if type(res) in BooleanTypes: - if res: - text = "yes" - else: - text = "no" - elif type(res) == types.StringType: - text = res - else: - raise TypeError, "Expected string, int or bool, got " + str(type(res)) - - if self.did_show_result == 0: - # Didn't show result yet, do it now. - self.Display(text + "\n") - self.did_show_result = 1 - - def TryBuild(self, *args, **kw): - return apply(self.sconf.TryBuild, args, kw) - - def TryAction(self, *args, **kw): - return apply(self.sconf.TryAction, args, kw) - - def TryCompile(self, *args, **kw): - return apply(self.sconf.TryCompile, args, kw) - - def TryLink(self, *args, **kw): - return apply(self.sconf.TryLink, args, kw) - - def TryRun(self, *args, **kw): - return apply(self.sconf.TryRun, args, kw) - - def __getattr__( self, attr ): - if( attr == 'env' ): - return self.sconf.env - elif( attr == 'lastTarget' ): - return self.sconf.lastTarget - else: - raise AttributeError, "CheckContext instance has no attribute '%s'" % attr - - #### Stuff used by Conftest.py (look there for explanations). - - def BuildProg(self, text, ext): - self.sconf.cached = 1 - # TODO: should use self.vardict for $CC, $CPPFLAGS, etc. - return not self.TryBuild(self.env.Program, text, ext) - - def CompileProg(self, text, ext): - self.sconf.cached = 1 - # TODO: should use self.vardict for $CC, $CPPFLAGS, etc. - return not self.TryBuild(self.env.Object, text, ext) - - def CompileSharedObject(self, text, ext): - self.sconf.cached = 1 - # TODO: should use self.vardict for $SHCC, $CPPFLAGS, etc. - return not self.TryBuild(self.env.SharedObject, text, ext) - - def RunProg(self, text, ext): - self.sconf.cached = 1 - # TODO: should use self.vardict for $CC, $CPPFLAGS, etc. - st, out = self.TryRun(text, ext) - return not st, out - - def AppendLIBS(self, lib_name_list): - oldLIBS = self.env.get( 'LIBS', [] ) - self.env.Append(LIBS = lib_name_list) - return oldLIBS - - def SetLIBS(self, val): - oldLIBS = self.env.get( 'LIBS', [] ) - self.env.Replace(LIBS = val) - return oldLIBS - - def Display(self, msg): - if self.sconf.cached: - # We assume that Display is called twice for each test here - # once for the Checking for ... message and once for the result. - # The self.sconf.cached flag can only be set between those calls - msg = "(cached) " + msg - self.sconf.cached = 0 - progress_display(msg, append_newline=0) - self.Log("scons: Configure: " + msg + "\n") - - def Log(self, msg): - if self.sconf.logstream != None: - self.sconf.logstream.write(msg) - - #### End of stuff used by Conftest.py. - - -def SConf(*args, **kw): - if kw.get(build_type, True): - kw['_depth'] = kw.get('_depth', 0) + 1 - for bt in build_types: - try: - del kw[bt] - except KeyError: - pass - return apply(SConfBase, args, kw) - else: - return SCons.Util.Null() - - -def CheckFunc(context, function_name, header = None, language = None): - res = SCons.Conftest.CheckFunc(context, function_name, header = header, language = language) - context.did_show_result = 1 - return not res - -def CheckType(context, type_name, includes = "", language = None): - res = SCons.Conftest.CheckType(context, type_name, - header = includes, language = language) - context.did_show_result = 1 - return not res - -def CheckTypeSize(context, type_name, includes = "", language = None, expect = None): - res = SCons.Conftest.CheckTypeSize(context, type_name, - header = includes, language = language, - expect = expect) - context.did_show_result = 1 - return res - -def CheckDeclaration(context, declaration, includes = "", language = None): - res = SCons.Conftest.CheckDeclaration(context, declaration, - includes = includes, - language = language) - context.did_show_result = 1 - return not res - -def createIncludesFromHeaders(headers, leaveLast, include_quotes = '""'): - # used by CheckHeader and CheckLibWithHeader to produce C - #include - # statements from the specified header (list) - if not SCons.Util.is_List(headers): - headers = [headers] - l = [] - if leaveLast: - lastHeader = headers[-1] - headers = headers[:-1] - else: - lastHeader = None - for s in headers: - l.append("#include %s%s%s\n" - % (include_quotes[0], s, include_quotes[1])) - return string.join(l, ''), lastHeader - -def CheckHeader(context, header, include_quotes = '<>', language = None): - """ - A test for a C or C++ header file. - """ - prog_prefix, hdr_to_check = \ - createIncludesFromHeaders(header, 1, include_quotes) - res = SCons.Conftest.CheckHeader(context, hdr_to_check, prog_prefix, - language = language, - include_quotes = include_quotes) - context.did_show_result = 1 - return not res - -def CheckCC(context): - res = SCons.Conftest.CheckCC(context) - return not res - -def CheckCXX(context): - res = SCons.Conftest.CheckCXX(context) - return not res - -def CheckSHCC(context): - res = SCons.Conftest.CheckSHCC(context) - return not res - -def CheckSHCXX(context): - res = SCons.Conftest.CheckSHCXX(context) - return not res - -# Bram: Make this function obsolete? CheckHeader() is more generic. - -def CheckCHeader(context, header, include_quotes = '""'): - """ - A test for a C header file. - """ - return CheckHeader(context, header, include_quotes, language = "C") - - -# Bram: Make this function obsolete? CheckHeader() is more generic. - -def CheckCXXHeader(context, header, include_quotes = '""'): - """ - A test for a C++ header file. - """ - return CheckHeader(context, header, include_quotes, language = "C++") - - -def CheckLib(context, library = None, symbol = "main", - header = None, language = None, autoadd = 1): - """ - A test for a library. See also CheckLibWithHeader. - Note that library may also be None to test whether the given symbol - compiles without flags. - """ - - if library == []: - library = [None] - - if not SCons.Util.is_List(library): - library = [library] - - # ToDo: accept path for the library - res = SCons.Conftest.CheckLib(context, library, symbol, header = header, - language = language, autoadd = autoadd) - context.did_show_result = 1 - return not res - -# XXX -# Bram: Can only include one header and can't use #ifdef HAVE_HEADER_H. - -def CheckLibWithHeader(context, libs, header, language, - call = None, autoadd = 1): - # ToDo: accept path for library. Support system header files. - """ - Another (more sophisticated) test for a library. - Checks, if library and header is available for language (may be 'C' - or 'CXX'). Call maybe be a valid expression _with_ a trailing ';'. - As in CheckLib, we support library=None, to test if the call compiles - without extra link flags. - """ - prog_prefix, dummy = \ - createIncludesFromHeaders(header, 0) - if libs == []: - libs = [None] - - if not SCons.Util.is_List(libs): - libs = [libs] - - res = SCons.Conftest.CheckLib(context, libs, None, prog_prefix, - call = call, language = language, autoadd = autoadd) - context.did_show_result = 1 - return not res diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConf.pyc deleted file mode 100644 index a25a028c870b6f5742c2a25571673369f967a577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37145 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.py deleted file mode 100644 index 8e4c30c14..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.py +++ /dev/null @@ -1,375 +0,0 @@ -"""SCons.SConsign - -Writing and reading information to the .sconsign file or files. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/SConsign.py 3842 2008/12/20 22:59:52 scons" - -import cPickle -import os -import os.path - -import SCons.dblite -import SCons.Warnings - -def corrupt_dblite_warning(filename): - SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning, - "Ignoring corrupt .sconsign file: %s"%filename) - -SCons.dblite.ignore_corrupt_dbfiles = 1 -SCons.dblite.corruption_warning = corrupt_dblite_warning - -#XXX Get rid of the global array so this becomes re-entrant. -sig_files = [] - -# Info for the database SConsign implementation (now the default): -# "DataBase" is a dictionary that maps top-level SConstruct directories -# to open database handles. -# "DB_Module" is the Python database module to create the handles. -# "DB_Name" is the base name of the database file (minus any -# extension the underlying DB module will add). -DataBase = {} -DB_Module = SCons.dblite -DB_Name = ".sconsign" -DB_sync_list = [] - -def Get_DataBase(dir): - global DataBase, DB_Module, DB_Name - top = dir.fs.Top - if not os.path.isabs(DB_Name) and top.repositories: - mode = "c" - for d in [top] + top.repositories: - if dir.is_under(d): - try: - return DataBase[d], mode - except KeyError: - path = d.entry_abspath(DB_Name) - try: db = DataBase[d] = DB_Module.open(path, mode) - except (IOError, OSError): pass - else: - if mode != "r": - DB_sync_list.append(db) - return db, mode - mode = "r" - try: - return DataBase[top], "c" - except KeyError: - db = DataBase[top] = DB_Module.open(DB_Name, "c") - DB_sync_list.append(db) - return db, "c" - except TypeError: - print "DataBase =", DataBase - raise - -def Reset(): - """Reset global state. Used by unit tests that end up using - SConsign multiple times to get a clean slate for each test.""" - global sig_files, DB_sync_list - sig_files = [] - DB_sync_list = [] - -normcase = os.path.normcase - -def write(): - global sig_files - for sig_file in sig_files: - sig_file.write(sync=0) - for db in DB_sync_list: - try: - syncmethod = db.sync - except AttributeError: - pass # Not all anydbm modules have sync() methods. - else: - syncmethod() - -class SConsignEntry: - """ - Wrapper class for the generic entry in a .sconsign file. - The Node subclass populates it with attributes as it pleases. - - XXX As coded below, we do expect a '.binfo' attribute to be added, - but we'll probably generalize this in the next refactorings. - """ - current_version_id = 1 - def __init__(self): - # Create an object attribute from the class attribute so it ends up - # in the pickled data in the .sconsign file. - _version_id = self.current_version_id - def convert_to_sconsign(self): - self.binfo.convert_to_sconsign() - def convert_from_sconsign(self, dir, name): - self.binfo.convert_from_sconsign(dir, name) - -class Base: - """ - This is the controlling class for the signatures for the collection of - entries associated with a specific directory. The actual directory - association will be maintained by a subclass that is specific to - the underlying storage method. This class provides a common set of - methods for fetching and storing the individual bits of information - that make up signature entry. - """ - def __init__(self): - self.entries = {} - self.dirty = False - self.to_be_merged = {} - - def get_entry(self, filename): - """ - Fetch the specified entry attribute. - """ - return self.entries[filename] - - def set_entry(self, filename, obj): - """ - Set the entry. - """ - self.entries[filename] = obj - self.dirty = True - - def do_not_set_entry(self, filename, obj): - pass - - def store_info(self, filename, node): - entry = node.get_stored_info() - entry.binfo.merge(node.get_binfo()) - self.to_be_merged[filename] = node - self.dirty = True - - def do_not_store_info(self, filename, node): - pass - - def merge(self): - for key, node in self.to_be_merged.items(): - entry = node.get_stored_info() - try: - ninfo = entry.ninfo - except AttributeError: - # This happens with SConf Nodes, because the configuration - # subsystem takes direct control over how the build decision - # is made and its information stored. - pass - else: - ninfo.merge(node.get_ninfo()) - self.entries[key] = entry - self.to_be_merged = {} - -class DB(Base): - """ - A Base subclass that reads and writes signature information - from a global .sconsign.db* file--the actual file suffix is - determined by the database module. - """ - def __init__(self, dir): - Base.__init__(self) - - self.dir = dir - - db, mode = Get_DataBase(dir) - - # Read using the path relative to the top of the Repository - # (self.dir.tpath) from which we're fetching the signature - # information. - path = normcase(dir.tpath) - try: - rawentries = db[path] - except KeyError: - pass - else: - try: - self.entries = cPickle.loads(rawentries) - if type(self.entries) is not type({}): - self.entries = {} - raise TypeError - except KeyboardInterrupt: - raise - except Exception, e: - SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning, - "Ignoring corrupt sconsign entry : %s (%s)\n"%(self.dir.tpath, e)) - for key, entry in self.entries.items(): - entry.convert_from_sconsign(dir, key) - - if mode == "r": - # This directory is actually under a repository, which means - # likely they're reaching in directly for a dependency on - # a file there. Don't actually set any entry info, so we - # won't try to write to that .sconsign.dblite file. - self.set_entry = self.do_not_set_entry - self.store_info = self.do_not_store_info - - global sig_files - sig_files.append(self) - - def write(self, sync=1): - if not self.dirty: - return - - self.merge() - - db, mode = Get_DataBase(self.dir) - - # Write using the path relative to the top of the SConstruct - # directory (self.dir.path), not relative to the top of - # the Repository; we only write to our own .sconsign file, - # not to .sconsign files in Repositories. - path = normcase(self.dir.path) - for key, entry in self.entries.items(): - entry.convert_to_sconsign() - db[path] = cPickle.dumps(self.entries, 1) - - if sync: - try: - syncmethod = db.sync - except AttributeError: - # Not all anydbm modules have sync() methods. - pass - else: - syncmethod() - -class Dir(Base): - def __init__(self, fp=None, dir=None): - """ - fp - file pointer to read entries from - """ - Base.__init__(self) - - if not fp: - return - - self.entries = cPickle.load(fp) - if type(self.entries) is not type({}): - self.entries = {} - raise TypeError - - if dir: - for key, entry in self.entries.items(): - entry.convert_from_sconsign(dir, key) - -class DirFile(Dir): - """ - Encapsulates reading and writing a per-directory .sconsign file. - """ - def __init__(self, dir): - """ - dir - the directory for the file - """ - - self.dir = dir - self.sconsign = os.path.join(dir.path, '.sconsign') - - try: - fp = open(self.sconsign, 'rb') - except IOError: - fp = None - - try: - Dir.__init__(self, fp, dir) - except KeyboardInterrupt: - raise - except: - SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning, - "Ignoring corrupt .sconsign file: %s"%self.sconsign) - - global sig_files - sig_files.append(self) - - def write(self, sync=1): - """ - Write the .sconsign file to disk. - - Try to write to a temporary file first, and rename it if we - succeed. If we can't write to the temporary file, it's - probably because the directory isn't writable (and if so, - how did we build anything in this directory, anyway?), so - try to write directly to the .sconsign file as a backup. - If we can't rename, try to copy the temporary contents back - to the .sconsign file. Either way, always try to remove - the temporary file at the end. - """ - if not self.dirty: - return - - self.merge() - - temp = os.path.join(self.dir.path, '.scons%d' % os.getpid()) - try: - file = open(temp, 'wb') - fname = temp - except IOError: - try: - file = open(self.sconsign, 'wb') - fname = self.sconsign - except IOError: - return - for key, entry in self.entries.items(): - entry.convert_to_sconsign() - cPickle.dump(self.entries, file, 1) - file.close() - if fname != self.sconsign: - try: - mode = os.stat(self.sconsign)[0] - os.chmod(self.sconsign, 0666) - os.unlink(self.sconsign) - except (IOError, OSError): - # Try to carry on in the face of either OSError - # (things like permission issues) or IOError (disk - # or network issues). If there's a really dangerous - # issue, it should get re-raised by the calls below. - pass - try: - os.rename(fname, self.sconsign) - except OSError: - # An OSError failure to rename may indicate something - # like the directory has no write permission, but - # the .sconsign file itself might still be writable, - # so try writing on top of it directly. An IOError - # here, or in any of the following calls, would get - # raised, indicating something like a potentially - # serious disk or network issue. - open(self.sconsign, 'wb').write(open(fname, 'rb').read()) - os.chmod(self.sconsign, mode) - try: - os.unlink(temp) - except (IOError, OSError): - pass - -ForDirectory = DB - -def File(name, dbm_module=None): - """ - Arrange for all signatures to be stored in a global .sconsign.db* - file. - """ - global ForDirectory, DB_Name, DB_Module - if name is None: - ForDirectory = DirFile - DB_Module = None - else: - ForDirectory = DB - DB_Name = name - if not dbm_module is None: - DB_Module = dbm_module diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/SConsign.pyc deleted file mode 100644 index fae5c5e8c0b1ebdf9a640a8e646b19519f687d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11423 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 ob=>~KKc"]+)(>|")') - return cs diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/C.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/C.pyc deleted file mode 100644 index 66f5709aeebf356732de9a4a792718990257f2a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.py deleted file mode 100644 index e629b80b0..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.py +++ /dev/null @@ -1,314 +0,0 @@ -"""SCons.Scanner.Fortran - -This module implements the dependency scanner for Fortran code. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/Fortran.py 3842 2008/12/20 22:59:52 scons" - -import re -import string - -import SCons.Node -import SCons.Node.FS -import SCons.Scanner -import SCons.Util -import SCons.Warnings - -class F90Scanner(SCons.Scanner.Classic): - """ - A Classic Scanner subclass for Fortran source files which takes - into account both USE and INCLUDE statements. This scanner will - work for both F77 and F90 (and beyond) compilers. - - Currently, this scanner assumes that the include files do not contain - USE statements. To enable the ability to deal with USE statements - in include files, add logic right after the module names are found - to loop over each include file, search for and locate each USE - statement, and append each module name to the list of dependencies. - Caching the search results in a common dictionary somewhere so that - the same include file is not searched multiple times would be a - smart thing to do. - """ - - def __init__(self, name, suffixes, path_variable, - use_regex, incl_regex, def_regex, *args, **kw): - - self.cre_use = re.compile(use_regex, re.M) - self.cre_incl = re.compile(incl_regex, re.M) - self.cre_def = re.compile(def_regex, re.M) - - def _scan(node, env, path, self=self): - node = node.rfile() - - if not node.exists(): - return [] - - return self.scan(node, env, path) - - kw['function'] = _scan - kw['path_function'] = SCons.Scanner.FindPathDirs(path_variable) - kw['recursive'] = 1 - kw['skeys'] = suffixes - kw['name'] = name - - apply(SCons.Scanner.Current.__init__, (self,) + args, kw) - - def scan(self, node, env, path=()): - - # cache the includes list in node so we only scan it once: - if node.includes != None: - mods_and_includes = node.includes - else: - # retrieve all included filenames - includes = self.cre_incl.findall(node.get_contents()) - # retrieve all USE'd module names - modules = self.cre_use.findall(node.get_contents()) - # retrieve all defined module names - defmodules = self.cre_def.findall(node.get_contents()) - - # Remove all USE'd module names that are defined in the same file - d = {} - for m in defmodules: - d[m] = 1 - modules = filter(lambda m, d=d: not d.has_key(m), modules) - #modules = self.undefinedModules(modules, defmodules) - - # Convert module name to a .mod filename - suffix = env.subst('$FORTRANMODSUFFIX') - modules = map(lambda x, s=suffix: string.lower(x) + s, modules) - # Remove unique items from the list - mods_and_includes = SCons.Util.unique(includes+modules) - node.includes = mods_and_includes - - # This is a hand-coded DSU (decorate-sort-undecorate, or - # Schwartzian transform) pattern. The sort key is the raw name - # of the file as specifed on the USE or INCLUDE line, which lets - # us keep the sort order constant regardless of whether the file - # is actually found in a Repository or locally. - nodes = [] - source_dir = node.get_dir() - if callable(path): - path = path() - for dep in mods_and_includes: - n, i = self.find_include(dep, source_dir, path) - - if n is None: - SCons.Warnings.warn(SCons.Warnings.DependencyWarning, - "No dependency generated for file: %s (referenced by: %s) -- file not found" % (i, node)) - else: - sortkey = self.sort_key(dep) - nodes.append((sortkey, n)) - - nodes.sort() - nodes = map(lambda pair: pair[1], nodes) - return nodes - -def FortranScan(path_variable="FORTRANPATH"): - """Return a prototype Scanner instance for scanning source files - for Fortran USE & INCLUDE statements""" - -# The USE statement regex matches the following: -# -# USE module_name -# USE :: module_name -# USE, INTRINSIC :: module_name -# USE, NON_INTRINSIC :: module_name -# -# Limitations -# -# -- While the regex can handle multiple USE statements on one line, -# it cannot properly handle them if they are commented out. -# In either of the following cases: -# -# ! USE mod_a ; USE mod_b [entire line is commented out] -# USE mod_a ! ; USE mod_b [in-line comment of second USE statement] -# -# the second module name (mod_b) will be picked up as a dependency -# even though it should be ignored. The only way I can see -# to rectify this would be to modify the scanner to eliminate -# the call to re.findall, read in the contents of the file, -# treating the comment character as an end-of-line character -# in addition to the normal linefeed, loop over each line, -# weeding out the comments, and looking for the USE statements. -# One advantage to this is that the regex passed to the scanner -# would no longer need to match a semicolon. -# -# -- I question whether or not we need to detect dependencies to -# INTRINSIC modules because these are built-in to the compiler. -# If we consider them a dependency, will SCons look for them, not -# find them, and kill the build? Or will we there be standard -# compiler-specific directories we will need to point to so the -# compiler and SCons can locate the proper object and mod files? - -# Here is a breakdown of the regex: -# -# (?i) : regex is case insensitive -# ^ : start of line -# (?: : group a collection of regex symbols without saving the match as a "group" -# ^|; : matches either the start of the line or a semicolon - semicolon -# ) : end the unsaved grouping -# \s* : any amount of white space -# USE : match the string USE, case insensitive -# (?: : group a collection of regex symbols without saving the match as a "group" -# \s+| : match one or more whitespace OR .... (the next entire grouped set of regex symbols) -# (?: : group a collection of regex symbols without saving the match as a "group" -# (?: : establish another unsaved grouping of regex symbols -# \s* : any amount of white space -# , : match a comma -# \s* : any amount of white space -# (?:NON_)? : optionally match the prefix NON_, case insensitive -# INTRINSIC : match the string INTRINSIC, case insensitive -# )? : optionally match the ", INTRINSIC/NON_INTRINSIC" grouped expression -# \s* : any amount of white space -# :: : match a double colon that must appear after the INTRINSIC/NON_INTRINSIC attribute -# ) : end the unsaved grouping -# ) : end the unsaved grouping -# \s* : match any amount of white space -# (\w+) : match the module name that is being USE'd -# -# - use_regex = "(?i)(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)" - - -# The INCLUDE statement regex matches the following: -# -# INCLUDE 'some_Text' -# INCLUDE "some_Text" -# INCLUDE "some_Text" ; INCLUDE "some_Text" -# INCLUDE kind_"some_Text" -# INCLUDE kind_'some_Text" -# -# where some_Text can include any alphanumeric and/or special character -# as defined by the Fortran 2003 standard. -# -# Limitations: -# -# -- The Fortran standard dictates that a " or ' in the INCLUDE'd -# string must be represented as a "" or '', if the quotes that wrap -# the entire string are either a ' or ", respectively. While the -# regular expression below can detect the ' or " characters just fine, -# the scanning logic, presently is unable to detect them and reduce -# them to a single instance. This probably isn't an issue since, -# in practice, ' or " are not generally used in filenames. -# -# -- This regex will not properly deal with multiple INCLUDE statements -# when the entire line has been commented out, ala -# -# ! INCLUDE 'some_file' ; INCLUDE 'some_file' -# -# In such cases, it will properly ignore the first INCLUDE file, -# but will actually still pick up the second. Interestingly enough, -# the regex will properly deal with these cases: -# -# INCLUDE 'some_file' -# INCLUDE 'some_file' !; INCLUDE 'some_file' -# -# To get around the above limitation, the FORTRAN programmer could -# simply comment each INCLUDE statement separately, like this -# -# ! INCLUDE 'some_file' !; INCLUDE 'some_file' -# -# The way I see it, the only way to get around this limitation would -# be to modify the scanning logic to replace the calls to re.findall -# with a custom loop that processes each line separately, throwing -# away fully commented out lines before attempting to match against -# the INCLUDE syntax. -# -# Here is a breakdown of the regex: -# -# (?i) : regex is case insensitive -# (?: : begin a non-saving group that matches the following: -# ^ : either the start of the line -# | : or -# ['">]\s*; : a semicolon that follows a single quote, -# double quote or greater than symbol (with any -# amount of whitespace in between). This will -# allow the regex to match multiple INCLUDE -# statements per line (although it also requires -# the positive lookahead assertion that is -# used below). It will even properly deal with -# (i.e. ignore) cases in which the additional -# INCLUDES are part of an in-line comment, ala -# " INCLUDE 'someFile' ! ; INCLUDE 'someFile2' " -# ) : end of non-saving group -# \s* : any amount of white space -# INCLUDE : match the string INCLUDE, case insensitive -# \s+ : match one or more white space characters -# (?\w+_)? : match the optional "kind-param _" prefix allowed by the standard -# [<"'] : match the include delimiter - an apostrophe, double quote, or less than symbol -# (.+?) : match one or more characters that make up -# the included path and file name and save it -# in a group. The Fortran standard allows for -# any non-control character to be used. The dot -# operator will pick up any character, including -# control codes, but I can't conceive of anyone -# putting control codes in their file names. -# The question mark indicates it is non-greedy so -# that regex will match only up to the next quote, -# double quote, or greater than symbol -# (?=["'>]) : positive lookahead assertion to match the include -# delimiter - an apostrophe, double quote, or -# greater than symbol. This level of complexity -# is required so that the include delimiter is -# not consumed by the match, thus allowing the -# sub-regex discussed above to uniquely match a -# set of semicolon-separated INCLUDE statements -# (as allowed by the F2003 standard) - - include_regex = """(?i)(?:^|['">]\s*;)\s*INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])""" - -# The MODULE statement regex finds module definitions by matching -# the following: -# -# MODULE module_name -# -# but *not* the following: -# -# MODULE PROCEDURE procedure_name -# -# Here is a breakdown of the regex: -# -# (?i) : regex is case insensitive -# ^\s* : any amount of white space -# MODULE : match the string MODULE, case insensitive -# \s+ : match one or more white space characters -# (?!PROCEDURE) : but *don't* match if the next word matches -# PROCEDURE (negative lookahead assertion), -# case insensitive -# (\w+) : match one or more alphanumeric characters -# that make up the defined module name and -# save it in a group - - def_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)""" - - scanner = F90Scanner("FortranScan", - "$FORTRANSUFFIXES", - path_variable, - use_regex, - include_regex, - def_regex) - return scanner diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Fortran.pyc deleted file mode 100644 index 2ada4dac109d5665c2db01d9d16b91b52a41bc0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4826 zcmcgw+j85+8D5YQCDD}ZI6jU&ovoe3qz|O5CXKDCK2(Q^GBM==t+6B9K_Or%fdT;< zyA-7vaynD{vd_^+=zXvI0DX`?K>Pjwf;yzlrAi8`#qPiV`LrzlYqnha>YpzHk$;N# z{|t}*3x-gLEsT!Xazt1VVNt{dv4x497sXa_Jf9F-ljC{m#C+<+eEP(EhUXJPO^Qxg zbk2!3NKA@PLVOhB$E}J8OCp>SpFn$-2)C-!#MK)Nt>rY)^;X~~iOTA0X=XA%DVJaE zMp|~$upcWKb$hYus>En%c9jfOPbHyBf04ITh$3->K`~(miRoE%dxL@6v!O0)cx&%mQG2e z(|#5x*^XkR;+2 zQnFshY8ymx%t!`lw#OtH!P>XqG6D!JtAuG=9i~ZGgKE1yFp+8Km-t`qXBo^AAKr&y zV6QP=2+;3>SF`IIHd&MeaX%c35T-Io4X`D~j}pd2JfG$>l`8SKVSO^Wza7PqIg}7J zRDLW6Q7-54nOqt26sh~t4?`KJJ5X^J?d%%qw~fjeXYO2yPn`N0n1c#KMguZ&n)YP6 z4_M_x-zTx&msKJ#iX9!xj*NFp49_zyd)09{H>VIYF2NBKhJ-8=1C`T{}|H zF{>EVqhyDna&H)=HS!-6@=z5&1DrQ9z6=HJlPx0r{~g97L|oOU-~J89yzOsDS|oI-Jl( zcJ5Ge(>KKq&Vh{%OGxA(Eu}aIXPVU_Ml*>aqxb~_NE8P!w>Ct8B8HO!za>arh7PD? zpBH+**|l&gZdb7(c+jNfMlXx@;dc$w?KSA+gZ=sX*Y!sYlcuq5aQ3p}19H&#!NdAO zef}5oAoJ)EKhJ<%Q+^gsrBHDu3Wi?V{e)f2%;JUk^2RF>2@2&xL>2Ti9qlVdruWpL zm6BqtS|KP(n3*!k%*)h{I^bGB ztmUsHIGD@d$f$m{qgm3uflI1moAGcKhI6lj#A7`A5(ZJc=HOeXOqZQ2PMN+1cIVHq zN6xp5NB!r;waHM1IMm~Gpt55L4_HEdwi3EufQL5mfk)`? zF*K<+IqFPz6xvy2=a9PuO8txSOD(IJYNIqK0XDV|X{jb3JmA)jD>3&V0hx~;l9mlU zjR{PQ;JMynNv%g%8QIvBcY1!5{U5~s6G*Yx)hn2>t@HNCX8UHEDEA_5kq5Ssnf*BC zEWM+QM_nJa@-CU#{hYwap3o2)Gg~+M+uCp$?D{>Ik{Xx5O#=`D?I+QPzO5mIFpM(h z0VOWxY)$omsB-;4*U7uD{VajQSPlnxF+_jm$YA+C!)jbYC~BCR?c8h;#(I_6Cc#`% zxl5JZC9W7BT08Bb-y4(G?p@jjpr+D6}6t5NVEtZ^FXU@4iao)LHxZ=!Am7EHH zXPp~pATBzW3g?}xg)(NALsA-R+ViM2@I2Ov=UJuTl@#WAVH$WImp3MTEFI6zq?VFk zH9VTEQJO0iX0DoZnC4mQJ>Yq}bnDLhYW?0*(Ek0~TX&wkuj$)4 zf}d~>wP5pyRX*|Sm+r>$>dL0OT4O?1`SwQv>i6^ooEz5=TR>KAZE&$6svM3tFmrEW z;8rfrO}0OCe?`k=Io2lX2Bv2iGE^A;Ow_nHdscc=x>hQboMQf+ajI0qU9t^lNDpl8 zM;cc-cs_4^Nn2$M_J@)t(t^#2)VLn6)z?}qtz8+n#>eM4dlEtmFiwZ=WkS!MY=4Ph mHM+$1v1WL77U9M@V97@P6EYpEsdT-BtU*_g{9CyB<9`5JZHBu5 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.py deleted file mode 100644 index 9bd172873..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.py +++ /dev/null @@ -1,42 +0,0 @@ -"""SCons.Scanner.IDL - -This module implements the depenency scanner for IDL (Interface -Definition Language) files. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/IDL.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Node.FS -import SCons.Scanner - -def IDLScan(): - """Return a prototype Scanner instance for scanning IDL source files""" - cs = SCons.Scanner.ClassicCPP("IDLScan", - "$IDLSUFFIXES", - "CPPPATH", - '^[ \t]*(?:#[ \t]*include|[ \t]*import)[ \t]+(<|")([^>"]+)(>|")') - return cs diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/IDL.pyc deleted file mode 100644 index 5f199e2ab08b35d489dc43b5ef5fe6b1ca2054e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmcIiQES^U5SEiPTTS`{_B7Fz;jF|;ycV)hvXyjUVOYg``!I zRmiOR=+~TIBj54bo;{rgdp0#kGaV?Y!zoXsgd!YWT>Ad?z0h>2(p3gjEb|POAdRNx z9%u?VNRWI(b(ulus-T!fgOM~)%o7g&19^T#1{o7Z;+ujT32+6Zm3fpqC z%vE8U);|u;wujB&=B|Hud)y5Ac2mW4V@0}Fxyn1H#>eO&OSBdo!2;V2V+Vul04;Gw ze?*Vvg;*yBm|5mbsuWu5c6btYnNcd!%(b<&txWMGYjwgXZ2$A;Ol;*Ne6>XBN%#E4m04qo79RHwcd0vH$=8 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.py deleted file mode 100644 index 3e17e2548..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.py +++ /dev/null @@ -1,334 +0,0 @@ -"""SCons.Scanner.LaTeX - -This module implements the dependency scanner for LaTeX code. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/LaTeX.py 3842 2008/12/20 22:59:52 scons" - -import os.path -import string -import re - -import SCons.Scanner -import SCons.Util - -# list of graphics file extensions for TeX and LaTeX -TexGraphics = ['.eps', '.ps'] -LatexGraphics = ['.pdf', '.png', '.jpg', '.gif', '.tif'] - -# Used as a return value of modify_env_var if the variable is not set. -class _Null: - pass -_null = _Null - -# The user specifies the paths in env[variable], similar to other builders. -# They may be relative and must be converted to absolute, as expected -# by LaTeX and Co. The environment may already have some paths in -# env['ENV'][var]. These paths are honored, but the env[var] paths have -# higher precedence. All changes are un-done on exit. -def modify_env_var(env, var, abspath): - try: - save = env['ENV'][var] - except KeyError: - save = _null - env.PrependENVPath(var, abspath) - try: - if SCons.Util.is_List(env[var]): - #TODO(1.5) - #env.PrependENVPath(var, [os.path.abspath(str(p)) for p in env[var]]) - env.PrependENVPath(var, map(lambda p: os.path.abspath(str(p)), env[var])) - else: - # Split at os.pathsep to convert into absolute path - #TODO(1.5) env.PrependENVPath(var, [os.path.abspath(p) for p in str(env[var]).split(os.pathsep)]) - env.PrependENVPath(var, map(lambda p: os.path.abspath(p), string.split(str(env[var]), os.pathsep))) - except KeyError: - pass - - # Convert into a string explicitly to append ":" (without which it won't search system - # paths as well). The problem is that env.AppendENVPath(var, ":") - # does not work, refuses to append ":" (os.pathsep). - - if SCons.Util.is_List(env['ENV'][var]): - # TODO(1.5) - #env['ENV'][var] = os.pathsep.join(env['ENV'][var]) - env['ENV'][var] = string.join(env['ENV'][var], os.pathsep) - # Append the trailing os.pathsep character here to catch the case with no env[var] - env['ENV'][var] = env['ENV'][var] + os.pathsep - - return save - -class FindENVPathDirs: - """A class to bind a specific *PATH variable name to a function that - will return all of the *path directories.""" - def __init__(self, variable): - self.variable = variable - def __call__(self, env, dir=None, target=None, source=None, argument=None): - import SCons.PathList - try: - path = env['ENV'][self.variable] - except KeyError: - return () - - dir = dir or env.fs._cwd - path = SCons.PathList.PathList(path).subst_path(env, target, source) - return tuple(dir.Rfindalldirs(path)) - - - -def LaTeXScanner(): - """Return a prototype Scanner instance for scanning LaTeX source files - when built with latex. - """ - ds = LaTeX(name = "LaTeXScanner", - suffixes = '$LATEXSUFFIXES', - # in the search order, see below in LaTeX class docstring - graphics_extensions = TexGraphics, - recursive = 0) - return ds - -def PDFLaTeXScanner(): - """Return a prototype Scanner instance for scanning LaTeX source files - when built with pdflatex. - """ - ds = LaTeX(name = "PDFLaTeXScanner", - suffixes = '$LATEXSUFFIXES', - # in the search order, see below in LaTeX class docstring - graphics_extensions = LatexGraphics, - recursive = 0) - return ds - -class LaTeX(SCons.Scanner.Base): - """Class for scanning LaTeX files for included files. - - Unlike most scanners, which use regular expressions that just - return the included file name, this returns a tuple consisting - of the keyword for the inclusion ("include", "includegraphics", - "input", or "bibliography"), and then the file name itself. - Based on a quick look at LaTeX documentation, it seems that we - should append .tex suffix for the "include" keywords, append .tex if - there is no extension for the "input" keyword, and need to add .bib - for the "bibliography" keyword that does not accept extensions by itself. - - Finally, if there is no extension for an "includegraphics" keyword - latex will append .ps or .eps to find the file, while pdftex may use .pdf, - .jpg, .tif, .mps, or .png. - - The actual subset and search order may be altered by - DeclareGraphicsExtensions command. This complication is ignored. - The default order corresponds to experimentation with teTeX - $ latex --version - pdfeTeX 3.141592-1.21a-2.2 (Web2C 7.5.4) - kpathsea version 3.5.4 - The order is: - ['.eps', '.ps'] for latex - ['.png', '.pdf', '.jpg', '.tif']. - - Another difference is that the search path is determined by the type - of the file being searched: - env['TEXINPUTS'] for "input" and "include" keywords - env['TEXINPUTS'] for "includegraphics" keyword - env['BIBINPUTS'] for "bibliography" keyword - env['BSTINPUTS'] for "bibliographystyle" keyword - - FIXME: also look for the class or style in document[class|style]{} - FIXME: also look for the argument of bibliographystyle{} - """ - keyword_paths = {'include': 'TEXINPUTS', - 'input': 'TEXINPUTS', - 'includegraphics': 'TEXINPUTS', - 'bibliography': 'BIBINPUTS', - 'bibliographystyle': 'BSTINPUTS', - 'usepackage': 'TEXINPUTS'} - env_variables = SCons.Util.unique(keyword_paths.values()) - - def __init__(self, name, suffixes, graphics_extensions, *args, **kw): - - # We have to include \n with the % we exclude from the first part - # part of the regex because the expression is compiled with re.M. - # Without the \n, the ^ could match the beginning of a *previous* - # line followed by one or more newline characters (i.e. blank - # lines), interfering with a match on the next line. - regex = r'^[^%\n]*\\(include|includegraphics(?:\[[^\]]+\])?|input|bibliography|usepackage){([^}]*)}' - self.cre = re.compile(regex, re.M) - self.graphics_extensions = graphics_extensions - - def _scan(node, env, path=(), self=self): - node = node.rfile() - if not node.exists(): - return [] - return self.scan(node, path) - - class FindMultiPathDirs: - """The stock FindPathDirs function has the wrong granularity: - it is called once per target, while we need the path that depends - on what kind of included files is being searched. This wrapper - hides multiple instances of FindPathDirs, one per the LaTeX path - variable in the environment. When invoked, the function calculates - and returns all the required paths as a dictionary (converted into - a tuple to become hashable). Then the scan function converts it - back and uses a dictionary of tuples rather than a single tuple - of paths. - """ - def __init__(self, dictionary): - self.dictionary = {} - for k,n in dictionary.items(): - self.dictionary[k] = ( SCons.Scanner.FindPathDirs(n), - FindENVPathDirs(n) ) - - def __call__(self, env, dir=None, target=None, source=None, - argument=None): - di = {} - for k,(c,cENV) in self.dictionary.items(): - di[k] = ( c(env, dir=None, target=None, source=None, - argument=None) , - cENV(env, dir=None, target=None, source=None, - argument=None) ) - # To prevent "dict is not hashable error" - return tuple(di.items()) - - class LaTeXScanCheck: - """Skip all but LaTeX source files, i.e., do not scan *.eps, - *.pdf, *.jpg, etc. - """ - def __init__(self, suffixes): - self.suffixes = suffixes - def __call__(self, node, env): - current = not node.has_builder() or node.is_up_to_date() - scannable = node.get_suffix() in env.subst_list(self.suffixes)[0] - # Returning false means that the file is not scanned. - return scannable and current - - kw['function'] = _scan - kw['path_function'] = FindMultiPathDirs(LaTeX.keyword_paths) - kw['recursive'] = 1 - kw['skeys'] = suffixes - kw['scan_check'] = LaTeXScanCheck(suffixes) - kw['name'] = name - - apply(SCons.Scanner.Base.__init__, (self,) + args, kw) - - def _latex_names(self, include): - filename = include[1] - if include[0] == 'input': - base, ext = os.path.splitext( filename ) - if ext == "": - return [filename + '.tex'] - if (include[0] == 'include'): - return [filename + '.tex'] - if include[0] == 'bibliography': - base, ext = os.path.splitext( filename ) - if ext == "": - return [filename + '.bib'] - if include[0] == 'usepackage': - base, ext = os.path.splitext( filename ) - if ext == "": - return [filename + '.sty'] - if include[0] == 'includegraphics': - base, ext = os.path.splitext( filename ) - if ext == "": - #TODO(1.5) return [filename + e for e in self.graphics_extensions] - return map(lambda e, f=filename: f+e, self.graphics_extensions) - return [filename] - - def sort_key(self, include): - return SCons.Node.FS._my_normcase(str(include)) - - def find_include(self, include, source_dir, path): - try: - sub_path = path[include[0]] - except (IndexError, KeyError): - sub_path = () - try_names = self._latex_names(include) - for n in try_names: - # see if we find it using the path in env[var] - i = SCons.Node.FS.find_file(n, (source_dir,) + sub_path[0]) - if i: - return i, include - # see if we find it using the path in env['ENV'][var] - i = SCons.Node.FS.find_file(n, (source_dir,) + sub_path[1]) - if i: - return i, include - return i, include - - def scan(self, node, path=()): - # Modify the default scan function to allow for the regular - # expression to return a comma separated list of file names - # as can be the case with the bibliography keyword. - - # Cache the includes list in node so we only scan it once: - path_dict = dict(list(path)) - noopt_cre = re.compile('\[.*$') - if node.includes != None: - includes = node.includes - else: - includes = self.cre.findall(node.get_contents()) - # 1. Split comma-separated lines, e.g. - # ('bibliography', 'phys,comp') - # should become two entries - # ('bibliography', 'phys') - # ('bibliography', 'comp') - # 2. Remove the options, e.g., such as - # ('includegraphics[clip,width=0.7\\linewidth]', 'picture.eps') - # should become - # ('includegraphics', 'picture.eps') - split_includes = [] - for include in includes: - inc_type = noopt_cre.sub('', include[0]) - inc_list = string.split(include[1],',') - for j in range(len(inc_list)): - split_includes.append( (inc_type, inc_list[j]) ) - # - includes = split_includes - node.includes = includes - - # This is a hand-coded DSU (decorate-sort-undecorate, or - # Schwartzian transform) pattern. The sort key is the raw name - # of the file as specifed on the \include, \input, etc. line. - # TODO: what about the comment in the original Classic scanner: - # """which lets - # us keep the sort order constant regardless of whether the file - # is actually found in a Repository or locally.""" - nodes = [] - source_dir = node.get_dir() - for include in includes: - # - # Handle multiple filenames in include[1] - # - n, i = self.find_include(include, source_dir, path_dict) - if n is None: - # Do not bother with 'usepackage' warnings, as they most - # likely refer to system-level files - if include[0] != 'usepackage': - SCons.Warnings.warn(SCons.Warnings.DependencyWarning, - "No dependency generated for file: %s (included from: %s) -- file not found" % (i, node)) - else: - sortkey = self.sort_key(n) - nodes.append((sortkey, n)) - # - nodes.sort() - nodes = map(lambda pair: pair[1], nodes) - return nodes diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/LaTeX.pyc deleted file mode 100644 index e1309aff9ebacf36a1aa3c2ddb260ff977e9a409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12261 zcmcIqO>-32dOkfP1~ifYg8}Q>&h23PBCr^NY^{PB!9!^x{L+0V3 zs@yOS4_DnavZX3y@C^d!HomD|4s0vwL{0 z+{{wjTIqyo8t1Jq!h7+9X7k=gV*Twb8uVg6+3xq^?Kmy0Uu?vF6!+saiqp=nZ`~lj zo8`U+`kgF_Tg|5ZjI-yRg*aVL(s)5@ER<_3sB5dg>woa^hl~E=rAr?#TwYvQyyPz~ zUcK_k)hmmb7%(OOi=SmXfvH+?-`YA0_^*n7)GZ6?x+`q<%ffn6HWf*?AQ9WkgI;e) zRu45d@Yo}G#lWa%f|WUx&0Gzyg4OMI8g9q!cG1*_LqxmndZEgwWbdN1(9e@+VG%DB z+x>+U+rRkiQtQLk#|uT4_3VOn;@%f~StsmWyxdxBUHTD>1e|*wk0mG#ufsiazXa+g z9{V1^-#uYoh!%mZ}XtQqusQ8O=V#@o$J zQ8$|tX7dmy;RG)|lkf1ubu7S@HF8VU>;|S+4tA-tO92);Vv5OOU(Wz#n^RoM{dxD( z*M_kDBVi*{qaZ-0v=4$Y;c>=kPFGbA=i9HlmI}CoJkyS7dBbLSUH3b^&_ds5{u);CL*Mq}PSQ;} z{)I2E-}~GLs7bg6<3K&hZlT{Dq@5zkQW%M_X!`hhp7eTt9v6c=^+Oc1t_;WplEIIX zJnj@(p2W7*A@^3#O#(p{q0)jXmhG)rm|`Z@sQ_>~TY$&CZtyd-kCkK;m3BKxlcL?e zkFpfC@jB!_wh{T-0YE3hf%%>>dkwRDiW`Dvoka_@&g|Y{=I>bpU8O^tn+8fvp4+(2hdn3r{fiNM_$1y$@iNQ)6C%d(+C9Yu!~3ZmG~ zS$)bEg-Cb{XzZl%x=!P@JI^B_yXq!$Xa{SyXp@GLvtj`6pqR$cpbJ(3ok3YUM_dGN z@^y-{5(3mqNQ*FEj|(TS*&y%4S_72>IvD{;F9qcw#+MnBHf^_Ik9+O**Ia^n(|FSm zwo?$aL$wp$A9~AkBx^vX3&@^QBJFmRb=vLVEmjE0SsDifb{}AsetM{bS*${z%@VFg zt>I19Iw;Aq4R!2$sDK3^^T|<-D>BExkP}^7-AQ7h5Os8*%Ed4WOYR{1EaU9HX6c-wNji!)p{QGH^`x^KqqS6E*?vfG85CDXyyICX~j9mMJssJ zBjgI+$5JvgUoPDqrB-ke4L?Aophegg@Y<(DaEX&ppuZp^93Vrmi0ZKt;R7u26wfO} z5Ky87+T;)3V5h&tYt&dKaDyd5AMsz^=-&kXA+~Gap8_{kPMVJp2*z@$p_*f8ZK!Fv zlMfNwHDz=W;Z3Q42v4yc;<_@TLuiMsiXF1@*E{4-_Nq_EaIrZ6j zzbaN@es*4Spt?UO(2l`p*OIkflBvh;+4J*$2*(67(&2!1f(~-dNK#mM0xjRy3^zgx zzAyTYfLgw*0UtH5gR6tWHSJW!_JKuQ=W=vGF{1bJ&e+(1R1yXW;9%z{$Q- zSHn$J;Ggx&?E>AS-IK0>0iZb$YW*|=?n^y3Ite#hP2o0}#sHuGRfLs+0nJn4@*qm8 zfxrj$7iBTmDg3b0fy=wUp7qyuu~8w(u?rkY*uhk!r4~E1NKZ0gZJ4EPqxGUCd;oH%^g@Aq@*iO25Z})*wPSsD>ojuW#_dxlu zQw+i$D6(c_>=sMdILyK6;JP^1#B1o)D}eh5d)L6F7!Gb8R~qS7MGOlr-rmL}Eng`R zd?AkLh&@QSWIfF=jRS$JM{zeCz}&gTI#~{Z>St-B4MV=-JfTSe6c3fC%>VKWJV4@bZ;U7MVD>99~>(E&6l!f>MME>Jl01sNU@Ey5UC-4pu?dxOPwKMUW@5yI9kS$gBnrN zqjPW#?ks=#)xDJx-2mL_*m3u$l-xj;Q zcqrbb=-qj6_tsT#r_G#ZszlqxU*LF+f)a*6J5}{aO)pfx`pus92S4eDr>VSZ#$Kba zYjinSe$)`DF1B`7MGn4HusnfMU03+hxFLq*){QRVnk$49ufeE|HVXm;6tGDBu(K7e z#~r%UbeZ`7&+yoP#S8Wq@srDGAQECh*(C;th=G*4X~V}osR#GOHvD>tV1R_z))W}_^<%E&zPnjIqMesmnYKsiM1ed8+*w24#gw%bp z|2)s2z#uJ1Y$07z?Cxt`YJT_{P=<^^<)A=k!dUn&IIfH%JP_vqU^=N!XWEq>a}gJ3 z;txEW=QR6Uw6PHOl9x)qkSiV3r=@*+j>rhh4i!G9+DIa}4%G2PUiXG}K^33e;)>ywE1L{QLCYlJr@&6-RU`;l@=-B;ch3v=wDwNx1k! z^FH)Dky7HAJcegS+fEF@9i>MaCCWvG`K~_)zZ4d+K!+qPvIEdnt}F9gF>HP8gLoTE zY@H{9O5c)vHUgQO4!(eMl^tNdzXly9_#l+8fIzdxGzolWfJiEDV8+n5uyDYz+77^l z0osi7GpZGoCZn|Rkz`XxBHW@TG-l^hC5#cK*htEMR2r12ka}=Qpe0Vn znYZ*#$Eh5YnfYg|RqBOFZ`M2JGIZP!Q&mFVuTcQPtC$g1EC`+_&@4kNt@+J)cQfyhSQ4wiHg_`Ee74i26!dXQBY#gbU3?&!~pNJTMe@}K^H4qqDEWM zu9jW;i7P1m2Zi2dMiQ~0GEq1-8uZ&m){bCYq~VZ^Zo7DXB){EbR$RE@Ob%7oSyDQi z$4baMBGf75=8|$L&Bj8tC~c>GEXRbVv#UG&WTe1hwTofPPxZdV4tJfmOg{|7y1#I(=Fw6 zcXhtd$zzv<9A+KMWQ-0gtd@hf)7zE#3T|^kG9gn$(m*2`mDx{`Uo)y3LMbZ%ww`M$ zB+=rXfJz~_$rn+v5A+ytO+orQJeG%C=5WJ%1K2*+IQiDe>85uQCxtvKY}Vu@kS!=^ zgv@>l9694O%floH4^E+AzqV>7|6=5@SaA)#2AnBLu3+6_@m($!rkCwd>uII zl=?e@TA&T9o~fKK)RadVIW`%lT|8aiwcJ_P?>XJKvE=yn(pzC`4llPgNfIUz_!Y zL>Y<<588%&1G@ta02;yW$XO#*mfikm*pa(kMg%PNaC^l8w7uI#u5i0U?Lvh$VsnYF zv0{WgWpS^f4Gri4+RFA4P`1&#mumPY6nLFThL$#U7LtEIeOp&{pj+X!@>0>|@^BiB z2QC!>8+(V$PQmQR(rQn6n(B5DPpR=&E7KsH{LD+GX5a+pf1%Wi7FYq3xC=?I4uP5) z8S?qakf)!U`^??A3FIR?!!HqaxFynMS?=Jv+Kw)o=!iR@1Unl5pTh)O>_-7$e!9(E z$H?imSX<^vXPs>vVvh*LV9gzbb99k|;5gs3!5w~)N0PA;nHEtXm$Ci?2`$^8yCbv+ z$Gn-^JMg@ldLMQ7$tb}?2KXBc0;2<5ryWVrDq;l5_$k&0fg(h2b(3Es*6|6#r++PF zi9klA!2N@l42IaW?gFdSaYmOJIXG&_j=}bTaIikJWCkSNT(%5V6EI3hm7#Xh>|8dG zB6tsot1uz{mR8?3drd`6Nc15bL%`KEvtUp(dQbn>+nQ-b#x zLED=)JAdUM`n4c}ravyO!j&_`#&rdJGiDDf;GQM+d&J~ldnLR`9CH8PFvYZa!fc*2 zWdYYUu{(?rH=f20yr%&0z1@Vw#-^N!!b z9_R)gL7#%{A$KiXn)JtyS{L38)=*0D7%{szZQhxhKSAYkHhM*KJw|vAPuCs5k-4w> z?^(afIifnxwpn!^M-b&H8V-%R*&vNNzTa>uAK0 zQow9taDv^5f8_Gei*2xT%80s?F3rX9R1b6uT!!QbO83J&MViMYO`qdK3CgA6CEBt* z*hXIgPrWTGt8?Iy$b$e#PsyLwX2}_8mh}NRoZnq`;Qa~ReZwUs9dB4UCKVFeJZl+# z5K-cvO>K`^TpRQ;gLGIx{Az2238rMMMEwklogz^`M8PypKzSYWrfY8?I-l`Q<9F8k zId8m7Hek>&J0L?o90%o+e5TI_`h}#*Pb!9?I$*2lHb|4F1DDi(7WM|Q zRiuLKByZvAYMXUg2@0BsLD zldp{c@;Z8Jv(EWw=kc?I$BDSZOg_(Si(KPwe~PCm9@_JP``?alY42P$Z(9bJIX9`I z>&d|sOB6aK`2wCU1RwClh$?u(7vUcP4qxNC!*$Kw&HfdILl-9-vyB>00;c({PkX28 SCu@zvlRrOsVsdJ7>i+;MZTCn3 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.py deleted file mode 100644 index ad71ba449..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.py +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/Prog.py 3842 2008/12/20 22:59:52 scons" - -import string - -import SCons.Node -import SCons.Node.FS -import SCons.Scanner -import SCons.Util - -# global, set by --debug=findlibs -print_find_libs = None - -def ProgramScanner(**kw): - """Return a prototype Scanner instance for scanning executable - files for static-lib dependencies""" - kw['path_function'] = SCons.Scanner.FindPathDirs('LIBPATH') - ps = apply(SCons.Scanner.Base, [scan, "ProgramScanner"], kw) - return ps - -def scan(node, env, libpath = ()): - """ - This scanner scans program files for static-library - dependencies. It will search the LIBPATH environment variable - for libraries specified in the LIBS variable, returning any - files it finds as dependencies. - """ - try: - libs = env['LIBS'] - except KeyError: - # There are no LIBS in this environment, so just return a null list: - return [] - if SCons.Util.is_String(libs): - libs = string.split(libs) - else: - libs = SCons.Util.flatten(libs) - - try: - prefix = env['LIBPREFIXES'] - if not SCons.Util.is_List(prefix): - prefix = [ prefix ] - except KeyError: - prefix = [ '' ] - - try: - suffix = env['LIBSUFFIXES'] - if not SCons.Util.is_List(suffix): - suffix = [ suffix ] - except KeyError: - suffix = [ '' ] - - pairs = [] - for suf in map(env.subst, suffix): - for pref in map(env.subst, prefix): - pairs.append((pref, suf)) - - result = [] - - if callable(libpath): - libpath = libpath() - - find_file = SCons.Node.FS.find_file - adjustixes = SCons.Util.adjustixes - for lib in libs: - if SCons.Util.is_String(lib): - lib = env.subst(lib) - for pref, suf in pairs: - l = adjustixes(lib, pref, suf) - l = find_file(l, libpath, verbose=print_find_libs) - if l: - result.append(l) - else: - result.append(lib) - - return result diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/Prog.pyc deleted file mode 100644 index 87a7199b9315813390878c5044f5130797bf198d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2256 zcmcIl-ESL35TCuXoyN8ERq;_!%LySAiN;P%i$YcL(WZgWQdM@VR8=GEa<@*_z1&@P z*QqVpytHpT@)z*le}!lM0iJl}6$yT`XEz4*5p3Pw+|2CEZ)SF8{Xgo}%E!NcAJO#Z z;r$gJ6Jm*po?sOedz1)z0-~Tjdg9OM(i~l$qbrVv<~fRedI?jD6qhM3(My=BvdzwV zgX?CJ8O{H!=(Ai-l9|fOoU26rc&CRXm)mF2$8MInAu77^x zdMhvy)YV`3-FH!N1SLFo+3FS+OVk(C_ZaXCL1RSZ(M{{m1SPV7<Hxt9!e*9(?`qTU!U6hxVx38>Ep{S!$QS;XLT@cEPA$yyWMny_TcMGTV6^L;Ez8TZ=kAr8b$pOp%so)eT&vU2 z%BDTen`suyjnmD>wZ>M{W?5pIF8js0kz`SrY+P-$8k=t}Vw)X(gvW5*$$wj17LgB% z1LPFk#$#5YHCo~lpkNm#KJBGzR6-S>RY`wHLWo0z{n)yi_I(=rTvq)JA*z0P`iX7W zHPxw{F-KRNVGo8;_rk;ijZ198ykz1~5JV}#?R&4?{>*Oqj1)pakEe!8FjSs1RCb1b zp>f&imj7+&_c=ol!VrR)RA~4e*>eo7zsP%Ec(lF$8BG>wxG^UHOcq?E33MyeuhJOA z0`)w0D^4zny_1sIW0Q+y&(qlP^;5wFm>$F7sB6@(Q-6sj)fx6>nw+QMPn@ak{U2#k zn+cHMnoIDXVhYcFLSYy(i0%Dddg?JEpdG_!Z3>DzsZL{H#ER}inpS{cFtbkjl^8F& z2(W3%Z{kKDfbrfUSj zt__~6BngZRb#xTiBNeQyZLyTAejB8Xf%$lW5$)29EO+JTj@FrObAvg9kE}}UBEFRAcB}>{>*jAk@-Q)ZqO2Pxy(F|2 zv9oEY-&4k7ViFyPxtk|uZ~zW($7I1Ab1u>T3FpaqyN_AnM#@gdIpuJ>9K5aauDCxi zRt+)xmhp)plUhijg4~*Q9th3~PaNkM^>APy=Hcjstm-i2TK3eih-T1ZlB3B(o_>tl z40>(@>p3kg%^Y~vQS+8X4H|1=SzN&SmZ*q#yj8CN%}2xC0Nt*Zr^?{^=yux|n9FH* zw?%_XQydGvYtDELliQeXz&T{6c|NQQ72kho?77r5n U#k+85Ro9jZzVba5C8xG diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/RC.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/RC.py deleted file mode 100644 index ecbc57256..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/RC.py +++ /dev/null @@ -1,49 +0,0 @@ -"""SCons.Scanner.RC - -This module implements the depenency scanner for RC (Interface -Definition Language) files. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/RC.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Node.FS -import SCons.Scanner -import re - -def RCScan(): - """Return a prototype Scanner instance for scanning RC source files""" - - res_re= r'^(?:\s*#\s*(?:include)|' \ - '.*?\s+(?:ICON|BITMAP|CURSOR|HTML|FONT|MESSAGETABLE|TYPELIB|REGISTRY|D3DFX)' \ - '\s*.*?)' \ - '\s*(<|"| )([^>"\s]+)(?:[>" ])*$' - resScanner = SCons.Scanner.ClassicCPP( "ResourceScanner", - "$RCSUFFIXES", - "CPPPATH", - res_re ) - - return resScanner diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.py deleted file mode 100644 index e18f0fe30..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.py +++ /dev/null @@ -1,406 +0,0 @@ -"""SCons.Scanner - -The Scanner package for the SCons software construction utility. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Scanner/__init__.py 3842 2008/12/20 22:59:52 scons" - -import re -import string - -import SCons.Node.FS -import SCons.Util - - -class _Null: - pass - -# This is used instead of None as a default argument value so None can be -# used as an actual argument value. -_null = _Null - -def Scanner(function, *args, **kw): - """ - Public interface factory function for creating different types - of Scanners based on the different types of "functions" that may - be supplied. - - TODO: Deprecate this some day. We've moved the functionality - inside the Base class and really don't need this factory function - any more. It was, however, used by some of our Tool modules, so - the call probably ended up in various people's custom modules - patterned on SCons code. - """ - if SCons.Util.is_Dict(function): - return apply(Selector, (function,) + args, kw) - else: - return apply(Base, (function,) + args, kw) - - - -class FindPathDirs: - """A class to bind a specific *PATH variable name to a function that - will return all of the *path directories.""" - def __init__(self, variable): - self.variable = variable - def __call__(self, env, dir=None, target=None, source=None, argument=None): - import SCons.PathList - try: - path = env[self.variable] - except KeyError: - return () - - dir = dir or env.fs._cwd - path = SCons.PathList.PathList(path).subst_path(env, target, source) - return tuple(dir.Rfindalldirs(path)) - - - -class Base: - """ - The base class for dependency scanners. This implements - straightforward, single-pass scanning of a single file. - """ - - def __init__(self, - function, - name = "NONE", - argument = _null, - skeys = _null, - path_function = None, - node_class = SCons.Node.FS.Entry, - node_factory = None, - scan_check = None, - recursive = None): - """ - Construct a new scanner object given a scanner function. - - 'function' - a scanner function taking two or three - arguments and returning a list of strings. - - 'name' - a name for identifying this scanner object. - - 'argument' - an optional argument that, if specified, will be - passed to both the scanner function and the path_function. - - 'skeys' - an optional list argument that can be used to determine - which scanner should be used for a given Node. In the case of File - nodes, for example, the 'skeys' would be file suffixes. - - 'path_function' - a function that takes four or five arguments - (a construction environment, Node for the directory containing - the SConscript file that defined the primary target, list of - target nodes, list of source nodes, and optional argument for - this instance) and returns a tuple of the directories that can - be searched for implicit dependency files. May also return a - callable() which is called with no args and returns the tuple - (supporting Bindable class). - - 'node_class' - the class of Nodes which this scan will return. - If node_class is None, then this scanner will not enforce any - Node conversion and will return the raw results from the - underlying scanner function. - - 'node_factory' - the factory function to be called to translate - the raw results returned by the scanner function into the - expected node_class objects. - - 'scan_check' - a function to be called to first check whether - this node really needs to be scanned. - - 'recursive' - specifies that this scanner should be invoked - recursively on all of the implicit dependencies it returns - (the canonical example being #include lines in C source files). - May be a callable, which will be called to filter the list - of nodes found to select a subset for recursive scanning - (the canonical example being only recursively scanning - subdirectories within a directory). - - The scanner function's first argument will be a Node that should - be scanned for dependencies, the second argument will be an - Environment object, the third argument will be the tuple of paths - returned by the path_function, and the fourth argument will be - the value passed into 'argument', and the returned list should - contain the Nodes for all the direct dependencies of the file. - - Examples: - - s = Scanner(my_scanner_function) - - s = Scanner(function = my_scanner_function) - - s = Scanner(function = my_scanner_function, argument = 'foo') - - """ - - # Note: this class could easily work with scanner functions that take - # something other than a filename as an argument (e.g. a database - # node) and a dependencies list that aren't file names. All that - # would need to be changed is the documentation. - - self.function = function - self.path_function = path_function - self.name = name - self.argument = argument - - if skeys is _null: - if SCons.Util.is_Dict(function): - skeys = function.keys() - else: - skeys = [] - self.skeys = skeys - - self.node_class = node_class - self.node_factory = node_factory - self.scan_check = scan_check - if callable(recursive): - self.recurse_nodes = recursive - elif recursive: - self.recurse_nodes = self._recurse_all_nodes - else: - self.recurse_nodes = self._recurse_no_nodes - - def path(self, env, dir=None, target=None, source=None): - if not self.path_function: - return () - if not self.argument is _null: - return self.path_function(env, dir, target, source, self.argument) - else: - return self.path_function(env, dir, target, source) - - def __call__(self, node, env, path = ()): - """ - This method scans a single object. 'node' is the node - that will be passed to the scanner function, and 'env' is the - environment that will be passed to the scanner function. A list of - direct dependency nodes for the specified node will be returned. - """ - if self.scan_check and not self.scan_check(node, env): - return [] - - self = self.select(node) - - if not self.argument is _null: - list = self.function(node, env, path, self.argument) - else: - list = self.function(node, env, path) - - kw = {} - if hasattr(node, 'dir'): - kw['directory'] = node.dir - node_factory = env.get_factory(self.node_factory) - nodes = [] - for l in list: - if self.node_class and not isinstance(l, self.node_class): - l = apply(node_factory, (l,), kw) - nodes.append(l) - return nodes - - def __cmp__(self, other): - try: - return cmp(self.__dict__, other.__dict__) - except AttributeError: - # other probably doesn't have a __dict__ - return cmp(self.__dict__, other) - - def __hash__(self): - return id(self) - - def __str__(self): - return self.name - - def add_skey(self, skey): - """Add a skey to the list of skeys""" - self.skeys.append(skey) - - def get_skeys(self, env=None): - if env and SCons.Util.is_String(self.skeys): - return env.subst_list(self.skeys)[0] - return self.skeys - - def select(self, node): - if SCons.Util.is_Dict(self.function): - key = node.scanner_key() - try: - return self.function[key] - except KeyError: - return None - else: - return self - - def _recurse_all_nodes(self, nodes): - return nodes - - def _recurse_no_nodes(self, nodes): - return [] - - recurse_nodes = _recurse_no_nodes - - def add_scanner(self, skey, scanner): - self.function[skey] = scanner - self.add_skey(skey) - - -class Selector(Base): - """ - A class for selecting a more specific scanner based on the - scanner_key() (suffix) for a specific Node. - - TODO: This functionality has been moved into the inner workings of - the Base class, and this class will be deprecated at some point. - (It was never exposed directly as part of the public interface, - although it is used by the Scanner() factory function that was - used by various Tool modules and therefore was likely a template - for custom modules that may be out there.) - """ - def __init__(self, dict, *args, **kw): - apply(Base.__init__, (self, None,)+args, kw) - self.dict = dict - self.skeys = dict.keys() - - def __call__(self, node, env, path = ()): - return self.select(node)(node, env, path) - - def select(self, node): - try: - return self.dict[node.scanner_key()] - except KeyError: - return None - - def add_scanner(self, skey, scanner): - self.dict[skey] = scanner - self.add_skey(skey) - - -class Current(Base): - """ - A class for scanning files that are source files (have no builder) - or are derived files and are current (which implies that they exist, - either locally or in a repository). - """ - - def __init__(self, *args, **kw): - def current_check(node, env): - return not node.has_builder() or node.is_up_to_date() - kw['scan_check'] = current_check - apply(Base.__init__, (self,) + args, kw) - -class Classic(Current): - """ - A Scanner subclass to contain the common logic for classic CPP-style - include scanning, but which can be customized to use different - regular expressions to find the includes. - - Note that in order for this to work "out of the box" (without - overriding the find_include() and sort_key() methods), the regular - expression passed to the constructor must return the name of the - include file in group 0. - """ - - def __init__(self, name, suffixes, path_variable, regex, *args, **kw): - - self.cre = re.compile(regex, re.M) - - def _scan(node, env, path=(), self=self): - node = node.rfile() - if not node.exists(): - return [] - return self.scan(node, path) - - kw['function'] = _scan - kw['path_function'] = FindPathDirs(path_variable) - kw['recursive'] = 1 - kw['skeys'] = suffixes - kw['name'] = name - - apply(Current.__init__, (self,) + args, kw) - - def find_include(self, include, source_dir, path): - n = SCons.Node.FS.find_file(include, (source_dir,) + tuple(path)) - return n, include - - def sort_key(self, include): - return SCons.Node.FS._my_normcase(include) - - def find_include_names(self, node): - return self.cre.findall(node.get_contents()) - - def scan(self, node, path=()): - - # cache the includes list in node so we only scan it once: - if node.includes != None: - includes = node.includes - else: - includes = self.find_include_names (node) - node.includes = includes - - # This is a hand-coded DSU (decorate-sort-undecorate, or - # Schwartzian transform) pattern. The sort key is the raw name - # of the file as specifed on the #include line (including the - # " or <, since that may affect what file is found), which lets - # us keep the sort order constant regardless of whether the file - # is actually found in a Repository or locally. - nodes = [] - source_dir = node.get_dir() - if callable(path): - path = path() - for include in includes: - n, i = self.find_include(include, source_dir, path) - - if n is None: - SCons.Warnings.warn(SCons.Warnings.DependencyWarning, - "No dependency generated for file: %s (included from: %s) -- file not found" % (i, node)) - else: - sortkey = self.sort_key(include) - nodes.append((sortkey, n)) - - nodes.sort() - nodes = map(lambda pair: pair[1], nodes) - return nodes - -class ClassicCPP(Classic): - """ - A Classic Scanner subclass which takes into account the type of - bracketing used to include the file, and uses classic CPP rules - for searching for the files based on the bracketing. - - Note that in order for this to work, the regular expression passed - to the constructor must return the leading bracket in group 0, and - the contained filename in group 1. - """ - def find_include(self, include, source_dir, path): - if include[0] == '"': - paths = (source_dir,) + tuple(path) - else: - paths = tuple(path) + (source_dir,) - - n = SCons.Node.FS.find_file(include[1], paths) - - return n, include[1] - - def sort_key(self, include): - return SCons.Node.FS._my_normcase(string.join(include)) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Scanner/__init__.pyc deleted file mode 100644 index 2d5ba2e8d11f655228c2789862ee1fa21e703612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16655 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.py deleted file mode 100644 index 13cc41409..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.py +++ /dev/null @@ -1,376 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Script/Interactive.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """ -SCons interactive mode -""" - -# TODO: -# -# This has the potential to grow into something with a really big life -# of its own, which might or might not be a good thing. Nevertheless, -# here are some enhancements that will probably be requested some day -# and are worth keeping in mind (assuming this takes off): -# -# - A command to re-read / re-load the SConscript files. This may -# involve allowing people to specify command-line options (e.g. -f, -# -I, --no-site-dir) that affect how the SConscript files are read. -# -# - Additional command-line options on the "build" command. -# -# Of the supported options that seemed to make sense (after a quick -# pass through the list), the ones that seemed likely enough to be -# used are listed in the man page and have explicit test scripts. -# -# These had code changed in Script/Main.py to support them, but didn't -# seem likely to be used regularly, so had no test scripts added: -# -# build --diskcheck=* -# build --implicit-cache=* -# build --implicit-deps-changed=* -# build --implicit-deps-unchanged=* -# -# These look like they should "just work" with no changes to the -# existing code, but like those above, look unlikely to be used and -# therefore had no test scripts added: -# -# build --random -# -# These I'm not sure about. They might be useful for individual -# "build" commands, and may even work, but they seem unlikely enough -# that we'll wait until they're requested before spending any time on -# writing test scripts for them, or investigating whether they work. -# -# build -q [??? is there a useful analog to the exit status?] -# build --duplicate= -# build --profile= -# build --max-drift= -# build --warn=* -# build --Y -# -# - Most of the SCons command-line options that the "build" command -# supports should be settable as default options that apply to all -# subsequent "build" commands. Maybe a "set {option}" command that -# maps to "SetOption('{option}')". -# -# - Need something in the 'help' command that prints the -h output. -# -# - A command to run the configure subsystem separately (must see how -# this interacts with the new automake model). -# -# - Command-line completion of target names; maybe even of SCons options? -# Completion is something that's supported by the Python cmd module, -# so this should be doable without too much trouble. -# - -import cmd -import copy -import os -import re -import shlex -import string -import sys - -try: - import readline -except ImportError: - pass - -class SConsInteractiveCmd(cmd.Cmd): - """\ - build [TARGETS] Build the specified TARGETS and their dependencies. - 'b' is a synonym. - clean [TARGETS] Clean (remove) the specified TARGETS and their - dependencies. 'c' is a synonym. - exit Exit SCons interactive mode. - help [COMMAND] Prints help for the specified COMMAND. 'h' and - '?' are synonyms. - shell [COMMANDLINE] Execute COMMANDLINE in a subshell. 'sh' and '!' - are synonyms. - version Prints SCons version information. - """ - - synonyms = { - 'b' : 'build', - 'c' : 'clean', - 'h' : 'help', - 'scons' : 'build', - 'sh' : 'shell', - } - - def __init__(self, **kw): - cmd.Cmd.__init__(self) - for key, val in kw.items(): - setattr(self, key, val) - - if sys.platform == 'win32': - self.shell_variable = 'COMSPEC' - else: - self.shell_variable = 'SHELL' - - def default(self, argv): - print "*** Unknown command: %s" % argv[0] - - def onecmd(self, line): - line = string.strip(line) - if not line: - print self.lastcmd - return self.emptyline() - self.lastcmd = line - if line[0] == '!': - line = 'shell ' + line[1:] - elif line[0] == '?': - line = 'help ' + line[1:] - if os.sep == '\\': - line = string.replace(line, '\\', '\\\\') - argv = shlex.split(line) - argv[0] = self.synonyms.get(argv[0], argv[0]) - if not argv[0]: - return self.default(line) - else: - try: - func = getattr(self, 'do_' + argv[0]) - except AttributeError: - return self.default(argv) - return func(argv) - - def do_build(self, argv): - """\ - build [TARGETS] Build the specified TARGETS and their - dependencies. 'b' is a synonym. - """ - import SCons.Node - import SCons.SConsign - import SCons.Script.Main - - options = copy.deepcopy(self.options) - - options, targets = self.parser.parse_args(argv[1:], values=options) - - SCons.Script.COMMAND_LINE_TARGETS = targets - - if targets: - SCons.Script.BUILD_TARGETS = targets - else: - # If the user didn't specify any targets on the command line, - # use the list of default targets. - SCons.Script.BUILD_TARGETS = SCons.Script._build_plus_default - - nodes = SCons.Script.Main._build_targets(self.fs, - options, - targets, - self.target_top) - - if not nodes: - return - - # Call each of the Node's alter_targets() methods, which may - # provide additional targets that ended up as part of the build - # (the canonical example being a VariantDir() when we're building - # from a source directory) and which we therefore need their - # state cleared, too. - x = [] - for n in nodes: - x.extend(n.alter_targets()[0]) - nodes.extend(x) - - # Clean up so that we can perform the next build correctly. - # - # We do this by walking over all the children of the targets, - # and clearing their state. - # - # We currently have to re-scan each node to find their - # children, because built nodes have already been partially - # cleared and don't remember their children. (In scons - # 0.96.1 and earlier, this wasn't the case, and we didn't - # have to re-scan the nodes.) - # - # Because we have to re-scan each node, we can't clear the - # nodes as we walk over them, because we may end up rescanning - # a cleared node as we scan a later node. Therefore, only - # store the list of nodes that need to be cleared as we walk - # the tree, and clear them in a separate pass. - # - # XXX: Someone more familiar with the inner workings of scons - # may be able to point out a more efficient way to do this. - - SCons.Script.Main.progress_display("scons: Clearing cached node information ...") - - seen_nodes = {} - - def get_unseen_children(node, parent, seen_nodes=seen_nodes): - def is_unseen(node, seen_nodes=seen_nodes): - return not seen_nodes.has_key(node) - return filter(is_unseen, node.children(scan=1)) - - def add_to_seen_nodes(node, parent, seen_nodes=seen_nodes): - seen_nodes[node] = 1 - - # If this file is in a VariantDir and has a - # corresponding source file in the source tree, remember the - # node in the source tree, too. This is needed in - # particular to clear cached implicit dependencies on the - # source file, since the scanner will scan it if the - # VariantDir was created with duplicate=0. - try: - rfile_method = node.rfile - except AttributeError: - return - else: - rfile = rfile_method() - if rfile != node: - seen_nodes[rfile] = 1 - - for node in nodes: - walker = SCons.Node.Walker(node, - kids_func=get_unseen_children, - eval_func=add_to_seen_nodes) - n = walker.next() - while n: - n = walker.next() - - for node in seen_nodes.keys(): - # Call node.clear() to clear most of the state - node.clear() - # node.clear() doesn't reset node.state, so call - # node.set_state() to reset it manually - node.set_state(SCons.Node.no_state) - node.implicit = None - - # Debug: Uncomment to verify that all Taskmaster reference - # counts have been reset to zero. - #if node.ref_count != 0: - # from SCons.Debug import Trace - # Trace('node %s, ref_count %s !!!\n' % (node, node.ref_count)) - - SCons.SConsign.Reset() - SCons.Script.Main.progress_display("scons: done clearing node information.") - - def do_clean(self, argv): - """\ - clean [TARGETS] Clean (remove) the specified TARGETS - and their dependencies. 'c' is a synonym. - """ - return self.do_build(['build', '--clean'] + argv[1:]) - - def do_EOF(self, argv): - print - self.do_exit(argv) - - def _do_one_help(self, arg): - try: - # If help_() exists, then call it. - func = getattr(self, 'help_' + arg) - except AttributeError: - try: - func = getattr(self, 'do_' + arg) - except AttributeError: - doc = None - else: - doc = self._doc_to_help(func) - if doc: - sys.stdout.write(doc + '\n') - sys.stdout.flush() - else: - doc = self.strip_initial_spaces(func()) - if doc: - sys.stdout.write(doc + '\n') - sys.stdout.flush() - - def _doc_to_help(self, obj): - doc = obj.__doc__ - if doc is None: - return '' - return self._strip_initial_spaces(doc) - - def _strip_initial_spaces(self, s): - #lines = s.split('\n') - lines = string.split(s, '\n') - spaces = re.match(' *', lines[0]).group(0) - #def strip_spaces(l): - # if l.startswith(spaces): - # l = l[len(spaces):] - # return l - #return '\n'.join([ strip_spaces(l) for l in lines ]) - def strip_spaces(l, spaces=spaces): - if l[:len(spaces)] == spaces: - l = l[len(spaces):] - return l - lines = map(strip_spaces, lines) - return string.join(lines, '\n') - - def do_exit(self, argv): - """\ - exit Exit SCons interactive mode. - """ - sys.exit(0) - - def do_help(self, argv): - """\ - help [COMMAND] Prints help for the specified COMMAND. 'h' - and '?' are synonyms. - """ - if argv[1:]: - for arg in argv[1:]: - if self._do_one_help(arg): - break - else: - # If bare 'help' is called, print this class's doc - # string (if it has one). - doc = self._doc_to_help(self.__class__) - if doc: - sys.stdout.write(doc + '\n') - sys.stdout.flush() - - def do_shell(self, argv): - """\ - shell [COMMANDLINE] Execute COMMANDLINE in a subshell. 'sh' and - '!' are synonyms. - """ - import subprocess - argv = argv[1:] - if not argv: - argv = os.environ[self.shell_variable] - try: - p = subprocess.Popen(argv) - except EnvironmentError, e: - sys.stderr.write('scons: %s: %s\n' % (argv[0], e.strerror)) - else: - p.wait() - - def do_version(self, argv): - """\ - version Prints SCons version information. - """ - sys.stdout.write(self.parser.version + '\n') - -def interact(fs, parser, options, targets, target_top): - c = SConsInteractiveCmd(prompt = 'scons>>> ', - fs = fs, - parser = parser, - options = options, - targets = targets, - target_top = target_top) - c.cmdloop() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Interactive.pyc deleted file mode 100644 index f4e5482c1766152e1e584f59279a7f191986af34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9461 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 1: - msg = None - if jobs.num_jobs == 1: - msg = "parallel builds are unsupported by this version of Python;\n" + \ - "\tignoring -j or num_jobs option.\n" - elif sys.platform == 'win32': - msg = fetch_win32_parallel_msg() - if msg: - SCons.Warnings.warn(SCons.Warnings.NoParallelSupportWarning, msg) - - memory_stats.append('before building targets:') - count_stats.append(('pre-', 'build')) - - def jobs_postfunc( - jobs=jobs, - options=options, - closing_message=closing_message, - failure_message=failure_message - ): - if jobs.were_interrupted(): - progress_display("scons: Build interrupted.") - global exit_status - global this_build_status - exit_status = 2 - this_build_status = 2 - - if this_build_status: - progress_display("scons: " + failure_message) - else: - progress_display("scons: " + closing_message) - if not options.no_exec: - if jobs.were_interrupted(): - progress_display("scons: writing .sconsign file.") - SCons.SConsign.write() - - progress_display("scons: " + opening_message) - jobs.run(postfunc = jobs_postfunc) - - memory_stats.append('after building targets:') - count_stats.append(('post-', 'build')) - - return nodes - -def _exec_main(parser, values): - sconsflags = os.environ.get('SCONSFLAGS', '') - all_args = string.split(sconsflags) + sys.argv[1:] - - options, args = parser.parse_args(all_args, values) - - if type(options.debug) == type([]) and "pdb" in options.debug: - import pdb - pdb.Pdb().runcall(_main, parser) - elif options.profile_file: - try: - from cProfile import Profile - except ImportError, e: - from profile import Profile - - # Some versions of Python 2.4 shipped a profiler that had the - # wrong 'c_exception' entry in its dispatch table. Make sure - # we have the right one. (This may put an unnecessary entry - # in the table in earlier versions of Python, but its presence - # shouldn't hurt anything). - try: - dispatch = Profile.dispatch - except AttributeError: - pass - else: - dispatch['c_exception'] = Profile.trace_dispatch_return - - prof = Profile() - try: - prof.runcall(_main, parser) - except SConsPrintHelpException, e: - prof.dump_stats(options.profile_file) - raise e - except SystemExit: - pass - prof.dump_stats(options.profile_file) - else: - _main(parser) - -def main(): - global OptionsParser - global exit_status - global first_command_start - - # Check up front for a Python version we do not support. We - # delay the check for deprecated Python versions until later, - # after the SConscript files have been read, in case they - # disable that warning. - if python_version_unsupported(): - msg = "scons: *** SCons version %s does not run under Python version %s.\n" - sys.stderr.write(msg % (SCons.__version__, python_version_string())) - sys.exit(1) - - parts = ["SCons by Steven Knight et al.:\n"] - try: - import __main__ - parts.append(version_string("script", __main__)) - except (ImportError, AttributeError): - # On Windows there is no scons.py, so there is no - # __main__.__version__, hence there is no script version. - pass - parts.append(version_string("engine", SCons)) - parts.append("Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation") - version = string.join(parts, '') - - import SConsOptions - parser = SConsOptions.Parser(version) - values = SConsOptions.SConsValues(parser.get_default_values()) - - OptionsParser = parser - - try: - _exec_main(parser, values) - except SystemExit, s: - if s: - exit_status = s - except KeyboardInterrupt: - print("scons: Build interrupted.") - sys.exit(2) - except SyntaxError, e: - _scons_syntax_error(e) - except SCons.Errors.InternalError: - _scons_internal_error() - except SCons.Errors.UserError, e: - _scons_user_error(e) - except SConsPrintHelpException: - parser.print_help() - exit_status = 0 - except SCons.Errors.BuildError, e: - exit_status = e.exitstatus - except: - # An exception here is likely a builtin Python exception Python - # code in an SConscript file. Show them precisely what the - # problem was and where it happened. - SCons.Script._SConscript.SConscript_exception() - sys.exit(2) - - memory_stats.print_stats() - count_stats.print_stats() - - if print_objects: - SCons.Debug.listLoggedInstances('*') - #SCons.Debug.dumpLoggedInstances('*') - - if print_memoizer: - SCons.Memoize.Dump("Memoizer (memory cache) hits and misses:") - - # Dump any development debug info that may have been enabled. - # These are purely for internal debugging during development, so - # there's no need to control them with --debug= options; they're - # controlled by changing the source code. - SCons.Debug.dump_caller_counts() - SCons.Taskmaster.dump_stats() - - if print_time: - total_time = time.time() - SCons.Script.start_time - if num_jobs == 1: - ct = cumulative_command_time - else: - if last_command_end is None or first_command_start is None: - ct = 0.0 - else: - ct = last_command_end - first_command_start - scons_time = total_time - sconscript_time - ct - print "Total build time: %f seconds"%total_time - print "Total SConscript file execution time: %f seconds"%sconscript_time - print "Total SCons execution time: %f seconds"%scons_time - print "Total command execution time: %f seconds"%ct - - sys.exit(exit_status) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Main.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/Main.pyc deleted file mode 100644 index 7a7d028df53d96a0928a35ccb3b25761012ea4ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42001 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 D-6pU{ diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.py deleted file mode 100644 index 636fd2024..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.py +++ /dev/null @@ -1,940 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Script/SConsOptions.py 3842 2008/12/20 22:59:52 scons" - -import optparse -import re -import string -import sys -import textwrap - -try: - no_hyphen_re = re.compile(r'(\s+|(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') -except re.error: - # Pre-2.0 Python versions don't have the (?<= negative - # look-behind assertion. - no_hyphen_re = re.compile(r'(\s+|-*\w{2,}-(?=\w{2,}))') - -try: - from gettext import gettext -except ImportError: - def gettext(message): - return message -_ = gettext - -import SCons.Node.FS -import SCons.Warnings - -OptionValueError = optparse.OptionValueError -SUPPRESS_HELP = optparse.SUPPRESS_HELP - -diskcheck_all = SCons.Node.FS.diskcheck_types() - -def diskcheck_convert(value): - if value is None: - return [] - if not SCons.Util.is_List(value): - value = string.split(value, ',') - result = [] - for v in map(string.lower, value): - if v == 'all': - result = diskcheck_all - elif v == 'none': - result = [] - elif v in diskcheck_all: - result.append(v) - else: - raise ValueError, v - return result - -class SConsValues(optparse.Values): - """ - Holder class for uniform access to SCons options, regardless - of whether or not they can be set on the command line or in the - SConscript files (using the SetOption() function). - - A SCons option value can originate three different ways: - - 1) set on the command line; - 2) set in an SConscript file; - 3) the default setting (from the the op.add_option() - calls in the Parser() function, below). - - The command line always overrides a value set in a SConscript file, - which in turn always overrides default settings. Because we want - to support user-specified options in the SConscript file itself, - though, we may not know about all of the options when the command - line is first parsed, so we can't make all the necessary precedence - decisions at the time the option is configured. - - The solution implemented in this class is to keep these different sets - of settings separate (command line, SConscript file, and default) - and to override the __getattr__() method to check them in turn. - This should allow the rest of the code to just fetch values as - attributes of an instance of this class, without having to worry - about where they came from. - - Note that not all command line options are settable from SConscript - files, and the ones that are must be explicitly added to the - "settable" list in this class, and optionally validated and coerced - in the set_option() method. - """ - - def __init__(self, defaults): - self.__dict__['__defaults__'] = defaults - self.__dict__['__SConscript_settings__'] = {} - - def __getattr__(self, attr): - """ - Fetches an options value, checking first for explicit settings - from the command line (which are direct attributes), then the - SConscript file settings, then the default values. - """ - try: - return self.__dict__[attr] - except KeyError: - try: - return self.__dict__['__SConscript_settings__'][attr] - except KeyError: - return getattr(self.__dict__['__defaults__'], attr) - - settable = [ - 'clean', - 'diskcheck', - 'duplicate', - 'help', - 'implicit_cache', - 'max_drift', - 'md5_chunksize', - 'no_exec', - 'num_jobs', - 'random', - 'stack_size', - 'warn', - ] - - def set_option(self, name, value): - """ - Sets an option from an SConscript file. - """ - if not name in self.settable: - raise SCons.Errors.UserError, "This option is not settable from a SConscript file: %s"%name - - if name == 'num_jobs': - try: - value = int(value) - if value < 1: - raise ValueError - except ValueError: - raise SCons.Errors.UserError, "A positive integer is required: %s"%repr(value) - elif name == 'max_drift': - try: - value = int(value) - except ValueError: - raise SCons.Errors.UserError, "An integer is required: %s"%repr(value) - elif name == 'duplicate': - try: - value = str(value) - except ValueError: - raise SCons.Errors.UserError, "A string is required: %s"%repr(value) - if not value in SCons.Node.FS.Valid_Duplicates: - raise SCons.Errors.UserError, "Not a valid duplication style: %s" % value - # Set the duplicate style right away so it can affect linking - # of SConscript files. - SCons.Node.FS.set_duplicate(value) - elif name == 'diskcheck': - try: - value = diskcheck_convert(value) - except ValueError, v: - raise SCons.Errors.UserError, "Not a valid diskcheck value: %s"%v - if not self.__dict__.has_key('diskcheck'): - # No --diskcheck= option was specified on the command line. - # Set this right away so it can affect the rest of the - # file/Node lookups while processing the SConscript files. - SCons.Node.FS.set_diskcheck(value) - elif name == 'stack_size': - try: - value = int(value) - except ValueError: - raise SCons.Errors.UserError, "An integer is required: %s"%repr(value) - elif name == 'md5_chunksize': - try: - value = int(value) - except ValueError: - raise SCons.Errors.UserError, "An integer is required: %s"%repr(value) - elif name == 'warn': - if SCons.Util.is_String(value): - value = [value] - value = self.__SConscript_settings__.get(name, []) + value - SCons.Warnings.process_warn_strings(value) - - self.__SConscript_settings__[name] = value - -class SConsOption(optparse.Option): - def convert_value(self, opt, value): - if value is not None: - if self.nargs in (1, '?'): - return self.check_value(opt, value) - else: - return tuple(map(lambda v, o=opt, s=self: s.check_value(o, v), value)) - - def process(self, opt, value, values, parser): - - # First, convert the value(s) to the right type. Howl if any - # value(s) are bogus. - value = self.convert_value(opt, value) - - # And then take whatever action is expected of us. - # This is a separate method to make life easier for - # subclasses to add new actions. - return self.take_action( - self.action, self.dest, opt, value, values, parser) - - def _check_nargs_optional(self): - if self.nargs == '?' and self._short_opts: - fmt = "option %s: nargs='?' is incompatible with short options" - raise SCons.Errors.UserError, fmt % self._short_opts[0] - - try: - _orig_CONST_ACTIONS = optparse.Option.CONST_ACTIONS - - _orig_CHECK_METHODS = optparse.Option.CHECK_METHODS - - except AttributeError: - # optparse.Option had no CONST_ACTIONS before Python 2.5. - - _orig_CONST_ACTIONS = ("store_const",) - - def _check_const(self): - if self.action not in self.CONST_ACTIONS and self.const is not None: - raise OptionError( - "'const' must not be supplied for action %r" % self.action, - self) - - # optparse.Option collects its list of unbound check functions - # up front. This sucks because it means we can't just override - # the _check_const() function like a normal method, we have to - # actually replace it in the list. This seems to be the most - # straightforward way to do that. - - _orig_CHECK_METHODS = [optparse.Option._check_action, - optparse.Option._check_type, - optparse.Option._check_choice, - optparse.Option._check_dest, - _check_const, - optparse.Option._check_nargs, - optparse.Option._check_callback] - - CHECK_METHODS = _orig_CHECK_METHODS + [_check_nargs_optional] - - CONST_ACTIONS = _orig_CONST_ACTIONS + optparse.Option.TYPED_ACTIONS - -class SConsOptionGroup(optparse.OptionGroup): - """ - A subclass for SCons-specific option groups. - - The only difference between this and the base class is that we print - the group's help text flush left, underneath their own title but - lined up with the normal "SCons Options". - """ - def format_help(self, formatter): - """ - Format an option group's help text, outdenting the title so it's - flush with the "SCons Options" title we print at the top. - """ - formatter.dedent() - result = formatter.format_heading(self.title) - formatter.indent() - result = result + optparse.OptionContainer.format_help(self, formatter) - return result - -class SConsOptionParser(optparse.OptionParser): - preserve_unknown_options = False - - def error(self, msg): - self.print_usage(sys.stderr) - sys.stderr.write("SCons error: %s\n" % msg) - sys.exit(2) - - def _process_long_opt(self, rargs, values): - """ - SCons-specific processing of long options. - - This is copied directly from the normal - optparse._process_long_opt() method, except that, if configured - to do so, we catch the exception thrown when an unknown option - is encountered and just stick it back on the "leftover" arguments - for later (re-)processing. - """ - arg = rargs.pop(0) - - # Value explicitly attached to arg? Pretend it's the next - # argument. - if "=" in arg: - (opt, next_arg) = string.split(arg, "=", 1) - rargs.insert(0, next_arg) - had_explicit_value = True - else: - opt = arg - had_explicit_value = False - - try: - opt = self._match_long_opt(opt) - except optparse.BadOptionError: - if self.preserve_unknown_options: - # SCons-specific: if requested, add unknown options to - # the "leftover arguments" list for later processing. - self.largs.append(arg) - if had_explicit_value: - # The unknown option will be re-processed later, - # so undo the insertion of the explicit value. - rargs.pop(0) - return - raise - - option = self._long_opt[opt] - if option.takes_value(): - nargs = option.nargs - if nargs == '?': - if had_explicit_value: - value = rargs.pop(0) - else: - value = option.const - elif len(rargs) < nargs: - if nargs == 1: - self.error(_("%s option requires an argument") % opt) - else: - self.error(_("%s option requires %d arguments") - % (opt, nargs)) - elif nargs == 1: - value = rargs.pop(0) - else: - value = tuple(rargs[0:nargs]) - del rargs[0:nargs] - - elif had_explicit_value: - self.error(_("%s option does not take a value") % opt) - - else: - value = None - - option.process(opt, value, values, self) - - def add_local_option(self, *args, **kw): - """ - Adds a local option to the parser. - - This is initiated by a SetOption() call to add a user-defined - command-line option. We add the option to a separate option - group for the local options, creating the group if necessary. - """ - try: - group = self.local_option_group - except AttributeError: - group = SConsOptionGroup(self, 'Local Options') - group = self.add_option_group(group) - self.local_option_group = group - - result = apply(group.add_option, args, kw) - - if result: - # The option was added succesfully. We now have to add the - # default value to our object that holds the default values - # (so that an attempt to fetch the option's attribute will - # yield the default value when not overridden) and then - # we re-parse the leftover command-line options, so that - # any value overridden on the command line is immediately - # available if the user turns around and does a GetOption() - # right away. - setattr(self.values.__defaults__, result.dest, result.default) - self.parse_args(self.largs, self.values) - - return result - -class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter): - def format_usage(self, usage): - return "usage: %s\n" % usage - - def format_heading(self, heading): - """ - This translates any heading of "options" or "Options" into - "SCons Options." Unfortunately, we have to do this here, - because those titles are hard-coded in the optparse calls. - """ - if heading == 'options': - # The versions of optparse.py shipped with Pythons 2.3 and - # 2.4 pass this in uncapitalized; override that so we get - # consistent output on all versions. - heading = "Options" - if heading == 'Options': - heading = "SCons Options" - return optparse.IndentedHelpFormatter.format_heading(self, heading) - - def format_option(self, option): - """ - A copy of the normal optparse.IndentedHelpFormatter.format_option() - method. This has been snarfed so we can modify text wrapping to - out liking: - - -- add our own regular expression that doesn't break on hyphens - (so things like --no-print-directory don't get broken); - - -- wrap the list of options themselves when it's too long - (the wrapper.fill(opts) call below); - - -- set the subsequent_indent when wrapping the help_text. - """ - # The help for each option consists of two parts: - # * the opt strings and metavars - # eg. ("-x", or "-fFILENAME, --file=FILENAME") - # * the user-supplied help string - # eg. ("turn on expert mode", "read data from FILENAME") - # - # If possible, we write both of these on the same line: - # -x turn on expert mode - # - # But if the opt string list is too long, we put the help - # string on a second line, indented to the same column it would - # start in if it fit on the first line. - # -fFILENAME, --file=FILENAME - # read data from FILENAME - result = [] - - try: - opts = self.option_strings[option] - except AttributeError: - # The Python 2.3 version of optparse attaches this to - # to the option argument, not to this object. - opts = option.option_strings - - opt_width = self.help_position - self.current_indent - 2 - if len(opts) > opt_width: - wrapper = textwrap.TextWrapper(width=self.width, - initial_indent = ' ', - subsequent_indent = ' ') - wrapper.wordsep_re = no_hyphen_re - opts = wrapper.fill(opts) + '\n' - indent_first = self.help_position - else: # start help on same line as opts - opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts) - indent_first = 0 - result.append(opts) - if option.help: - - try: - expand_default = self.expand_default - except AttributeError: - # The HelpFormatter base class in the Python 2.3 version - # of optparse has no expand_default() method. - help_text = option.help - else: - help_text = expand_default(option) - - # SCons: indent every line of the help text but the first. - wrapper = textwrap.TextWrapper(width=self.help_width, - subsequent_indent = ' ') - wrapper.wordsep_re = no_hyphen_re - help_lines = wrapper.wrap(help_text) - result.append("%*s%s\n" % (indent_first, "", help_lines[0])) - for line in help_lines[1:]: - result.append("%*s%s\n" % (self.help_position, "", line)) - elif opts[-1] != "\n": - result.append("\n") - return string.join(result, "") - - # For consistent help output across Python versions, we provide a - # subclass copy of format_option_strings() and these two variables. - # This is necessary (?) for Python2.3, which otherwise concatenates - # a short option with its metavar. - _short_opt_fmt = "%s %s" - _long_opt_fmt = "%s=%s" - - def format_option_strings(self, option): - """Return a comma-separated list of option strings & metavariables.""" - if option.takes_value(): - metavar = option.metavar or string.upper(option.dest) - short_opts = [] - for sopt in option._short_opts: - short_opts.append(self._short_opt_fmt % (sopt, metavar)) - long_opts = [] - for lopt in option._long_opts: - long_opts.append(self._long_opt_fmt % (lopt, metavar)) - else: - short_opts = option._short_opts - long_opts = option._long_opts - - if self.short_first: - opts = short_opts + long_opts - else: - opts = long_opts + short_opts - - return string.join(opts, ", ") - -def Parser(version): - """ - Returns an options parser object initialized with the standard - SCons options. - """ - - formatter = SConsIndentedHelpFormatter(max_help_position=30) - - op = SConsOptionParser(option_class=SConsOption, - add_help_option=False, - formatter=formatter, - usage="usage: scons [OPTION] [TARGET] ...",) - - op.preserve_unknown_options = True - op.version = version - - # Add the options to the parser we just created. - # - # These are in the order we want them to show up in the -H help - # text, basically alphabetical. Each op.add_option() call below - # should have a consistent format: - # - # op.add_option("-L", "--long-option-name", - # nargs=1, type="string", - # dest="long_option_name", default='foo', - # action="callback", callback=opt_long_option, - # help="help text goes here", - # metavar="VAR") - # - # Even though the optparse module constructs reasonable default - # destination names from the long option names, we're going to be - # explicit about each one for easier readability and so this code - # will at least show up when grepping the source for option attribute - # names, or otherwise browsing the source code. - - # options ignored for compatibility - def opt_ignore(option, opt, value, parser): - sys.stderr.write("Warning: ignoring %s option\n" % opt) - op.add_option("-b", "-d", "-e", "-m", "-S", "-t", "-w", - "--environment-overrides", - "--no-keep-going", - "--no-print-directory", - "--print-directory", - "--stop", - "--touch", - action="callback", callback=opt_ignore, - help="Ignored for compatibility.") - - op.add_option('-c', '--clean', '--remove', - dest="clean", default=False, - action="store_true", - help="Remove specified targets and dependencies.") - - op.add_option('-C', '--directory', - nargs=1, type="string", - dest="directory", default=[], - action="append", - help="Change to DIR before doing anything.", - metavar="DIR") - - op.add_option('--cache-debug', - nargs=1, - dest="cache_debug", default=None, - action="store", - help="Print CacheDir debug info to FILE.", - metavar="FILE") - - op.add_option('--cache-disable', '--no-cache', - dest='cache_disable', default=False, - action="store_true", - help="Do not retrieve built targets from CacheDir.") - - op.add_option('--cache-force', '--cache-populate', - dest='cache_force', default=False, - action="store_true", - help="Copy already-built targets into the CacheDir.") - - op.add_option('--cache-show', - dest='cache_show', default=False, - action="store_true", - help="Print build actions for files from CacheDir.") - - config_options = ["auto", "force" ,"cache"] - - def opt_config(option, opt, value, parser, c_options=config_options): - if not value in c_options: - raise OptionValueError("Warning: %s is not a valid config type" % value) - setattr(parser.values, option.dest, value) - opt_config_help = "Controls Configure subsystem: %s." \ - % string.join(config_options, ", ") - op.add_option('--config', - nargs=1, type="string", - dest="config", default="auto", - action="callback", callback=opt_config, - help = opt_config_help, - metavar="MODE") - - op.add_option('-D', - dest="climb_up", default=None, - action="store_const", const=2, - help="Search up directory tree for SConstruct, " - "build all Default() targets.") - - deprecated_debug_options = { - "dtree" : '; please use --tree=derived instead', - "nomemoizer" : ' and has no effect', - "stree" : '; please use --tree=all,status instead', - "tree" : '; please use --tree=all instead', - } - - debug_options = ["count", "explain", "findlibs", - "includes", "memoizer", "memory", "objects", - "pdb", "presub", "stacktrace", - "time"] + deprecated_debug_options.keys() - - def opt_debug(option, opt, value, parser, - debug_options=debug_options, - deprecated_debug_options=deprecated_debug_options): - if value in debug_options: - parser.values.debug.append(value) - if value in deprecated_debug_options.keys(): - try: - parser.values.delayed_warnings - except AttributeError: - parser.values.delayed_warnings = [] - msg = deprecated_debug_options[value] - w = "The --debug=%s option is deprecated%s." % (value, msg) - t = (SCons.Warnings.DeprecatedWarning, w) - parser.values.delayed_warnings.append(t) - else: - raise OptionValueError("Warning: %s is not a valid debug type" % value) - opt_debug_help = "Print various types of debugging information: %s." \ - % string.join(debug_options, ", ") - op.add_option('--debug', - nargs=1, type="string", - dest="debug", default=[], - action="callback", callback=opt_debug, - help=opt_debug_help, - metavar="TYPE") - - def opt_diskcheck(option, opt, value, parser): - try: - diskcheck_value = diskcheck_convert(value) - except ValueError, e: - raise OptionValueError("Warning: `%s' is not a valid diskcheck type" % e) - setattr(parser.values, option.dest, diskcheck_value) - - op.add_option('--diskcheck', - nargs=1, type="string", - dest='diskcheck', default=None, - action="callback", callback=opt_diskcheck, - help="Enable specific on-disk checks.", - metavar="TYPE") - - def opt_duplicate(option, opt, value, parser): - if not value in SCons.Node.FS.Valid_Duplicates: - raise OptionValueError("`%s' is not a valid duplication style." % value) - setattr(parser.values, option.dest, value) - # Set the duplicate style right away so it can affect linking - # of SConscript files. - SCons.Node.FS.set_duplicate(value) - - opt_duplicate_help = "Set the preferred duplication methods. Must be one of " \ - + string.join(SCons.Node.FS.Valid_Duplicates, ", ") - - op.add_option('--duplicate', - nargs=1, type="string", - dest="duplicate", default='hard-soft-copy', - action="callback", callback=opt_duplicate, - help=opt_duplicate_help) - - op.add_option('-f', '--file', '--makefile', '--sconstruct', - nargs=1, type="string", - dest="file", default=[], - action="append", - help="Read FILE as the top-level SConstruct file.") - - op.add_option('-h', '--help', - dest="help", default=False, - action="store_true", - help="Print defined help message, or this one.") - - op.add_option("-H", "--help-options", - action="help", - help="Print this message and exit.") - - op.add_option('-i', '--ignore-errors', - dest='ignore_errors', default=False, - action="store_true", - help="Ignore errors from build actions.") - - op.add_option('-I', '--include-dir', - nargs=1, - dest='include_dir', default=[], - action="append", - help="Search DIR for imported Python modules.", - metavar="DIR") - - op.add_option('--implicit-cache', - dest='implicit_cache', default=False, - action="store_true", - help="Cache implicit dependencies") - - def opt_implicit_deps(option, opt, value, parser): - setattr(parser.values, 'implicit_cache', True) - setattr(parser.values, option.dest, True) - - op.add_option('--implicit-deps-changed', - dest="implicit_deps_changed", default=False, - action="callback", callback=opt_implicit_deps, - help="Ignore cached implicit dependencies.") - - op.add_option('--implicit-deps-unchanged', - dest="implicit_deps_unchanged", default=False, - action="callback", callback=opt_implicit_deps, - help="Ignore changes in implicit dependencies.") - - op.add_option('--interact', '--interactive', - dest='interactive', default=False, - action="store_true", - help="Run in interactive mode.") - - op.add_option('-j', '--jobs', - nargs=1, type="int", - dest="num_jobs", default=1, - action="store", - help="Allow N jobs at once.", - metavar="N") - - op.add_option('-k', '--keep-going', - dest='keep_going', default=False, - action="store_true", - help="Keep going when a target can't be made.") - - op.add_option('--max-drift', - nargs=1, type="int", - dest='max_drift', default=SCons.Node.FS.default_max_drift, - action="store", - help="Set maximum system clock drift to N seconds.", - metavar="N") - - op.add_option('--md5-chunksize', - nargs=1, type="int", - dest='md5_chunksize', default=SCons.Node.FS.File.md5_chunksize, - action="store", - help="Set chunk-size for MD5 signature computation to N kilobytes.", - metavar="N") - - op.add_option('-n', '--no-exec', '--just-print', '--dry-run', '--recon', - dest='no_exec', default=False, - action="store_true", - help="Don't build; just print commands.") - - op.add_option('--no-site-dir', - dest='no_site_dir', default=False, - action="store_true", - help="Don't search or use the usual site_scons dir.") - - op.add_option('--profile', - nargs=1, - dest="profile_file", default=None, - action="store", - help="Profile SCons and put results in FILE.", - metavar="FILE") - - op.add_option('-q', '--question', - dest="question", default=False, - action="store_true", - help="Don't build; exit status says if up to date.") - - op.add_option('-Q', - dest='no_progress', default=False, - action="store_true", - help="Suppress \"Reading/Building\" progress messages.") - - op.add_option('--random', - dest="random", default=False, - action="store_true", - help="Build dependencies in random order.") - - op.add_option('-s', '--silent', '--quiet', - dest="silent", default=False, - action="store_true", - help="Don't print commands.") - - op.add_option('--site-dir', - nargs=1, - dest='site_dir', default=None, - action="store", - help="Use DIR instead of the usual site_scons dir.", - metavar="DIR") - - op.add_option('--stack-size', - nargs=1, type="int", - dest='stack_size', - action="store", - help="Set the stack size of the threads used to run jobs to N kilobytes.", - metavar="N") - - op.add_option('--taskmastertrace', - nargs=1, - dest="taskmastertrace_file", default=None, - action="store", - help="Trace Node evaluation to FILE.", - metavar="FILE") - - tree_options = ["all", "derived", "prune", "status"] - - def opt_tree(option, opt, value, parser, tree_options=tree_options): - import Main - tp = Main.TreePrinter() - for o in string.split(value, ','): - if o == 'all': - tp.derived = False - elif o == 'derived': - tp.derived = True - elif o == 'prune': - tp.prune = True - elif o == 'status': - tp.status = True - else: - raise OptionValueError("Warning: %s is not a valid --tree option" % o) - parser.values.tree_printers.append(tp) - - opt_tree_help = "Print a dependency tree in various formats: %s." \ - % string.join(tree_options, ", ") - - op.add_option('--tree', - nargs=1, type="string", - dest="tree_printers", default=[], - action="callback", callback=opt_tree, - help=opt_tree_help, - metavar="OPTIONS") - - op.add_option('-u', '--up', '--search-up', - dest="climb_up", default=0, - action="store_const", const=1, - help="Search up directory tree for SConstruct, " - "build targets at or below current directory.") - - op.add_option('-U', - dest="climb_up", default=0, - action="store_const", const=3, - help="Search up directory tree for SConstruct, " - "build Default() targets from local SConscript.") - - def opt_version(option, opt, value, parser): - sys.stdout.write(parser.version + '\n') - sys.exit(0) - op.add_option("-v", "--version", - action="callback", callback=opt_version, - help="Print the SCons version number and exit.") - - def opt_warn(option, opt, value, parser, tree_options=tree_options): - if SCons.Util.is_String(value): - value = string.split(value, ',') - parser.values.warn.extend(value) - - op.add_option('--warn', '--warning', - nargs=1, type="string", - dest="warn", default=[], - action="callback", callback=opt_warn, - help="Enable or disable warnings.", - metavar="WARNING-SPEC") - - op.add_option('-Y', '--repository', '--srcdir', - nargs=1, - dest="repository", default=[], - action="append", - help="Search REPOSITORY for source and target files.") - - # Options from Make and Cons classic that we do not yet support, - # but which we may support someday and whose (potential) meanings - # we don't want to change. These all get a "the -X option is not - # yet implemented" message and don't show up in the help output. - - def opt_not_yet(option, opt, value, parser): - msg = "Warning: the %s option is not yet implemented\n" % opt - sys.stderr.write(msg) - sys.exit(0) - - - op.add_option('-l', '--load-average', '--max-load', - nargs=1, type="int", - dest="load_average", default=0, - action="callback", callback=opt_not_yet, - # action="store", - # help="Don't start multiple jobs unless load is below " - # "LOAD-AVERAGE." - help=SUPPRESS_HELP) - op.add_option('--list-actions', - dest="list_actions", - action="callback", callback=opt_not_yet, - # help="Don't build; list files and build actions." - help=SUPPRESS_HELP) - op.add_option('--list-derived', - dest="list_derived", - action="callback", callback=opt_not_yet, - # help="Don't build; list files that would be built." - help=SUPPRESS_HELP) - op.add_option('--list-where', - dest="list_where", - action="callback", callback=opt_not_yet, - # help="Don't build; list files and where defined." - help=SUPPRESS_HELP) - op.add_option('-o', '--old-file', '--assume-old', - nargs=1, type="string", - dest="old_file", default=[], - action="callback", callback=opt_not_yet, - # action="append", - # help = "Consider FILE to be old; don't rebuild it." - help=SUPPRESS_HELP) - op.add_option('--override', - nargs=1, type="string", - action="callback", callback=opt_not_yet, - dest="override", - # help="Override variables as specified in FILE." - help=SUPPRESS_HELP) - op.add_option('-p', - action="callback", callback=opt_not_yet, - dest="p", - # help="Print internal environments/objects." - help=SUPPRESS_HELP) - op.add_option('-r', '-R', '--no-builtin-rules', '--no-builtin-variables', - action="callback", callback=opt_not_yet, - dest="no_builtin_rules", - # help="Clear default environments and variables." - help=SUPPRESS_HELP) - op.add_option('--write-filenames', - nargs=1, type="string", - dest="write_filenames", - action="callback", callback=opt_not_yet, - # help="Write all filenames examined into FILE." - help=SUPPRESS_HELP) - op.add_option('-W', '--new-file', '--assume-new', '--what-if', - nargs=1, type="string", - dest="new_file", - action="callback", callback=opt_not_yet, - # help="Consider FILE to be changed." - help=SUPPRESS_HELP) - op.add_option('--warn-undefined-variables', - dest="warn_undefined_variables", - action="callback", callback=opt_not_yet, - # help="Warn when an undefined variable is referenced." - help=SUPPRESS_HELP) - - return op diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConsOptions.pyc deleted file mode 100644 index a62a8cf312b162a1cfb6fa98fd1286c3563e0e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27883 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 v_major or (major == v_major and minor > v_minor)) - - def _get_major_minor_revision(self, version_string): - """Split a version string into major, minor and (optionally) - revision parts. - - This is complicated by the fact that a version string can be - something like 3.2b1.""" - version = string.split(string.split(version_string, ' ')[0], '.') - v_major = int(version[0]) - v_minor = int(re.match('\d+', version[1]).group()) - if len(version) >= 3: - v_revision = int(re.match('\d+', version[2]).group()) - else: - v_revision = 0 - return v_major, v_minor, v_revision - - def _get_SConscript_filenames(self, ls, kw): - """ - Convert the parameters passed to # SConscript() calls into a list - of files and export variables. If the parameters are invalid, - throws SCons.Errors.UserError. Returns a tuple (l, e) where l - is a list of SConscript filenames and e is a list of exports. - """ - exports = [] - - if len(ls) == 0: - try: - dirs = kw["dirs"] - except KeyError: - raise SCons.Errors.UserError, \ - "Invalid SConscript usage - no parameters" - - if not SCons.Util.is_List(dirs): - dirs = [ dirs ] - dirs = map(str, dirs) - - name = kw.get('name', 'SConscript') - - files = map(lambda n, name = name: os.path.join(n, name), dirs) - - elif len(ls) == 1: - - files = ls[0] - - elif len(ls) == 2: - - files = ls[0] - exports = self.Split(ls[1]) - - else: - - raise SCons.Errors.UserError, \ - "Invalid SConscript() usage - too many arguments" - - if not SCons.Util.is_List(files): - files = [ files ] - - if kw.get('exports'): - exports.extend(self.Split(kw['exports'])) - - variant_dir = kw.get('variant_dir') or kw.get('build_dir') - if variant_dir: - if len(files) != 1: - raise SCons.Errors.UserError, \ - "Invalid SConscript() usage - can only specify one SConscript with a variant_dir" - duplicate = kw.get('duplicate', 1) - src_dir = kw.get('src_dir') - if not src_dir: - src_dir, fname = os.path.split(str(files[0])) - files = [os.path.join(str(variant_dir), fname)] - else: - if not isinstance(src_dir, SCons.Node.Node): - src_dir = self.fs.Dir(src_dir) - fn = files[0] - if not isinstance(fn, SCons.Node.Node): - fn = self.fs.File(fn) - if fn.is_under(src_dir): - # Get path relative to the source directory. - fname = fn.get_path(src_dir) - files = [os.path.join(str(variant_dir), fname)] - else: - files = [fn.abspath] - kw['src_dir'] = variant_dir - self.fs.VariantDir(variant_dir, src_dir, duplicate) - - return (files, exports) - - # - # Public methods of an SConsEnvironment. These get - # entry points in the global name space so they can be called - # as global functions. - # - - def Configure(self, *args, **kw): - if not SCons.Script.sconscript_reading: - raise SCons.Errors.UserError, "Calling Configure from Builders is not supported." - kw['_depth'] = kw.get('_depth', 0) + 1 - return apply(SCons.Environment.Base.Configure, (self,)+args, kw) - - def Default(self, *targets): - SCons.Script._Set_Default_Targets(self, targets) - - def EnsureSConsVersion(self, major, minor, revision=0): - """Exit abnormally if the SCons version is not late enough.""" - scons_ver = self._get_major_minor_revision(SCons.__version__) - if scons_ver < (major, minor, revision): - if revision: - scons_ver_string = '%d.%d.%d' % (major, minor, revision) - else: - scons_ver_string = '%d.%d' % (major, minor) - print "SCons %s or greater required, but you have SCons %s" % \ - (scons_ver_string, SCons.__version__) - sys.exit(2) - - def EnsurePythonVersion(self, major, minor): - """Exit abnormally if the Python version is not late enough.""" - try: - v_major, v_minor, v_micro, release, serial = sys.version_info - python_ver = (v_major, v_minor) - except AttributeError: - python_ver = self._get_major_minor_revision(sys.version)[:2] - if python_ver < (major, minor): - v = string.split(sys.version, " ", 1)[0] - print "Python %d.%d or greater required, but you have Python %s" %(major,minor,v) - sys.exit(2) - - def Exit(self, value=0): - sys.exit(value) - - def Export(self, *vars): - for var in vars: - global_exports.update(compute_exports(self.Split(var))) - - def GetLaunchDir(self): - global launch_dir - return launch_dir - - def GetOption(self, name): - name = self.subst(name) - return SCons.Script.Main.GetOption(name) - - def Help(self, text): - text = self.subst(text, raw=1) - SCons.Script.HelpFunction(text) - - def Import(self, *vars): - try: - frame = call_stack[-1] - globals = frame.globals - exports = frame.exports - for var in vars: - var = self.Split(var) - for v in var: - if v == '*': - globals.update(global_exports) - globals.update(exports) - else: - if exports.has_key(v): - globals[v] = exports[v] - else: - globals[v] = global_exports[v] - except KeyError,x: - raise SCons.Errors.UserError, "Import of non-existent variable '%s'"%x - - def SConscript(self, *ls, **kw): - def subst_element(x, subst=self.subst): - if SCons.Util.is_List(x): - x = map(subst, x) - else: - x = subst(x) - return x - ls = map(subst_element, ls) - subst_kw = {} - for key, val in kw.items(): - if SCons.Util.is_String(val): - val = self.subst(val) - elif SCons.Util.is_List(val): - result = [] - for v in val: - if SCons.Util.is_String(v): - v = self.subst(v) - result.append(v) - val = result - subst_kw[key] = val - - files, exports = self._get_SConscript_filenames(ls, subst_kw) - subst_kw['exports'] = exports - return apply(_SConscript, [self.fs,] + files, subst_kw) - - def SConscriptChdir(self, flag): - global sconscript_chdir - sconscript_chdir = flag - - def SetOption(self, name, value): - name = self.subst(name) - SCons.Script.Main.SetOption(name, value) - -# -# -# -SCons.Environment.Environment = SConsEnvironment - -def Configure(*args, **kw): - if not SCons.Script.sconscript_reading: - raise SCons.Errors.UserError, "Calling Configure from Builders is not supported." - kw['_depth'] = 1 - return apply(SCons.SConf.SConf, args, kw) - -# It's very important that the DefaultEnvironmentCall() class stay in this -# file, with the get_calling_namespaces() function, the compute_exports() -# function, the Frame class and the SConsEnvironment.Export() method. -# These things make up the calling stack leading up to the actual global -# Export() or SConscript() call that the user issued. We want to allow -# users to export local variables that they define, like so: -# -# def func(): -# x = 1 -# Export('x') -# -# To support this, the get_calling_namespaces() function assumes that -# the *first* stack frame that's not from this file is the local frame -# for the Export() or SConscript() call. - -_DefaultEnvironmentProxy = None - -def get_DefaultEnvironmentProxy(): - global _DefaultEnvironmentProxy - if not _DefaultEnvironmentProxy: - default_env = SCons.Defaults.DefaultEnvironment() - _DefaultEnvironmentProxy = SCons.Environment.NoSubstitutionProxy(default_env) - return _DefaultEnvironmentProxy - -class DefaultEnvironmentCall: - """A class that implements "global function" calls of - Environment methods by fetching the specified method from the - DefaultEnvironment's class. Note that this uses an intermediate - proxy class instead of calling the DefaultEnvironment method - directly so that the proxy can override the subst() method and - thereby prevent expansion of construction variables (since from - the user's point of view this was called as a global function, - with no associated construction environment).""" - def __init__(self, method_name, subst=0): - self.method_name = method_name - if subst: - self.factory = SCons.Defaults.DefaultEnvironment - else: - self.factory = get_DefaultEnvironmentProxy - def __call__(self, *args, **kw): - env = self.factory() - method = getattr(env, self.method_name) - return apply(method, args, kw) - - -def BuildDefaultGlobals(): - """ - Create a dictionary containing all the default globals for - SConstruct and SConscript files. - """ - - global GlobalDict - if GlobalDict is None: - GlobalDict = {} - - import SCons.Script - d = SCons.Script.__dict__ - def not_a_module(m, d=d, mtype=type(SCons.Script)): - return type(d[m]) != mtype - for m in filter(not_a_module, dir(SCons.Script)): - GlobalDict[m] = d[m] - - return GlobalDict.copy() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConscript.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/SConscript.pyc deleted file mode 100644 index 5a6fc6d6e625f3104e19c28138eb48cbfa48ea16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19341 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 M#tOO{+OzM!0V!ALVE_OC diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.py deleted file mode 100644 index ad9999131..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.py +++ /dev/null @@ -1,408 +0,0 @@ -"""SCons.Script - -This file implements the main() function used by the scons script. - -Architecturally, this *is* the scons script, and will likely only be -called from the external "scons" wrapper. Consequently, anything here -should not be, or be considered, part of the build engine. If it's -something that we expect other software to want to use, it should go in -some other module. If it's specific to the "scons" script invocation, -it goes here. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Script/__init__.py 3842 2008/12/20 22:59:52 scons" - -import time -start_time = time.time() - -import os -import string -import sys -import UserList - -# Special chicken-and-egg handling of the "--debug=memoizer" flag: -# -# SCons.Memoize contains a metaclass implementation that affects how -# the other classes are instantiated. The Memoizer may add shim methods -# to classes that have methods that cache computed values in order to -# count and report the hits and misses. -# -# If we wait to enable the Memoization until after we've parsed the -# command line options normally, it will be too late, because the Memoizer -# will have already analyzed the classes that it's Memoizing and decided -# to not add the shims. So we use a special-case, up-front check for -# the "--debug=memoizer" flag and enable Memoizer before we import any -# of the other modules that use it. - -_args = sys.argv + string.split(os.environ.get('SCONSFLAGS', '')) -if "--debug=memoizer" in _args: - import SCons.Memoize - import SCons.Warnings - try: - SCons.Memoize.EnableMemoization() - except SCons.Warnings.Warning: - # Some warning was thrown (inability to --debug=memoizer on - # Python 1.5.2 because it doesn't have metaclasses). Arrange - # for it to be displayed or not after warnings are configured. - import Main - exc_type, exc_value, tb = sys.exc_info() - Main.delayed_warnings.append((exc_type, exc_value)) -del _args - -import SCons.Action -import SCons.Builder -import SCons.Environment -import SCons.Node.FS -import SCons.Options -import SCons.Platform -import SCons.Scanner -import SCons.SConf -import SCons.Subst -import SCons.Tool -import SCons.Util -import SCons.Variables -import SCons.Defaults - -import Main - -main = Main.main - -# The following are global class definitions and variables that used to -# live directly in this module back before 0.96.90, when it contained -# a lot of code. Some SConscript files in widely-distributed packages -# (Blender is the specific example) actually reached into SCons.Script -# directly to use some of these. Rather than break those SConscript -# files, we're going to propagate these names into the SCons.Script -# namespace here. -# -# Some of these are commented out because it's *really* unlikely anyone -# used them, but we're going to leave the comment here to try to make -# it obvious what to do if the situation arises. -BuildTask = Main.BuildTask -CleanTask = Main.CleanTask -QuestionTask = Main.QuestionTask -#PrintHelp = Main.PrintHelp -#SConscriptSettableOptions = Main.SConscriptSettableOptions - -AddOption = Main.AddOption -GetOption = Main.GetOption -SetOption = Main.SetOption -Progress = Main.Progress -GetBuildFailures = Main.GetBuildFailures - -#keep_going_on_error = Main.keep_going_on_error -#print_dtree = Main.print_dtree -#print_explanations = Main.print_explanations -#print_includes = Main.print_includes -#print_objects = Main.print_objects -#print_time = Main.print_time -#print_tree = Main.print_tree -#memory_stats = Main.memory_stats -#ignore_errors = Main.ignore_errors -#sconscript_time = Main.sconscript_time -#command_time = Main.command_time -#exit_status = Main.exit_status -#profiling = Main.profiling -#repositories = Main.repositories - -# -import SConscript -_SConscript = SConscript - -call_stack = _SConscript.call_stack - -# -Action = SCons.Action.Action -AddMethod = SCons.Util.AddMethod -AllowSubstExceptions = SCons.Subst.SetAllowableExceptions -Builder = SCons.Builder.Builder -Configure = _SConscript.Configure -Environment = SCons.Environment.Environment -#OptParser = SCons.SConsOptions.OptParser -FindPathDirs = SCons.Scanner.FindPathDirs -Platform = SCons.Platform.Platform -Return = _SConscript.Return -Scanner = SCons.Scanner.Base -Tool = SCons.Tool.Tool -WhereIs = SCons.Util.WhereIs - -# -BoolVariable = SCons.Variables.BoolVariable -EnumVariable = SCons.Variables.EnumVariable -ListVariable = SCons.Variables.ListVariable -PackageVariable = SCons.Variables.PackageVariable -PathVariable = SCons.Variables.PathVariable - -# Deprecated names that will go away some day. -BoolOption = SCons.Options.BoolOption -EnumOption = SCons.Options.EnumOption -ListOption = SCons.Options.ListOption -PackageOption = SCons.Options.PackageOption -PathOption = SCons.Options.PathOption - -# Action factories. -Chmod = SCons.Defaults.Chmod -Copy = SCons.Defaults.Copy -Delete = SCons.Defaults.Delete -Mkdir = SCons.Defaults.Mkdir -Move = SCons.Defaults.Move -Touch = SCons.Defaults.Touch - -# Pre-made, public scanners. -CScanner = SCons.Tool.CScanner -DScanner = SCons.Tool.DScanner -DirScanner = SCons.Defaults.DirScanner -ProgramScanner = SCons.Tool.ProgramScanner -SourceFileScanner = SCons.Tool.SourceFileScanner - -# Functions we might still convert to Environment methods. -CScan = SCons.Defaults.CScan -DefaultEnvironment = SCons.Defaults.DefaultEnvironment - -# Other variables we provide. -class TargetList(UserList.UserList): - def _do_nothing(self, *args, **kw): - pass - def _add_Default(self, list): - self.extend(list) - def _clear(self): - del self[:] - -ARGUMENTS = {} -ARGLIST = [] -BUILD_TARGETS = TargetList() -COMMAND_LINE_TARGETS = [] -DEFAULT_TARGETS = [] - -# BUILD_TARGETS can be modified in the SConscript files. If so, we -# want to treat the modified BUILD_TARGETS list as if they specified -# targets on the command line. To do that, though, we need to know if -# BUILD_TARGETS was modified through "official" APIs or by hand. We do -# this by updating two lists in parallel, the documented BUILD_TARGETS -# list, above, and this internal _build_plus_default targets list which -# should only have "official" API changes. Then Script/Main.py can -# compare these two afterwards to figure out if the user added their -# own targets to BUILD_TARGETS. -_build_plus_default = TargetList() - -def _Add_Arguments(alist): - for arg in alist: - a, b = string.split(arg, '=', 1) - ARGUMENTS[a] = b - ARGLIST.append((a, b)) - -def _Add_Targets(tlist): - if tlist: - COMMAND_LINE_TARGETS.extend(tlist) - BUILD_TARGETS.extend(tlist) - BUILD_TARGETS._add_Default = BUILD_TARGETS._do_nothing - BUILD_TARGETS._clear = BUILD_TARGETS._do_nothing - _build_plus_default.extend(tlist) - _build_plus_default._add_Default = _build_plus_default._do_nothing - _build_plus_default._clear = _build_plus_default._do_nothing - -def _Set_Default_Targets_Has_Been_Called(d, fs): - return DEFAULT_TARGETS - -def _Set_Default_Targets_Has_Not_Been_Called(d, fs): - if d is None: - d = [fs.Dir('.')] - return d - -_Get_Default_Targets = _Set_Default_Targets_Has_Not_Been_Called - -def _Set_Default_Targets(env, tlist): - global DEFAULT_TARGETS - global _Get_Default_Targets - _Get_Default_Targets = _Set_Default_Targets_Has_Been_Called - for t in tlist: - if t is None: - # Delete the elements from the list in-place, don't - # reassign an empty list to DEFAULT_TARGETS, so that the - # variables will still point to the same object we point to. - del DEFAULT_TARGETS[:] - BUILD_TARGETS._clear() - _build_plus_default._clear() - elif isinstance(t, SCons.Node.Node): - DEFAULT_TARGETS.append(t) - BUILD_TARGETS._add_Default([t]) - _build_plus_default._add_Default([t]) - else: - nodes = env.arg2nodes(t, env.fs.Entry) - DEFAULT_TARGETS.extend(nodes) - BUILD_TARGETS._add_Default(nodes) - _build_plus_default._add_Default(nodes) - -# -help_text = None - -def HelpFunction(text): - global help_text - if SCons.Script.help_text is None: - SCons.Script.help_text = text - else: - help_text = help_text + text - -# -# Will be non-zero if we are reading an SConscript file. -sconscript_reading = 0 - -# -def Variables(files=[], args=ARGUMENTS): - return SCons.Variables.Variables(files, args) - -def Options(files=[], args=ARGUMENTS): - return SCons.Options.Options(files, args) - -# The list of global functions to add to the SConscript name space -# that end up calling corresponding methods or Builders in the -# DefaultEnvironment(). -GlobalDefaultEnvironmentFunctions = [ - # Methods from the SConsEnvironment class, above. - 'Default', - 'EnsurePythonVersion', - 'EnsureSConsVersion', - 'Exit', - 'Export', - 'GetLaunchDir', - 'Help', - 'Import', - #'SConscript', is handled separately, below. - 'SConscriptChdir', - - # Methods from the Environment.Base class. - 'AddPostAction', - 'AddPreAction', - 'Alias', - 'AlwaysBuild', - 'BuildDir', - 'CacheDir', - 'Clean', - #The Command() method is handled separately, below. - 'Decider', - 'Depends', - 'Dir', - 'NoClean', - 'NoCache', - 'Entry', - 'Execute', - 'File', - 'FindFile', - 'FindInstalledFiles', - 'FindSourceFiles', - 'Flatten', - 'GetBuildPath', - 'Glob', - 'Ignore', - 'Install', - 'InstallAs', - 'Literal', - 'Local', - 'ParseDepends', - 'Precious', - 'Repository', - 'Requires', - 'SConsignFile', - 'SideEffect', - 'SourceCode', - 'SourceSignatures', - 'Split', - 'Tag', - 'TargetSignatures', - 'Value', - 'VariantDir', -] - -GlobalDefaultBuilders = [ - # Supported builders. - 'CFile', - 'CXXFile', - 'DVI', - 'Jar', - 'Java', - 'JavaH', - 'Library', - 'M4', - 'MSVSProject', - 'Object', - 'PCH', - 'PDF', - 'PostScript', - 'Program', - 'RES', - 'RMIC', - 'SharedLibrary', - 'SharedObject', - 'StaticLibrary', - 'StaticObject', - 'Tar', - 'TypeLibrary', - 'Zip', - 'Package', -] - -for name in GlobalDefaultEnvironmentFunctions + GlobalDefaultBuilders: - exec "%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name)) -del name - -# There are a handful of variables that used to live in the -# Script/SConscript.py module that some SConscript files out there were -# accessing directly as SCons.Script.SConscript.*. The problem is that -# "SConscript" in this namespace is no longer a module, it's a global -# function call--or more precisely, an object that implements a global -# function call through the default Environment. Nevertheless, we can -# maintain backwards compatibility for SConscripts that were reaching in -# this way by hanging some attributes off the "SConscript" object here. -SConscript = _SConscript.DefaultEnvironmentCall('SConscript') - -# Make SConscript look enough like the module it used to be so -# that pychecker doesn't barf. -SConscript.__name__ = 'SConscript' - -SConscript.Arguments = ARGUMENTS -SConscript.ArgList = ARGLIST -SConscript.BuildTargets = BUILD_TARGETS -SConscript.CommandLineTargets = COMMAND_LINE_TARGETS -SConscript.DefaultTargets = DEFAULT_TARGETS - -# The global Command() function must be handled differently than the -# global functions for other construction environment methods because -# we want people to be able to use Actions that must expand $TARGET -# and $SOURCE later, when (and if) the Action is invoked to build -# the target(s). We do this with the subst=1 argument, which creates -# a DefaultEnvironmentCall instance that wraps up a normal default -# construction environment that performs variable substitution, not a -# proxy that doesn't. -# -# There's a flaw here, though, because any other $-variables on a command -# line will *also* be expanded, each to a null string, but that should -# only be a problem in the unusual case where someone was passing a '$' -# on a command line and *expected* the $ to get through to the shell -# because they were calling Command() and not env.Command()... This is -# unlikely enough that we're going to leave this as is and cross that -# bridge if someone actually comes to it. -Command = _SConscript.DefaultEnvironmentCall('Command', subst=1) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Script/__init__.pyc deleted file mode 100644 index 7b10704687e2d6efd188dead273263fbe025d129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8413 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 0: - if key[0] == '{': - key = key[1:-1] - try: - s = eval(key, self.gvars, lvars) - except KeyboardInterrupt: - raise - except Exception, e: - if e.__class__ in AllowableExceptions: - return '' - raise_exception(e, self.target, s) - else: - if lvars.has_key(key): - s = lvars[key] - elif self.gvars.has_key(key): - s = self.gvars[key] - elif not NameError in AllowableExceptions: - raise_exception(NameError(key), self.target, s) - else: - return '' - - # Before re-expanding the result, handle - # recursive expansion by copying the local - # variable dictionary and overwriting a null - # string for the value of the variable name - # we just expanded. - # - # This could potentially be optimized by only - # copying lvars when s contains more expansions, - # but lvars is usually supposed to be pretty - # small, and deeply nested variable expansions - # are probably more the exception than the norm, - # so it should be tolerable for now. - lv = lvars.copy() - var = string.split(key, '.')[0] - lv[var] = '' - return self.substitute(s, lv) - elif is_Sequence(s): - def func(l, conv=self.conv, substitute=self.substitute, lvars=lvars): - return conv(substitute(l, lvars)) - return map(func, s) - elif callable(s): - try: - s = s(target=self.target, - source=self.source, - env=self.env, - for_signature=(self.mode != SUBST_CMD)) - except TypeError: - # This probably indicates that it's a callable - # object that doesn't match our calling arguments - # (like an Action). - if self.mode == SUBST_RAW: - return s - s = self.conv(s) - return self.substitute(s, lvars) - elif s is None: - return '' - else: - return s - - def substitute(self, args, lvars): - """Substitute expansions in an argument or list of arguments. - - This serves as a wrapper for splitting up a string into - separate tokens. - """ - if is_String(args) and not isinstance(args, CmdStringHolder): - args = str(args) # In case it's a UserString. - try: - def sub_match(match, conv=self.conv, expand=self.expand, lvars=lvars): - return conv(expand(match.group(1), lvars)) - result = _dollar_exps.sub(sub_match, args) - except TypeError: - # If the internal conversion routine doesn't return - # strings (it could be overridden to return Nodes, for - # example), then the 1.5.2 re module will throw this - # exception. Back off to a slower, general-purpose - # algorithm that works for all data types. - args = _separate_args.findall(args) - result = [] - for a in args: - result.append(self.conv(self.expand(a, lvars))) - if len(result) == 1: - result = result[0] - else: - result = string.join(map(str, result), '') - return result - else: - return self.expand(args, lvars) - - if conv is None: - conv = _strconv[mode] - - # Doing this every time is a bit of a waste, since the Executor - # has typically already populated the OverrideEnvironment with - # $TARGET/$SOURCE variables. We're keeping this (for now), though, - # because it supports existing behavior that allows us to call - # an Action directly with an arbitrary target+source pair, which - # we use in Tool/tex.py to handle calling $BIBTEX when necessary. - # If we dropped that behavior (or found another way to cover it), - # we could get rid of this call completely and just rely on the - # Executor setting the variables. - d = subst_dict(target, source) - if d: - lvars = lvars.copy() - lvars.update(d) - - # We're (most likely) going to eval() things. If Python doesn't - # find a __builtins__ value in the global dictionary used for eval(), - # it copies the current global values for you. Avoid this by - # setting it explicitly and then deleting, so we don't pollute the - # construction environment Dictionary(ies) that are typically used - # for expansion. - gvars['__builtins__'] = __builtins__ - - ss = StringSubber(env, mode, target, source, conv, gvars) - result = ss.substitute(strSubst, lvars) - - try: - del gvars['__builtins__'] - except KeyError: - pass - - if is_String(result): - # Remove $(-$) pairs and any stuff in between, - # if that's appropriate. - remove = _regex_remove[mode] - if remove: - result = remove.sub('', result) - if mode != SUBST_RAW: - # Compress strings of white space characters into - # a single space. - result = string.strip(_space_sep.sub(' ', result)) - elif is_Sequence(result): - remove = _list_remove[mode] - if remove: - result = remove(result) - - return result - -#Subst_List_Strings = {} - -def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={}, lvars={}, conv=None): - """Substitute construction variables in a string (or list or other - object) and separate the arguments into a command list. - - The companion scons_subst() function (above) handles basic - substitutions within strings, so see that function instead - if that's what you're looking for. - """ -# try: -# Subst_List_Strings[strSubst] = Subst_List_Strings[strSubst] + 1 -# except KeyError: -# Subst_List_Strings[strSubst] = 1 -# import SCons.Debug -# SCons.Debug.caller_trace(1) - class ListSubber(UserList.UserList): - """A class to construct the results of a scons_subst_list() call. - - Like StringSubber, this class binds a specific construction - environment, mode, target and source with two methods - (substitute() and expand()) that handle the expansion. - - In addition, however, this class is used to track the state of - the result(s) we're gathering so we can do the appropriate thing - whenever we have to append another word to the result--start a new - line, start a new word, append to the current word, etc. We do - this by setting the "append" attribute to the right method so - that our wrapper methods only need ever call ListSubber.append(), - and the rest of the object takes care of doing the right thing - internally. - """ - def __init__(self, env, mode, target, source, conv, gvars): - UserList.UserList.__init__(self, []) - self.env = env - self.mode = mode - self.target = target - self.source = source - self.conv = conv - self.gvars = gvars - - if self.mode == SUBST_RAW: - self.add_strip = lambda x, s=self: s.append(x) - else: - self.add_strip = lambda x, s=self: None - self.in_strip = None - self.next_line() - - def expand(self, s, lvars, within_list): - """Expand a single "token" as necessary, appending the - expansion to the current result. - - This handles expanding different types of things (strings, - lists, callables) appropriately. It calls the wrapper - substitute() method to re-expand things as necessary, so that - the results of expansions of side-by-side strings still get - re-evaluated separately, not smushed together. - """ - - if is_String(s): - try: - s0, s1 = s[:2] - except (IndexError, ValueError): - self.append(s) - return - if s0 != '$': - self.append(s) - return - if s1 == '$': - self.append('$') - elif s1 == '(': - self.open_strip('$(') - elif s1 == ')': - self.close_strip('$)') - else: - key = s[1:] - if key[0] == '{' or string.find(key, '.') >= 0: - if key[0] == '{': - key = key[1:-1] - try: - s = eval(key, self.gvars, lvars) - except KeyboardInterrupt: - raise - except Exception, e: - if e.__class__ in AllowableExceptions: - return - raise_exception(e, self.target, s) - else: - if lvars.has_key(key): - s = lvars[key] - elif self.gvars.has_key(key): - s = self.gvars[key] - elif not NameError in AllowableExceptions: - raise_exception(NameError(), self.target, s) - else: - return - - # Before re-expanding the result, handle - # recursive expansion by copying the local - # variable dictionary and overwriting a null - # string for the value of the variable name - # we just expanded. - lv = lvars.copy() - var = string.split(key, '.')[0] - lv[var] = '' - self.substitute(s, lv, 0) - self.this_word() - elif is_Sequence(s): - for a in s: - self.substitute(a, lvars, 1) - self.next_word() - elif callable(s): - try: - s = s(target=self.target, - source=self.source, - env=self.env, - for_signature=(self.mode != SUBST_CMD)) - except TypeError: - # This probably indicates that it's a callable - # object that doesn't match our calling arguments - # (like an Action). - if self.mode == SUBST_RAW: - self.append(s) - return - s = self.conv(s) - self.substitute(s, lvars, within_list) - elif s is None: - self.this_word() - else: - self.append(s) - - def substitute(self, args, lvars, within_list): - """Substitute expansions in an argument or list of arguments. - - This serves as a wrapper for splitting up a string into - separate tokens. - """ - - if is_String(args) and not isinstance(args, CmdStringHolder): - args = str(args) # In case it's a UserString. - args = _separate_args.findall(args) - for a in args: - if a[0] in ' \t\n\r\f\v': - if '\n' in a: - self.next_line() - elif within_list: - self.append(a) - else: - self.next_word() - else: - self.expand(a, lvars, within_list) - else: - self.expand(args, lvars, within_list) - - def next_line(self): - """Arrange for the next word to start a new line. This - is like starting a new word, except that we have to append - another line to the result.""" - UserList.UserList.append(self, []) - self.next_word() - - def this_word(self): - """Arrange for the next word to append to the end of the - current last word in the result.""" - self.append = self.add_to_current_word - - def next_word(self): - """Arrange for the next word to start a new word.""" - self.append = self.add_new_word - - def add_to_current_word(self, x): - """Append the string x to the end of the current last word - in the result. If that is not possible, then just add - it as a new word. Make sure the entire concatenated string - inherits the object attributes of x (in particular, the - escape function) by wrapping it as CmdStringHolder.""" - - if not self.in_strip or self.mode != SUBST_SIG: - try: - current_word = self[-1][-1] - except IndexError: - self.add_new_word(x) - else: - # All right, this is a hack and it should probably - # be refactored out of existence in the future. - # The issue is that we want to smoosh words together - # and make one file name that gets escaped if - # we're expanding something like foo$EXTENSION, - # but we don't want to smoosh them together if - # it's something like >$TARGET, because then we'll - # treat the '>' like it's part of the file name. - # So for now, just hard-code looking for the special - # command-line redirection characters... - try: - last_char = str(current_word)[-1] - except IndexError: - last_char = '\0' - if last_char in '<>|': - self.add_new_word(x) - else: - y = current_word + x - - # We used to treat a word appended to a literal - # as a literal itself, but this caused problems - # with interpreting quotes around space-separated - # targets on command lines. Removing this makes - # none of the "substantive" end-to-end tests fail, - # so we'll take this out but leave it commented - # for now in case there's a problem not covered - # by the test cases and we need to resurrect this. - #literal1 = self.literal(self[-1][-1]) - #literal2 = self.literal(x) - y = self.conv(y) - if is_String(y): - #y = CmdStringHolder(y, literal1 or literal2) - y = CmdStringHolder(y, None) - self[-1][-1] = y - - def add_new_word(self, x): - if not self.in_strip or self.mode != SUBST_SIG: - literal = self.literal(x) - x = self.conv(x) - if is_String(x): - x = CmdStringHolder(x, literal) - self[-1].append(x) - self.append = self.add_to_current_word - - def literal(self, x): - try: - l = x.is_literal - except AttributeError: - return None - else: - return l() - - def open_strip(self, x): - """Handle the "open strip" $( token.""" - self.add_strip(x) - self.in_strip = 1 - - def close_strip(self, x): - """Handle the "close strip" $) token.""" - self.add_strip(x) - self.in_strip = None - - if conv is None: - conv = _strconv[mode] - - # Doing this every time is a bit of a waste, since the Executor - # has typically already populated the OverrideEnvironment with - # $TARGET/$SOURCE variables. We're keeping this (for now), though, - # because it supports existing behavior that allows us to call - # an Action directly with an arbitrary target+source pair, which - # we use in Tool/tex.py to handle calling $BIBTEX when necessary. - # If we dropped that behavior (or found another way to cover it), - # we could get rid of this call completely and just rely on the - # Executor setting the variables. - d = subst_dict(target, source) - if d: - lvars = lvars.copy() - lvars.update(d) - - # We're (most likely) going to eval() things. If Python doesn't - # find a __builtins__ value in the global dictionary used for eval(), - # it copies the current global values for you. Avoid this by - # setting it explicitly and then deleting, so we don't pollute the - # construction environment Dictionary(ies) that are typically used - # for expansion. - gvars['__builtins__'] = __builtins__ - - ls = ListSubber(env, mode, target, source, conv, gvars) - ls.substitute(strSubst, lvars, 0) - - try: - del gvars['__builtins__'] - except KeyError: - pass - - return ls.data - -def scons_subst_once(strSubst, env, key): - """Perform single (non-recursive) substitution of a single - construction variable keyword. - - This is used when setting a variable when copying or overriding values - in an Environment. We want to capture (expand) the old value before - we override it, so people can do things like: - - env2 = env.Clone(CCFLAGS = '$CCFLAGS -g') - - We do this with some straightforward, brute-force code here... - """ - if type(strSubst) == types.StringType and string.find(strSubst, '$') < 0: - return strSubst - - matchlist = ['$' + key, '${' + key + '}'] - val = env.get(key, '') - def sub_match(match, val=val, matchlist=matchlist): - a = match.group(1) - if a in matchlist: - a = val - if is_Sequence(a): - return string.join(map(str, a)) - else: - return str(a) - - if is_Sequence(strSubst): - result = [] - for arg in strSubst: - if is_String(arg): - if arg in matchlist: - arg = val - if is_Sequence(arg): - result.extend(arg) - else: - result.append(arg) - else: - result.append(_dollar_exps.sub(sub_match, arg)) - else: - result.append(arg) - return result - elif is_String(strSubst): - return _dollar_exps.sub(sub_match, strSubst) - else: - return strSubst diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Subst.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Subst.pyc deleted file mode 100644 index 701da75285c579171d514bdb349bc005e9ebe5a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29100 zcmeHwYiwNEeczcGa>$`5QIB0oTxnNVT4^<0ilDD9&ON6v>*x`+3kd+vGu&;Ri||8rRSpF1bY&;9$)HeB*EhTosY z6?sMHn$BHASa8=0u32==l4}>;HQd;J$z3a@_apAwNP0i&u8pSmWp}Nd-jBI!+75SZhbsi*ZgtYF?sQvkcDZE~Gv$KaF4*IiimtxbHAmgMsM$W(EbHb8 z*Bo<8sOUH!A2|1gYfrjnMNt!3)PC38q2vc#bJ7K6w_0{fXxGjx#X;BHr4-YyIi;_6 zXYZbJ%{?v{b*rQLXm9r7kZbN!+9$H8!>;+H@_E`d_q%J)xaI+O?TBk0bk{r=6y54k z*PM0_(5=VP$EWo8tP2ox+y&37)hAr@kn(xXH4p3Nqzj%?f|E*6bC)2lhxd{z}XO=4K69w(*D zAXvE2?L>16>x)r5F`)-9io;fC*^3z0ir3>-w=*{}5xvMy!p7;Kv)t+grkri&{GT2XC5rNldu zr{MN_&}jrB=K|tNxL(B-?L!cYqVIu3Kt>>8RJ+PV^HnB`%LtZQ?KlYI5yo~qLCnw2 zwcFi|`eHk{bhi=o*p5h_#hfdF;-V^Uor35R?oRi@)}4ABoQ~Ier#szdFnj0B+{fl# zJRNtt?dY@`W8rMO+o-o^Uzj^PcV$$E4qRJ zjaMNEsA00t>BJ#d?B0A~C;U>p8?s~zUdV3u$Ry@cFy}|y}Fx6^}c0Gz}wRjv+wOXgX z7T|%E*6^$6FNI+@1oa^D{Ccb1)U!T+GYUdIRr!UYtk*FT`ZTVG%RwA-C?gFW3y4|U zwP<-LBQu4(!+I+UYFSM_!O~fKSC}m9E0ha|iz1NAEf7?_-QXMku$Jd>ML&)p02>1f zLWnLdXl99{zKa;J(~@GqOGk7AMrxdI%=ruI-sq2z$vJN$toM3B=q+_aubxc2InR52 z$=mF%d+Sl)#Vf7I>n^SajW|i&obd2d54-D~X7o|wYv%OvRi^D>WbqCpfKRo zs-EJmHbS+f^-g0b^(MElGA{R3JMC2d{t{rDKKFk0BrRe_FNiYd zTdcoz+i*vp3us`OBba8lQLFisIQ{_!(+r+sa0o#@ z;=0>D8RtvDqJ(G?L3yNHsFdtqycZD*#x>5xad_2uTm!NCA$6X|6}^IBfRBPrf|WuG zl0r&W3Jz+l6t9exj-{-0oUD{x5d8s0<_g&){?`Xs>c&bP3=zzYjI8dRoQFV98Jbr| z-CB$5aWHpM%q`2Jv*~r0#1yk6V8KhsK;Oq%rX4Q~mV%Iai?rnuqa1}g#t=A5eGg)>7Vd+6$u5_Ddc;qDlOL;_HYj?+60as@YY(Tu6g`e_z?RECp zz}!eOJY~7CqJ!Roc;8rW*QtC_)YR{ETTO4h z(+L_u6xG8`bm1bkhGpKQJ@rDr;@&c7*3~a^bhdG6?DyD zlX{R^=%)Y@t+j;S@AcZPpm{2jVdzZNm2&l=R)KsVMA>Q%@nFu?8H~%Nc9egP)DplE zhl-8Umy~pKrv6Hjn8pgNskJN(R?J#&G;{MwyN&ae9O7+U(KrG(Qh}l~S^R4x|HQpk zSV4|IL^FS-*9FGs3dIKsKK~#-7)m#iz20JNl3G$Kq?c;>9ts4NZy6s$Qy@e-o%gHS zk4Cgf4&Bb{HD9F#D2e7D=H1f_IPrf3QtTNN`z9`vVq@jvDX%IN#Pb*;Z8!J%c!OiQCIV~#ub26X2h(uV4IK;Voba1!di1dEqblnZU$k4Z~4QS zbRJi98o_`<06pL#g#h>ubpmJ!GNx!*MjuD}GVz^@I@+!@qGaT(pwOg8BX61G0i(C+ zEpD2mBT7*d%GzVr}a^uS^PLV%bdfPuOc62bd0_(H{%hQ1B0 zrm!^AM3c?so9M5x*7Tpl7sDVzmHhyjYZf@z^4TON{i}8F!JSnlCK?`hrZ)c5tXv{E z*x~7=s?jPze^a&rqnJ+A8w`TjiN*pCm6TXAeJG<*=rquwM2ggiGSY>59o&T)$!SB>pnfYLCD+5nRvc25vz!fz$UaX9 zR`g5K&mo0AT{Iz6AQhN-VNh?{tW@#jl$gi~TxEp+5LN+zl8O0qZV8&6RDNTgsCL=} zRn6-JcVjaN&jE9*jad{u(LRyn~#qawyd`QECXhc*GzZYsC^zs?jTIlKFek3 zo+Fi#RJ?&Xz)FDO7}vjFBqK7$0~TZ!dBj{2YOVv-iei~&;qp4|q6qxl3t?W^&?jck z614qOw+-gIHpNznLf+nP|c&w=qBF~gXW$ak_Y!Ij=S*Aov`Q3_v z$F{x%ng(kNgQ&*^7HW`GD$^>4^$m~f7k%}CMsT-}9G$z-$8axC7|Cn@EM% z0d^C&ZZ(jX0QI%j@=8pU9C%SZTJfMMQO&9Y$(h~2>cA-vz>tj>$2yMNCJ!6!pbpIu zXgN~$;&m1_H@8KVqJY0Za-zxIk6(Zf0J&&xnf|mZBsnA-N_a9jfbsqd2!=A@S+{TD zN_3^lht`#}6hzA6v=o0Bn$8sOMg?moj%#U=zsE|mi=9=Ox17A{aVSqIABMuDzP>f? z!e`vFbN2xn9pv(uvEk_ByjjLV8{)-iv7UxSVqh~Er`0hfD^mI5u#GDcm=o?NbU&Uk zaV}x{8Z8YT*^o~YSA+T{Cce6i*dcj=Kg;(VSN|-7k20kis>u^%4HW>Llfp2lASR?z zgE5p9`fWr+tc@#FupGu~vUC)opw_KMyHIB~z~>^G|8WF)HFdXr62YgK{cT(lQRN-w zA`JCnWryJAE5>_kK=~JpBR7yzKbcgxh{plz^1Y?P!^?Jw!$J-^{}J*%=k!TFbtQRJMfyVC1K8S2K~~)RYsIK z4dSXw$oYAyPY({fEO)B!Mr|33hC0*?xB{5)%z1zj$j0z<*u_>68hRw+x%37gMi_wM z0&iAg)KFF70)Jw1LUqc7o3PPV6Pj9UX_MMjBG-hsLljskbrV{Nlucme3`@^C5`AT3#H-Fgh| z035egtNkfT%iF;=P$u!W+Ckr$fp(M+t8$y0Pk(}hUn;H-K1 zATs~8`dulnCMiCJ7y*K-!)rRRJ`G{ihDKGZeHYKRs!*6JOgW4r`K7gK(hDu4l`{g?#L1$YC=^uy6O zk1L|K^#3ZqVb}>E{_ptq1Eh7IuztL<8d9*;X}0dPnlL9Mk2hsFexU4@psgog^vQ1; zT7p&vrr`UDGvgIZK3q~2Li^u1m@LZ~!zZKUAc;}FftvwFQFNQT$Opk0r{NNJwet+H zm7=hfPZ3)IK*EKXg4_QN+}{fBElfRQo`Q_XA?M}Q7IB#=Rl;E)!V-tNlp-!Kc_$)~ zN-j%;+P&Us26qL=_|M~e|0M){?DoeQ$B8YRrqe!?PoQm_JDjaQz@?-Um z?a3J}o2mXgiJO7`lNl5~n~R%i!O7GM^1k6}%~s*^SQ+sDLiw2pDWi3n2>C0v%zyO} zEj!P+$3X2Ik^jB5W$$fBi77t@R!l?aKeJjB2+E^k#g)paSjHHlvMwh+fVl&O5+oJA zDp(ee&|O4im}b;nMyPPW*_4(t=4sKrOkE~>F1eRG^7Bq!!sDBFh{mK1e?9T*xevn| znIel(Wm;CIPqQorHDkD}qIuTapgryO7qn|MixO7Dj)~LbJFWIt$L4)3`?6Tyc znwmcF{0zgoe2y$CnlZSId|W>?@MyB7tCq^fe1`;$+3kYlLHZ3Lsz)@#>SH)wQlI4E zuUenPX-O5b`wvwg);F8%6a#|PiKcAsPB_^EVK-Mh2QpNBCPCE+-GJqTZ2HXsEjGi# zNEUAiLT-wCYtGAi86aS1S+oGnc>b40R)ywyV? zJ_5+uKVPY$V9S=}Dvo zc(JoIw{IN3`Fs_z zZ{L`?X-_lH{2{=j3(-f`{s~Ct|aCiI|r71=PDQ@pqJUSim zmnkUiOU4T=cu;T!JX{qo>>reD1X&S{Am29gDbIMD7`)T?+#N;_`CmZxZ=ei~OG+y$ zla4~%2+?WUtmPnSa$u-MxP&CVRkB8bj6|$_(;7=s!+euIiODh_$IQy(G73SuD~l8DrM>} zwpCf>`maaP>~X79f|H|0{GKbe$+|Lj^Pr;ixqjG25mTA6hLD51T8o@A)qu@c!Njztkz_!F$Ry=G>98; z60L#OFhz4QK^`r=2#u7s#P<2S5bLuLMWHk9NPAp{-4vOk#r;zLB7+8l>;oTpJ0C+i z6kaZ*>8HrQiB@wlGyNxzM^0#7>Yi_+qs;gu%lS@W6HGxqNZt)Fm=Z1At5`XvOAjnt zY_z0f&r8ytVR*bnd5t(QpEvm30@x>?!I-b}M$eGj@Dsje?~(V2I|7T>c;Gac8B#~z zNZB~LeT=*fZ1vWtgY)h{y6|7^6GX8x3yw0JVl;aQhbvBQPsi z-yg8P@4!iyQR9j_UMPU27mTNale3Du3Xlv7u#AiZu(caaLT&|o_f}_>d1J3Piegt? zlvn5|xHIgqdD0F_&tEUm@rm_GQk%d+(PHyQUI{#sAaLp*I@dV2>pt!<>;S^BlkxhT7p@K zpG-gand0Urc#mD@Rx#{4=MDCuo7IJV=%_hj;7%~jk$>Pu*xj9vf=HfH-+rlReqT&- zNW`#GM3xKu3RO|fQtQ>~CE>}+v*amB=dTyl5%>%d3sq|A(Z3szLSUp21;^s%4aUwSI+B}Yaq!tnkVw9CKxD)DU*zzTXIE#;vcs*Z<6oADoYN+H0h$e}@aZKUwhs{? z984Ne7&sCL3ACT0BFxD&YwFJ8yh6A0UKH1Ei)$+}gY7fx2DEA&Z$MLcWg z%6ydoz0ddlB?PMA-^AYZz&4aq{unh$)W8Y9sT+2>#7MjcDc%S+7rXVa`8sz$hwDAF z9kTuZKINj%p7W{Ks~*B#upUsm6>OSkAv7y1lL;H$-llpd!mhE{U*TueMofOq;!f^8 zR2E3g5{9|FQ-%v~o?p09yYShIdb)x+V%b;lvAy%pT{RPoLdn)(xMRYnRs@-YmY=a- zFGvKVrv9n)Rr`+OFm~$Zp;$)je4AK5%TZjyBYliZg(u);KMI>@B)tGuQ~_G-#=B`) zOl2+!<8qv4^Ib+w5v);MG3vXuycgz_bKIw9g@J(IdG!% z5mX?T)_)Oxc!d13a!@Q@I)>6V?H)Z z5St_J_75DaomI%iDb-x27t{mffVToSv5|;U0~u!`0-8Z`jKJ@(ThfC%`qV+$30PT7 zk?71);Xc+>ckfefGwu!tpF3dT;G2V6X+`}q3)XvhmBtH+HMn~i`wZO#m35^%bLW7bsQ zf8{(dZkBUvG3R*+YB4hLuohgBqL{9w{&CjtD1#;gR@Xp>CYBKDADjaI%W~iek#7@L2`MFq%{}m+lZ!$f5 zwLXmQ5~uug_7V|ES3ay+ez1rc4p_4cZtxuV!Or3lV7XS$aU|>8q##EHjpzzqmA`o({K8_+?Wfruv?mw;s^p}w7hWklCtF4?Iv z&!KPn!~r|);iXJMNcEJ1S5pWJzq?dT#j$N6GT8{3=(2)KGTDJl=xz%9!}em4wz4%+ z91id(0IJ^;v|3*T%sP``8t{p&N3Dj+2Jg$xo#Ht&G$oSSMk(54cu0;kp_$k;rq4et z>O@WJGAfPkdL+f4NhBGIwEE^6w&(N^-;*&P{_!$Cw>5Lvb^io^H02+fayB zLofu@;a!s*~F%oZs(M@(%s;$t${`WK22B1u`=JdrJNvfVcvF^vTEdZUKIxCh8%~N z>!f&^u&@j_bfg7#V;iC87Ac;QB+H0=u7N(vFtFxm_uVd#2F*l|BGDHy*F0_R5Z&66_i(bgu}Gh8h&-m zG65=(`Z&=*R*kgzB{7<#{#@Ygjls;0P)VJox%Ec-mb7C|6o$h_(y23N1y%dJ7KmLY zZP)fZ-Y4!3+%*b6?|R6=K^xNQhN{$HPlLq-VTXR*xgMFJo0ubJ5d1uDjCW((D>x_g zbZE~7s+EwIFoq$irzMvP8hYpIYV6eY9+ccSOMN z5Tnl1g*)^N0C*AzcsWJDu>h%A%mvCE0skK0ZsbnH9wxmIa7OJ=R0sro46I^|@H6ai zBH%aFDTJnt8(_+#ub_wB{vHtUW#+vKELyH;;V%jSFB<~>h8hacAbb5SA>gP_l48aI zq+&Thz`x6-O+12Su+y_*2!9g=MlpN&5o%VcseF#)} zx;QeHqRK>+cS4r#!S6w2nfdMm%8d6#Nmaro#4jXOe;+rwRQ)Gguw^`_JOx|{*pFed z5QccX`@r~WK-`uR75f#)n;=nso)Q#Myk8Tegzx}ozWq(IvJfAF-$B>_IG}t)ES}|Y zQ@H(#9w0%GX~y{wd$nT=ns@_MGjZ7waE_R0oesvq+=bFmcmWuXlhvMKy27;w&!=yv>nJMHFH@^Dg_him+UkB zI%=Db%5YB!5DEMtJD*yz8|gdt36a*(Tsr5hQphtHvVL8}oA>S4L0gVeaixqFKSUSJ;e+?> zqJGjNIi}4en8oG-@_20RBp3M8ter)fw*x%>KO%vV!eoR)wlwvCX4CxnGq(w^5t;nc zWa9;Qfbs*if-NI~fJZF(*nRlNgeGtgJ`aq8D}-o_(z9q>FC!us0(4+K zmtaZY7qo^k>F=gC6&}o|L&OeFh<%t+hH%MeGahc- z*few|tjrbmOmcmnTT`Hk6(=UA;Q72a-=t4&D=9|R@jYf#OD~}P*djUz9F(2XJe4TS z9K8zPq?L<%P9#va&SXiZB6TC1Z=`l)fGHrbu89f=Fq@ZJZ`+--@$jhv>9E1AoqvNb z*y#MY0K>JOV;n9Ewr>ebbTEN2*Y0Nr&j@-&Orn>c$orFAO8q&D8}9E(ef;}3?Hm<5 zK|-D<_5i=t2UIE&$$JR5wrxiw#=!J{lGxB(=he;o*gzsw=_Z{~W4{zJywo_FSsX)z zHl|=&98FpBhMPv5Fs}hahIP(aevF2fctP)&cf1Pj1=oT(S$D|^YQK&Td=9+9r&9gc z-l2@;KSaid*i=pc2k(^(LjAx-%Ks!$=#Jsz{zl52%vuSLU$rtBRW(p!`M6s7k5E0Y zzm?TphkEWe^g8CGC2|!{&iMNz58>#%a-N+zsJX~F;Mfk(%`eoW>)`w zJ}xq7Fi`)H#?Abf)q&aRd{)Z;6$Dx|Z%29ax3A?oL!r-oU6%b>_Jq7Ic1`~mSRw!{|qq%XvuuJ z1CBixeFHuAc{@bT;}Jw)T~!>9KN|*+=uwL+-Tmv@v?1zALa8Q?T&efq=O=yIcI^sF zgvzDGPMr*xuJ_gRzciqD`YckH;hH{HD#KQjPxMaB&I80+rPueT3ZRZ*NpYi&Wk#$L z;!nEZbSgAKU}uxt53pQ^^OKbY&dtN-4KskS2AY(Bqx^8(6xLCDK^K3e0D0gS(!foO2OYB zfO1&pq9N+C0gq1{*%#uEIn3e_tI-W?PVk^92I=X1!U{F%4IMO}+WY2C%Lzbk&P!72 z3T`mKkWvs&AU)fb2f8MPbDW}!`aC8HXkN=9;b%CzxpWA19i)Xwk=8=;0DBX>Ak|ht zEcREH{GY^~Kt6L6`e{B={@dvbtdIY<5Wtvl4xKNRQ2uB1w-_Ft@f8&J1(cbcIAKS@ z?Zm0eqZyrx~bGFY@jp1Bt|S z-qF`gnzj58>E?sYXc~5GepOuRnnsfKe}Ta@2H1M!{9i_3haL8LJQ73qMHcTe%`Y+d zRR;f*!M70Pqp!Pd6r1D7{bl=$IZ Node B(Pending) --> Node C (NoState) - ^ | - | | - +-------------------------------------+ - - Now, when the Taskmaster examines the Node C's child Node A, - it finds that Node A is in the "pending" state. Therefore, - Node A is a pending child of node C. - - Pending children indicate that the Taskmaster has potentially - loop back through a cycle. We say potentially because it could - also occur when a DAG is evaluated in parallel. For example, - consider the following graph: - - - Node A (Pending) --> Node B(Pending) --> Node C (Pending) --> ... - | ^ - | | - +----------> Node D (NoState) --------+ - / - Next candidate / - - The Taskmaster first evaluates the nodes A, B, and C and - starts building some children of node C. Assuming, that the - maximum parallel level has not been reached, the Taskmaster - will examine Node D. It will find that Node C is a pending - child of Node D. - - In summary, evaluating a graph with a cycle will always - involve a pending child at one point. A pending child might - indicate either a cycle or a diamond-shaped DAG. Only a - fraction of the nodes ends-up being a "pending child" of - another node. This keeps the pending_children set small in - practice. - - We can differentiate between the two cases if we wait until - the end of the build. At this point, all the pending children - nodes due to a diamond-shaped DAG will have been properly - built (or will have failed to build). But, the pending - children involved in a cycle will still be in the pending - state. - - The taskmaster removes nodes from the pending_children set as - soon as a pending_children node moves out of the pending - state. This also helps to keep the pending_children set small. - """ - - for n in self.pending_children: - assert n.state in (NODE_PENDING, NODE_EXECUTING), \ - (str(n), StateString[n.state]) - assert len(n.waiting_parents) != 0, (str(n), len(n.waiting_parents)) - for p in n.waiting_parents: - assert p.ref_count > 0, (str(n), str(p), p.ref_count) - - - def trace_message(self, message): - return 'Taskmaster: %s\n' % message - - def trace_node(self, node): - return '<%-10s %-3s %s>' % (StateString[node.get_state()], - node.ref_count, - repr(str(node))) - - def _find_next_ready_node(self): - """ - Finds the next node that is ready to be built. - - This is *the* main guts of the DAG walk. We loop through the - list of candidates, looking for something that has no un-built - children (i.e., that is a leaf Node or has dependencies that are - all leaf Nodes or up-to-date). Candidate Nodes are re-scanned - (both the target Node itself and its sources, which are always - scanned in the context of a given target) to discover implicit - dependencies. A Node that must wait for some children to be - built will be put back on the candidates list after the children - have finished building. A Node that has been put back on the - candidates list in this way may have itself (or its sources) - re-scanned, in order to handle generated header files (e.g.) and - the implicit dependencies therein. - - Note that this method does not do any signature calculation or - up-to-date check itself. All of that is handled by the Task - class. This is purely concerned with the dependency graph walk. - """ - - self.ready_exc = None - - T = self.trace - if T: T.write('\n' + self.trace_message('Looking for a node to evaluate')) - - while 1: - node = self.next_candidate() - if node is None: - if T: T.write(self.trace_message('No candidate anymore.') + '\n') - return None - - node = node.disambiguate() - state = node.get_state() - - # For debugging only: - # - # try: - # self._validate_pending_children() - # except: - # self.ready_exc = sys.exc_info() - # return node - - if CollectStats: - if not hasattr(node, 'stats'): - node.stats = Stats() - StatsNodes.append(node) - S = node.stats - S.considered = S.considered + 1 - else: - S = None - - if T: T.write(self.trace_message(' Considering node %s and its children:' % self.trace_node(node))) - - if state == NODE_NO_STATE: - # Mark this node as being on the execution stack: - node.set_state(NODE_PENDING) - elif state > NODE_PENDING: - # Skip this node if it has already been evaluated: - if S: S.already_handled = S.already_handled + 1 - if T: T.write(self.trace_message(' already handled (executed)')) - continue - - try: - children = node.children() - except SystemExit: - exc_value = sys.exc_info()[1] - e = SCons.Errors.ExplicitExit(node, exc_value.code) - self.ready_exc = (SCons.Errors.ExplicitExit, e) - if T: T.write(self.trace_message(' SystemExit')) - return node - except Exception, e: - # We had a problem just trying to figure out the - # children (like a child couldn't be linked in to a - # VariantDir, or a Scanner threw something). Arrange to - # raise the exception when the Task is "executed." - self.ready_exc = sys.exc_info() - if S: S.problem = S.problem + 1 - if T: T.write(self.trace_message(' exception %s while scanning children.\n' % e)) - return node - - children_not_visited = [] - children_pending = set() - children_not_ready = [] - children_failed = False - - for child in chain(children,node.prerequisites): - childstate = child.get_state() - - if T: T.write(self.trace_message(' ' + self.trace_node(child))) - - if childstate == NODE_NO_STATE: - children_not_visited.append(child) - elif childstate == NODE_PENDING: - children_pending.add(child) - elif childstate == NODE_FAILED: - children_failed = True - - if childstate <= NODE_EXECUTING: - children_not_ready.append(child) - - - # These nodes have not even been visited yet. Add - # them to the list so that on some next pass we can - # take a stab at evaluating them (or their children). - children_not_visited.reverse() - self.candidates.extend(self.order(children_not_visited)) - #if T and children_not_visited: - # T.write(self.trace_message(' adding to candidates: %s' % map(str, children_not_visited))) - # T.write(self.trace_message(' candidates now: %s\n' % map(str, self.candidates))) - - # Skip this node if any of its children have failed. - # - # This catches the case where we're descending a top-level - # target and one of our children failed while trying to be - # built by a *previous* descent of an earlier top-level - # target. - # - # It can also occur if a node is reused in multiple - # targets. One first descends though the one of the - # target, the next time occurs through the other target. - # - # Note that we can only have failed_children if the - # --keep-going flag was used, because without it the build - # will stop before diving in the other branch. - # - # Note that even if one of the children fails, we still - # added the other children to the list of candidate nodes - # to keep on building (--keep-going). - if children_failed: - node.set_state(NODE_FAILED) - - if S: S.child_failed = S.child_failed + 1 - if T: T.write(self.trace_message('****** %s\n' % self.trace_node(node))) - continue - - if children_not_ready: - for child in children_not_ready: - # We're waiting on one or more derived targets - # that have not yet finished building. - if S: S.not_built = S.not_built + 1 - - # Add this node to the waiting parents lists of - # anything we're waiting on, with a reference - # count so we can be put back on the list for - # re-evaluation when they've all finished. - node.ref_count = node.ref_count + child.add_to_waiting_parents(node) - if T: T.write(self.trace_message(' adjusted ref count: %s, child %s' % - (self.trace_node(node), repr(str(child))))) - - if T: - for pc in children_pending: - T.write(self.trace_message(' adding %s to the pending children set\n' % - self.trace_node(pc))) - self.pending_children = self.pending_children | children_pending - - continue - - # Skip this node if it has side-effects that are - # currently being built: - wait_side_effects = False - for se in node.side_effects: - if se.get_state() == NODE_EXECUTING: - se.add_to_waiting_s_e(node) - wait_side_effects = True - - if wait_side_effects: - if S: S.side_effects = S.side_effects + 1 - continue - - # The default when we've gotten through all of the checks above: - # this node is ready to be built. - if S: S.build = S.build + 1 - if T: T.write(self.trace_message('Evaluating %s\n' % - self.trace_node(node))) - - # For debugging only: - # - # try: - # self._validate_pending_children() - # except: - # self.ready_exc = sys.exc_info() - # return node - - return node - - return None - - def next_task(self): - """ - Returns the next task to be executed. - - This simply asks for the next Node to be evaluated, and then wraps - it in the specific Task subclass with which we were initialized. - """ - node = self._find_next_ready_node() - - if node is None: - return None - - tlist = node.get_executor().targets - - task = self.tasker(self, tlist, node in self.original_top, node) - try: - task.make_ready() - except: - # We had a problem just trying to get this task ready (like - # a child couldn't be linked in to a VariantDir when deciding - # whether this node is current). Arrange to raise the - # exception when the Task is "executed." - self.ready_exc = sys.exc_info() - - if self.ready_exc: - task.exception_set(self.ready_exc) - - self.ready_exc = None - - return task - - def will_not_build(self, nodes, node_func=lambda n: None): - """ - Perform clean-up about nodes that will never be built. Invokes - a user defined function on all of these nodes (including all - of their parents). - """ - - T = self.trace - - pending_children = self.pending_children - - to_visit = set(nodes) - pending_children = pending_children - to_visit - - if T: - for n in nodes: - T.write(self.trace_message(' removing node %s from the pending children set\n' % - self.trace_node(n))) - try: - while 1: - try: - node = to_visit.pop() - except AttributeError: - # Python 1.5.2 - if len(to_visit): - node = to_visit[0] - to_visit.remove(node) - else: - break - - node_func(node) - - # Prune recursion by flushing the waiting children - # list immediately. - parents = node.waiting_parents - node.waiting_parents = set() - - to_visit = to_visit | parents - pending_children = pending_children - parents - - for p in parents: - p.ref_count = p.ref_count - 1 - if T: T.write(self.trace_message(' removing parent %s from the pending children set\n' % - self.trace_node(p))) - except KeyError: - # The container to_visit has been emptied. - pass - - # We have the stick back the pending_children list into the - # task master because the python 1.5.2 compatibility does not - # allow us to use in-place updates - self.pending_children = pending_children - - def stop(self): - """ - Stops the current build completely. - """ - self.next_candidate = self.no_next_candidate - - def cleanup(self): - """ - Check for dependency cycles. - """ - if not self.pending_children: - return - - # TODO(1.5) - #nclist = [ (n, find_cycle([n], set())) for n in self.pending_children ] - nclist = map(lambda n: (n, find_cycle([n], set())), self.pending_children) - - # TODO(1.5) - #genuine_cycles = [ - # node for node, cycle in nclist - # if cycle or node.get_state() != NODE_EXECUTED - #] - genuine_cycles = filter(lambda t: t[1] or t[0].get_state() != NODE_EXECUTED, nclist) - if not genuine_cycles: - # All of the "cycles" found were single nodes in EXECUTED state, - # which is to say, they really weren't cycles. Just return. - return - - desc = 'Found dependency cycle(s):\n' - for node, cycle in nclist: - if cycle: - desc = desc + " " + string.join(map(str, cycle), " -> ") + "\n" - else: - desc = desc + \ - " Internal Error: no cycle found for node %s (%s) in state %s\n" % \ - (node, repr(node), StateString[node.get_state()]) - - raise SCons.Errors.UserError, desc diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Taskmaster.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Taskmaster.pyc deleted file mode 100644 index b4c8e3c3db4a91a82b812e2a8dd2bcb1ead94176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31859 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 NV<+B@@E330`vL)Cr?>zB diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.py deleted file mode 100644 index e1cc04d1e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.py +++ /dev/null @@ -1,67 +0,0 @@ -"""SCons.Tool.CVS.py - -Tool-specific initialization for CVS. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/CVS.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Action -import SCons.Builder -import SCons.Util - -def generate(env): - """Add a Builder factory function and construction variables for - CVS to an Environment.""" - - def CVSFactory(repos, module='', env=env): - """ """ - # fail if repos is not an absolute path name? - if module != '': - # Don't use os.path.join() because the name we fetch might - # be across a network and must use POSIX slashes as separators. - module = module + '/' - env['CVSCOM'] = '$CVS $CVSFLAGS co $CVSCOFLAGS -d ${TARGET.dir} $CVSMODULE${TARGET.posix}' - act = SCons.Action.Action('$CVSCOM', '$CVSCOMSTR') - return SCons.Builder.Builder(action = act, - env = env, - CVSREPOSITORY = repos, - CVSMODULE = module) - - #setattr(env, 'CVS', CVSFactory) - env.CVS = CVSFactory - - env['CVS'] = 'cvs' - env['CVSFLAGS'] = SCons.Util.CLVar('-d $CVSREPOSITORY') - env['CVSCOFLAGS'] = SCons.Util.CLVar('') - env['CVSCOM'] = '$CVS $CVSFLAGS co $CVSCOFLAGS ${TARGET.posix}' - -def exists(env): - return env.Detect('cvs') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/CVS.pyc deleted file mode 100644 index 4561388b7695911c3742eb380098296fa25256f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1814 zcmcIkZI9bT5MDbk*O)sFkV*xgR-%F+5jzd7bd(d~nqEt#dqGZG!3h+(_TFU=XB~Mr zp@H6~>rX`Dhwua7nb{mYfy5_j%j4Pc%`fQvD3O*oK5jo@=O_3qnc~w zQkmUPBdbc}qS9u{O{)Tx*)IuQohQniX`>PjO2|L)80F_XcL#FN@9!jc2Fai=2ZQ_f zzPNvHAZ-ph^q;tn@&H+g`v#sNW&8mG%)f*T#j8+UKNlRRM z@Ah?TaAn;PyTuKT>OhOomA7b@?;!SyLT2*8LYIZAqLb zQWB32_8yM_ixZ87wE*iIHEzBrQ7m>>HfFJqbK9z^m|9dAeG;zOMb2e!E?kJ_Iw7~XWgVO z5z1b*LP6~1r#+=m-VFP8p$iraKAG2gnK_lX**q~-p?b@Hd^g@n9EQ~$_R{A!yH^mg~&VLio zPJ7r*2+`c$?u1eBK5jnuS7(1n9yB00^yhr~aim9F>QTB4dzU=9+Ygn)kBHZd;!Odd zIae>Vb@l-?ORR~YORyZx<784)`DEe<)?`wvrM4LMwZZ>B{q*`i5H@dJ4>I@LTc|(j kO*o{tAYS8P?f;!$Du36Xm#^sbaaY 0 - s = suffixes[0] - sup = string.upper(s) - upper_suffixes = map(string.upper, suffixes) - if SCons.Util.case_sensitive_suffixes(s, sup): - ppsuffixes.extend(upper_suffixes) - else: - suffixes.extend(upper_suffixes) - -def CreateDialectActions(dialect): - """Create dialect specific actions.""" - CompAction = SCons.Action.Action('$%sCOM ' % dialect, '$%sCOMSTR' % dialect) - CompPPAction = SCons.Action.Action('$%sPPCOM ' % dialect, '$%sPPCOMSTR' % dialect) - ShCompAction = SCons.Action.Action('$SH%sCOM ' % dialect, '$SH%sCOMSTR' % dialect) - ShCompPPAction = SCons.Action.Action('$SH%sPPCOM ' % dialect, '$SH%sPPCOMSTR' % dialect) - - return CompAction, CompPPAction, ShCompAction, ShCompPPAction - -def DialectAddToEnv(env, dialect, suffixes, ppsuffixes, support_module = 0): - """Add dialect specific construction variables.""" - ComputeFortranSuffixes(suffixes, ppsuffixes) - - fscan = SCons.Scanner.Fortran.FortranScan("%sPATH" % dialect) - - for suffix in suffixes + ppsuffixes: - SCons.Tool.SourceFileScanner.add_scanner(suffix, fscan) - - env.AppendUnique(FORTRANSUFFIXES = suffixes + ppsuffixes) - - compaction, compppaction, shcompaction, shcompppaction = \ - CreateDialectActions(dialect) - - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - for suffix in suffixes: - static_obj.add_action(suffix, compaction) - shared_obj.add_action(suffix, shcompaction) - static_obj.add_emitter(suffix, FortranEmitter) - shared_obj.add_emitter(suffix, ShFortranEmitter) - - for suffix in ppsuffixes: - static_obj.add_action(suffix, compppaction) - shared_obj.add_action(suffix, shcompppaction) - static_obj.add_emitter(suffix, FortranEmitter) - shared_obj.add_emitter(suffix, ShFortranEmitter) - - if not env.has_key('%sFLAGS' % dialect): - env['%sFLAGS' % dialect] = SCons.Util.CLVar('') - - if not env.has_key('SH%sFLAGS' % dialect): - env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect) - - # If a tool does not define fortran prefix/suffix for include path, use C ones - if not env.has_key('INC%sPREFIX' % dialect): - env['INC%sPREFIX' % dialect] = '$INCPREFIX' - - if not env.has_key('INC%sSUFFIX' % dialect): - env['INC%sSUFFIX' % dialect] = '$INCSUFFIX' - - env['_%sINCFLAGS' % dialect] = '$( ${_concat(INC%sPREFIX, %sPATH, INC%sSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' % (dialect, dialect, dialect) - - if support_module == 1: - env['%sCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect) - env['%sPPCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect) - env['SH%sCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect) - env['SH%sPPCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect) - else: - env['%sCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect) - env['%sPPCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect) - env['SH%sCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect) - env['SH%sPPCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect) - -def add_fortran_to_env(env): - """Add Builders and construction variables for Fortran to an Environment.""" - try: - FortranSuffixes = env['FORTRANFILESUFFIXES'] - except KeyError: - FortranSuffixes = ['.f', '.for', '.ftn'] - - #print "Adding %s to fortran suffixes" % FortranSuffixes - try: - FortranPPSuffixes = env['FORTRANPPFILESUFFIXES'] - except KeyError: - FortranPPSuffixes = ['.fpp', '.FPP'] - - DialectAddToEnv(env, "FORTRAN", FortranSuffixes, - FortranPPSuffixes, support_module = 1) - - env['FORTRANMODPREFIX'] = '' # like $LIBPREFIX - env['FORTRANMODSUFFIX'] = '.mod' # like $LIBSUFFIX - - env['FORTRANMODDIR'] = '' # where the compiler should place .mod files - env['FORTRANMODDIRPREFIX'] = '' # some prefix to $FORTRANMODDIR - similar to $INCPREFIX - env['FORTRANMODDIRSUFFIX'] = '' # some suffix to $FORTRANMODDIR - similar to $INCSUFFIX - env['_FORTRANMODFLAG'] = '$( ${_concat(FORTRANMODDIRPREFIX, FORTRANMODDIR, FORTRANMODDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' - -def add_f77_to_env(env): - """Add Builders and construction variables for f77 to an Environment.""" - try: - F77Suffixes = env['F77FILESUFFIXES'] - except KeyError: - F77Suffixes = ['.f77'] - - #print "Adding %s to f77 suffixes" % F77Suffixes - try: - F77PPSuffixes = env['F77PPFILESUFFIXES'] - except KeyError: - F77PPSuffixes = [] - - DialectAddToEnv(env, "F77", F77Suffixes, F77PPSuffixes) - -def add_f90_to_env(env): - """Add Builders and construction variables for f90 to an Environment.""" - try: - F90Suffixes = env['F90FILESUFFIXES'] - except KeyError: - F90Suffixes = ['.f90'] - - #print "Adding %s to f90 suffixes" % F90Suffixes - try: - F90PPSuffixes = env['F90PPFILESUFFIXES'] - except KeyError: - F90PPSuffixes = [] - - DialectAddToEnv(env, "F90", F90Suffixes, F90PPSuffixes, - support_module = 1) - -def add_f95_to_env(env): - """Add Builders and construction variables for f95 to an Environment.""" - try: - F95Suffixes = env['F95FILESUFFIXES'] - except KeyError: - F95Suffixes = ['.f95'] - - #print "Adding %s to f95 suffixes" % F95Suffixes - try: - F95PPSuffixes = env['F95PPFILESUFFIXES'] - except KeyError: - F95PPSuffixes = [] - - DialectAddToEnv(env, "F95", F95Suffixes, F95PPSuffixes, - support_module = 1) - -def add_all_to_env(env): - """Add builders and construction variables for all supported fortran - dialects.""" - add_fortran_to_env(env) - add_f77_to_env(env) - add_f90_to_env(env) - add_f95_to_env(env) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/FortranCommon.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/FortranCommon.pyc deleted file mode 100644 index 91c4c403d026d8bcffbbc39f06c5d80f714ed585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9015 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 I8_o^?8&;6%;s5{u diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.py deleted file mode 100644 index 12c31f37f..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.py +++ /dev/null @@ -1,317 +0,0 @@ -"""SCons.Tool.JavaCommon - -Stuff for processing Java. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/JavaCommon.py 3842 2008/12/20 22:59:52 scons" - -import os -import os.path -import re -import string - -java_parsing = 1 - -default_java_version = '1.4' - -if java_parsing: - # Parse Java files for class names. - # - # This is a really cool parser from Charles Crain - # that finds appropriate class names in Java source. - - # A regular expression that will find, in a java file: - # newlines; - # double-backslashes; - # a single-line comment "//"; - # single or double quotes preceeded by a backslash; - # single quotes, double quotes, open or close braces, semi-colons, - # periods, open or close parentheses; - # floating-point numbers; - # any alphanumeric token (keyword, class name, specifier); - # any alphanumeric token surrounded by angle brackets (generics); - # the multi-line comment begin and end tokens /* and */; - # array declarations "[]". - _reToken = re.compile(r'(\n|\\\\|//|\\[\'"]|[\'"\{\}\;\.\(\)]|' + - r'\d*\.\d*|[A-Za-z_][\w\$\.]*|<[A-Za-z_]\w+>|' + - r'/\*|\*/|\[\])') - - class OuterState: - """The initial state for parsing a Java file for classes, - interfaces, and anonymous inner classes.""" - def __init__(self, version=default_java_version): - - if not version in ('1.1', '1.2', '1.3','1.4', '1.5', '1.6'): - msg = "Java version %s not supported" % version - raise NotImplementedError, msg - - self.version = version - self.listClasses = [] - self.listOutputs = [] - self.stackBrackets = [] - self.brackets = 0 - self.nextAnon = 1 - self.localClasses = [] - self.stackAnonClassBrackets = [] - self.anonStacksStack = [[0]] - self.package = None - - def trace(self): - pass - - def __getClassState(self): - try: - return self.classState - except AttributeError: - ret = ClassState(self) - self.classState = ret - return ret - - def __getPackageState(self): - try: - return self.packageState - except AttributeError: - ret = PackageState(self) - self.packageState = ret - return ret - - def __getAnonClassState(self): - try: - return self.anonState - except AttributeError: - self.outer_state = self - ret = SkipState(1, AnonClassState(self)) - self.anonState = ret - return ret - - def __getSkipState(self): - try: - return self.skipState - except AttributeError: - ret = SkipState(1, self) - self.skipState = ret - return ret - - def __getAnonStack(self): - return self.anonStacksStack[-1] - - def openBracket(self): - self.brackets = self.brackets + 1 - - def closeBracket(self): - self.brackets = self.brackets - 1 - if len(self.stackBrackets) and \ - self.brackets == self.stackBrackets[-1]: - self.listOutputs.append(string.join(self.listClasses, '$')) - self.localClasses.pop() - self.listClasses.pop() - self.anonStacksStack.pop() - self.stackBrackets.pop() - if len(self.stackAnonClassBrackets) and \ - self.brackets == self.stackAnonClassBrackets[-1]: - self.__getAnonStack().pop() - self.stackAnonClassBrackets.pop() - - def parseToken(self, token): - if token[:2] == '//': - return IgnoreState('\n', self) - elif token == '/*': - return IgnoreState('*/', self) - elif token == '{': - self.openBracket() - elif token == '}': - self.closeBracket() - elif token in [ '"', "'" ]: - return IgnoreState(token, self) - elif token == "new": - # anonymous inner class - if len(self.listClasses) > 0: - return self.__getAnonClassState() - return self.__getSkipState() # Skip the class name - elif token in ['class', 'interface', 'enum']: - if len(self.listClasses) == 0: - self.nextAnon = 1 - self.stackBrackets.append(self.brackets) - return self.__getClassState() - elif token == 'package': - return self.__getPackageState() - elif token == '.': - # Skip the attribute, it might be named "class", in which - # case we don't want to treat the following token as - # an inner class name... - return self.__getSkipState() - return self - - def addAnonClass(self): - """Add an anonymous inner class""" - if self.version in ('1.1', '1.2', '1.3', '1.4'): - clazz = self.listClasses[0] - self.listOutputs.append('%s$%d' % (clazz, self.nextAnon)) - elif self.version in ('1.5', '1.6'): - self.stackAnonClassBrackets.append(self.brackets) - className = [] - className.extend(self.listClasses) - self.__getAnonStack()[-1] = self.__getAnonStack()[-1] + 1 - for anon in self.__getAnonStack(): - className.append(str(anon)) - self.listOutputs.append(string.join(className, '$')) - - self.nextAnon = self.nextAnon + 1 - self.__getAnonStack().append(0) - - def setPackage(self, package): - self.package = package - - class AnonClassState: - """A state that looks for anonymous inner classes.""" - def __init__(self, old_state): - # outer_state is always an instance of OuterState - self.outer_state = old_state.outer_state - self.old_state = old_state - self.brace_level = 0 - def parseToken(self, token): - # This is an anonymous class if and only if the next - # non-whitespace token is a bracket. Everything between - # braces should be parsed as normal java code. - if token[:2] == '//': - return IgnoreState('\n', self) - elif token == '/*': - return IgnoreState('*/', self) - elif token == '\n': - return self - elif token[0] == '<' and token[-1] == '>': - return self - elif token == '(': - self.brace_level = self.brace_level + 1 - return self - if self.brace_level > 0: - if token == 'new': - # look further for anonymous inner class - return SkipState(1, AnonClassState(self)) - elif token in [ '"', "'" ]: - return IgnoreState(token, self) - elif token == ')': - self.brace_level = self.brace_level - 1 - return self - if token == '{': - self.outer_state.addAnonClass() - return self.old_state.parseToken(token) - - class SkipState: - """A state that will skip a specified number of tokens before - reverting to the previous state.""" - def __init__(self, tokens_to_skip, old_state): - self.tokens_to_skip = tokens_to_skip - self.old_state = old_state - def parseToken(self, token): - self.tokens_to_skip = self.tokens_to_skip - 1 - if self.tokens_to_skip < 1: - return self.old_state - return self - - class ClassState: - """A state we go into when we hit a class or interface keyword.""" - def __init__(self, outer_state): - # outer_state is always an instance of OuterState - self.outer_state = outer_state - def parseToken(self, token): - # the next non-whitespace token should be the name of the class - if token == '\n': - return self - # If that's an inner class which is declared in a method, it - # requires an index prepended to the class-name, e.g. - # 'Foo$1Inner' (Tigris Issue 2087) - if self.outer_state.localClasses and \ - self.outer_state.stackBrackets[-1] > \ - self.outer_state.stackBrackets[-2]+1: - locals = self.outer_state.localClasses[-1] - try: - idx = locals[token] - locals[token] = locals[token]+1 - except KeyError: - locals[token] = 1 - token = str(locals[token]) + token - self.outer_state.localClasses.append({}) - self.outer_state.listClasses.append(token) - self.outer_state.anonStacksStack.append([0]) - return self.outer_state - - class IgnoreState: - """A state that will ignore all tokens until it gets to a - specified token.""" - def __init__(self, ignore_until, old_state): - self.ignore_until = ignore_until - self.old_state = old_state - def parseToken(self, token): - if self.ignore_until == token: - return self.old_state - return self - - class PackageState: - """The state we enter when we encounter the package keyword. - We assume the next token will be the package name.""" - def __init__(self, outer_state): - # outer_state is always an instance of OuterState - self.outer_state = outer_state - def parseToken(self, token): - self.outer_state.setPackage(token) - return self.outer_state - - def parse_java_file(fn, version=default_java_version): - return parse_java(open(fn, 'r').read(), version) - - def parse_java(contents, version=default_java_version, trace=None): - """Parse a .java file and return a double of package directory, - plus a list of .class files that compiling that .java file will - produce""" - package = None - initial = OuterState(version) - currstate = initial - for token in _reToken.findall(contents): - # The regex produces a bunch of groups, but only one will - # have anything in it. - currstate = currstate.parseToken(token) - if trace: trace(token, currstate) - if initial.package: - package = string.replace(initial.package, '.', os.sep) - return (package, initial.listOutputs) - -else: - # Don't actually parse Java files for class names. - # - # We might make this a configurable option in the future if - # Java-file parsing takes too long (although it shouldn't relative - # to how long the Java compiler itself seems to take...). - - def parse_java_file(fn): - """ "Parse" a .java file. - - This actually just splits the file name, so the assumption here - is that the file name matches the public class name, and that - the path to the file is the same as the package name. - """ - return os.path.split(file) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/JavaCommon.pyc deleted file mode 100644 index e7cb97e4f44a468e9ab92df988e6308f20cb80d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11669 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.py deleted file mode 100644 index 97049f646..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.py +++ /dev/null @@ -1,98 +0,0 @@ -"""SCons.Tool.Perforce.py - -Tool-specific initialization for Perforce Source Code Management system. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/Perforce.py 3842 2008/12/20 22:59:52 scons" - -import os - -import SCons.Action -import SCons.Builder -import SCons.Node.FS -import SCons.Util - -# This function should maybe be moved to SCons.Util? -from SCons.Tool.PharLapCommon import addPathIfNotExists - - - -# Variables that we want to import from the base OS environment. -_import_env = [ 'P4PORT', 'P4CLIENT', 'P4USER', 'USER', 'USERNAME', 'P4PASSWD', - 'P4CHARSET', 'P4LANGUAGE', 'SYSTEMROOT' ] - -PerforceAction = SCons.Action.Action('$P4COM', '$P4COMSTR') - -def generate(env): - """Add a Builder factory function and construction variables for - Perforce to an Environment.""" - - def PerforceFactory(env=env): - """ """ - return SCons.Builder.Builder(action = PerforceAction, env = env) - - #setattr(env, 'Perforce', PerforceFactory) - env.Perforce = PerforceFactory - - env['P4'] = 'p4' - env['P4FLAGS'] = SCons.Util.CLVar('') - env['P4COM'] = '$P4 $P4FLAGS sync $TARGET' - try: - environ = env['ENV'] - except KeyError: - environ = {} - env['ENV'] = environ - - # Perforce seems to use the PWD environment variable rather than - # calling getcwd() for itself, which is odd. If no PWD variable - # is present, p4 WILL call getcwd, but this seems to cause problems - # with good ol' Windows's tilde-mangling for long file names. - environ['PWD'] = env.Dir('#').get_abspath() - - for var in _import_env: - v = os.environ.get(var) - if v: - environ[var] = v - - if SCons.Util.can_read_reg: - # If we can read the registry, add the path to Perforce to our environment. - try: - k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE, - 'Software\\Perforce\\environment') - val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT') - addPathIfNotExists(environ, 'PATH', val) - except SCons.Util.RegError: - # Can't detect where Perforce is, hope the user has it set in the - # PATH. - pass - -def exists(env): - return env.Detect('p4') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/Perforce.pyc deleted file mode 100644 index 1959a96eb15d4e37e9791c4b5f3c81901b8e1d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2497 zcmcguUvt_<5Z{w9HZu56+H~sabmr1#S~?knLr5m|csik&*q#8U5{VN}G8%WwkyhDcyAT~9FQzkgY8|3ZZNSt~UCZ%o^1*MLR z&!V^|OXHbkkz_j=%btJc_qZSW%J%~QcTf3I$We_iw7C;aa1pOZLh_audVM*Pq2kFb zQF2tmodz2wK=v{Das!wYNaWv@<@GW^?hB8KnKM9K>DgI<7GQhpa`;k($mcx7kjVfk*QT-o83%I^K2ckfqt(!<>O|KQaw zGTcg0Ry`p)o*EpTwIkKI@Dr7&EQ&kT&avH9E1Io0j~eanT>jK)*eZi^&5!~y?OLlb z*Y4CD=VV_|k#(x|!>YE1_j6>vZiN zxk)CL@TudI?4smSm+LzQR}3!k25?bgXt@b{iowu;p$Q@b*LoUDaSv;e)-A){Y)x}3 zuytj?Nq7q~7|yu`@fa9mJ^+d@)7@5JFJ$l>7Y?zSbF|$s3)koZg2RHni+iA!VgJ<~ zxH195ALd|a!KF!xR~fj>K>VI4ZHJz{c@KD>%pF{X_yL=>U_Q(*m;wy3>Q@O6S4#`w zI$WX$c@n-vc^0mgL2YP13UG-&nZQooJYbpmZksxy3I@bb`aHzY*APeRl*3m@YC>?2 z|2pvlA!B~#^;8tk_}L^(Yt9P=r)p90Bo$1(*!NxsG9fTo9Ir*m5f;3VH^QkOMqh`j*iVClUqm>W)bs;U50_u{RQ)S4Te)RX_oZ4t}%25>t2ymhSPLb??l+gd;`q= zR%^&F{HW@OFQ?jf^<8p}L-=6N2s-=fzh4@Lz8XGCy4x*kH zY~L+aN<067F-3V?7=D~4Zx=<0fdmYU4q#l>uTB-?#_-7PPW5rKcHro2V2yKpv;dn= z*yFdmHTwXeLZNCb=nOR4&va_O*Q3tKe)28OJJFeX>&5cr!ikrdsYU+hU^{9ff)HIA ztesl-u&vu@iqd)Sv6C+j$VpO6rD)V3*A_H0!d#BY}r2^%aH6`Xp4h$Idid@>dtidr18RS z9@lG4w^gej9<>`f?YQW-iHv8@ykH_57dCE8&;!5;?QT&I$e_JJ?X^x zZ`haY3-bf2sJiO32OS>uCfyIQMEkmul>saaxytwI&>(OWwg}PwuTV#)%om(P6+dD)mNIsT=<~~CMp?cU$|2F(WpS*-z X&TeJ#%=1kD%#EcRY~8qN= 0: - val = val[:idx] - - return os.path.normpath(val) - except SCons.Util.RegError: - raise SCons.Errors.UserError, "Cannot find Phar Lap ETS path in the registry. Is it installed properly?" - -REGEX_ETS_VER = re.compile(r'#define\s+ETS_VER\s+([0-9]+)') - -def getPharLapVersion(): - """Returns the version of the installed ETS Tool Suite as a - decimal number. This version comes from the ETS_VER #define in - the embkern.h header. For example, '#define ETS_VER 1010' (which - is what Phar Lap 10.1 defines) would cause this method to return - 1010. Phar Lap 9.1 does not have such a #define, but this method - will return 910 as a default. - - Raises UserError if no installed version of Phar Lap can - be found.""" - - include_path = os.path.join(getPharLapPath(), os.path.normpath("include/embkern.h")) - if not os.path.exists(include_path): - raise SCons.Errors.UserError, "Cannot find embkern.h in ETS include directory.\nIs Phar Lap ETS installed properly?" - mo = REGEX_ETS_VER.search(open(include_path, 'r').read()) - if mo: - return int(mo.group(1)) - # Default return for Phar Lap 9.1 - return 910 - -def addPathIfNotExists(env_dict, key, path, sep=os.pathsep): - """This function will take 'key' out of the dictionary - 'env_dict', then add the path 'path' to that key if it is not - already there. This treats the value of env_dict[key] as if it - has a similar format to the PATH variable...a list of paths - separated by tokens. The 'path' will get added to the list if it - is not already there.""" - try: - is_list = 1 - paths = env_dict[key] - if not SCons.Util.is_List(env_dict[key]): - paths = string.split(paths, sep) - is_list = 0 - if not os.path.normcase(path) in map(os.path.normcase, paths): - paths = [ path ] + paths - if is_list: - env_dict[key] = paths - else: - env_dict[key] = string.join(paths, sep) - except KeyError: - env_dict[key] = path - -def addPharLapPaths(env): - """This function adds the path to the Phar Lap binaries, includes, - and libraries, if they are not already there.""" - ph_path = getPharLapPath() - - try: - env_dict = env['ENV'] - except KeyError: - env_dict = {} - env['ENV'] = env_dict - addPathIfNotExists(env_dict, 'PATH', - os.path.join(ph_path, 'bin')) - addPathIfNotExists(env_dict, 'INCLUDE', - os.path.join(ph_path, 'include')) - addPathIfNotExists(env_dict, 'LIB', - os.path.join(ph_path, 'lib')) - addPathIfNotExists(env_dict, 'LIB', - os.path.join(ph_path, os.path.normpath('lib/vclib'))) - - env['PHARLAP_PATH'] = getPharLapPath() - env['PHARLAP_VERSION'] = str(getPharLapVersion()) - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/PharLapCommon.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/PharLapCommon.pyc deleted file mode 100644 index c4d211add077c7aeb2ca0d8f0f4869f31ed6d50b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4338 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 WwyQK)>M!jaJ~{kEsZ`og>i#bbOiix< diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixc++.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixc++.py deleted file mode 100644 index 5db91f768..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixc++.py +++ /dev/null @@ -1,76 +0,0 @@ -"""SCons.Tool.aixc++ - -Tool-specific initialization for IBM xlC / Visual Age C++ compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/aixc++.py 3842 2008/12/20 22:59:52 scons" - -import os.path - -import SCons.Platform.aix - -cplusplus = __import__('c++', globals(), locals(), []) - -packages = ['vacpp.cmp.core', 'vacpp.cmp.batch', 'vacpp.cmp.C', 'ibmcxx.cmp'] - -def get_xlc(env): - xlc = env.get('CXX', 'xlC') - xlc_r = env.get('SHCXX', 'xlC_r') - return SCons.Platform.aix.get_xlc(env, xlc, xlc_r, packages) - -def smart_cxxflags(source, target, env, for_signature): - build_dir = env.GetBuildPath() - if build_dir: - return '-qtempinc=' + os.path.join(build_dir, 'tempinc') - return '' - -def generate(env): - """Add Builders and construction variables for xlC / Visual Age - suite to an Environment.""" - path, _cxx, _shcxx, version = get_xlc(env) - if path: - _cxx = os.path.join(path, _cxx) - _shcxx = os.path.join(path, _shcxx) - - cplusplus.generate(env) - - env['CXX'] = _cxx - env['SHCXX'] = _shcxx - env['CXXVERSION'] = version - env['SHOBJSUFFIX'] = '.pic.o' - -def exists(env): - path, _cxx, _shcxx, version = get_xlc(env) - if path and _cxx: - xlc = os.path.join(path, _cxx) - if os.path.exists(xlc): - return xlc - return None diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixcc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixcc.py deleted file mode 100644 index 3c0b9d768..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixcc.py +++ /dev/null @@ -1,68 +0,0 @@ -"""SCons.Tool.aixcc - -Tool-specific initialization for IBM xlc / Visual Age C compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/aixcc.py 3842 2008/12/20 22:59:52 scons" - -import os.path - -import SCons.Platform.aix - -import cc - -packages = ['vac.C', 'ibmcxx.cmp'] - -def get_xlc(env): - xlc = env.get('CC', 'xlc') - xlc_r = env.get('SHCC', 'xlc_r') - return SCons.Platform.aix.get_xlc(env, xlc, xlc_r, packages) - -def generate(env): - """Add Builders and construction variables for xlc / Visual Age - suite to an Environment.""" - path, _cc, _shcc, version = get_xlc(env) - if path: - _cc = os.path.join(path, _cc) - _shcc = os.path.join(path, _shcc) - - cc.generate(env) - - env['CC'] = _cc - env['SHCC'] = _shcc - env['CCVERSION'] = version - -def exists(env): - path, _cc, _shcc, version = get_xlc(env) - if path and _cc: - xlc = os.path.join(path, _cc) - if os.path.exists(xlc): - return xlc - return None diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixf77.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixf77.py deleted file mode 100644 index 794f7e220..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixf77.py +++ /dev/null @@ -1,74 +0,0 @@ -"""engine.SCons.Tool.aixf77 - -Tool-specific initialization for IBM Visual Age f77 Fortran compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/aixf77.py 3842 2008/12/20 22:59:52 scons" - -import os.path - -#import SCons.Platform.aix - -import f77 - -# It would be good to look for the AIX F77 package the same way we're now -# looking for the C and C++ packages. This should be as easy as supplying -# the correct package names in the following list and uncommenting the -# SCons.Platform.aix_get_xlc() call the in the function below. -packages = [] - -def get_xlf77(env): - xlf77 = env.get('F77', 'xlf77') - xlf77_r = env.get('SHF77', 'xlf77_r') - #return SCons.Platform.aix.get_xlc(env, xlf77, xlf77_r, packages) - return (None, xlf77, xlf77_r, None) - -def generate(env): - """ - Add Builders and construction variables for the Visual Age FORTRAN - compiler to an Environment. - """ - path, _f77, _shf77, version = get_xlf77(env) - if path: - _f77 = os.path.join(path, _f77) - _shf77 = os.path.join(path, _shf77) - - f77.generate(env) - - env['F77'] = _f77 - env['SHF77'] = _shf77 - -def exists(env): - path, _f77, _shf77, version = get_xlf77(env) - if path and _f77: - xlf77 = os.path.join(path, _f77) - if os.path.exists(xlf77): - return xlf77 - return None diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixlink.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixlink.py deleted file mode 100644 index 3a1182a64..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/aixlink.py +++ /dev/null @@ -1,70 +0,0 @@ -"""SCons.Tool.aixlink - -Tool-specific initialization for the IBM Visual Age linker. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/aixlink.py 3842 2008/12/20 22:59:52 scons" - -import os -import os.path - -import SCons.Util - -import aixcc -import link - -cplusplus = __import__('c++', globals(), locals(), []) - -def smart_linkflags(source, target, env, for_signature): - if cplusplus.iscplusplus(source): - build_dir = env.subst('$BUILDDIR', target=target, source=source) - if build_dir: - return '-qtempinc=' + os.path.join(build_dir, 'tempinc') - return '' - -def generate(env): - """ - Add Builders and construction variables for Visual Age linker to - an Environment. - """ - link.generate(env) - - env['SMARTLINKFLAGS'] = smart_linkflags - env['LINKFLAGS'] = SCons.Util.CLVar('$SMARTLINKFLAGS') - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -qmkshrobj -qsuppress=1501-218') - env['SHLIBSUFFIX'] = '.a' - -def exists(env): - path, _cc, _shcc, version = aixcc.get_xlc(env) - if path and _cc: - xlc = os.path.join(path, _cc) - if os.path.exists(xlc): - return xlc - return None diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.py deleted file mode 100644 index eb8df8caf..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.py +++ /dev/null @@ -1,65 +0,0 @@ -"""SCons.Tool.applelink - -Tool-specific initialization for the Apple gnu-like linker. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/applelink.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util - -# Even though the Mac is based on the GNU toolchain, it doesn't understand -# the -rpath option, so we use the "link" tool instead of "gnulink". -import link - -def generate(env): - """Add Builders and construction variables for applelink to an - Environment.""" - link.generate(env) - - env['FRAMEWORKPATHPREFIX'] = '-F' - env['_FRAMEWORKPATH'] = '${_concat(FRAMEWORKPATHPREFIX, FRAMEWORKPATH, "", __env__)}' - env['_FRAMEWORKS'] = '${_concat("-framework ", FRAMEWORKS, "", __env__)}' - env['LINKCOM'] = env['LINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS' - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -dynamiclib') - env['SHLINKCOM'] = env['SHLINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS' - - # override the default for loadable modules, which are different - # on OS X than dynamic shared libs. echoing what XCode does for - # pre/suffixes: - env['LDMODULEPREFIX'] = '' - env['LDMODULESUFFIX'] = '' - env['LDMODULEFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -bundle') - env['LDMODULECOM'] = '$LDMODULE -o ${TARGET} $LDMODULEFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS' - - - -def exists(env): - return env['PLATFORM'] == 'darwin' diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/applelink.pyc deleted file mode 100644 index a886fc197ae15eef3adb7709779840349b01709a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1797 zcmcH)+in_1be3CUY^RA+xyswfLM@5RE+L8Jx>gl}Awl6{Ex4`xvRdzq&Dg^%+8JOs_k1A&6zW2&iyiE|J*JXzWlu#k=ri=`)gSG5C9|O44^~K z9Kte$Wr@s?v+M%Tk+U3OIr1y8QOwE zOnqhOIj5nTQ^h%>CZ=LMi4y~=gr?(|O+gtG36G4NyT!JlH$qA})l;hlWK({W9VPMf za%7#j3s)9a1NHs}zz}lfke>aP-l$3nF`5xqM;^?Vq7MfrumwMi3ran*S6Hl%wWwzRiyAW z)l4L@8gpe_jXhauna8lT{CcZTTvL!-vJU>KX>(1}z}$m#r`>zs=y$aX zI4!N)Sv?PE=}vL0Q-3?qyXXbV+as;8xeCW3lH%N;rNO)9o!MBP!4~ugGzx~*Iqvq4 zPdm*tQ){HbX$zCL16->%&Zmk=Znjs1Q)i}@@m3$L#I*EbSohyHhaYKaVJ7vnH0YoD zjV1&XblPu@+x{&XPYZMzD%SD;(_mv=Sb*qyw#$Qn#ZeF#3_J)D zJ`)-qMj#Y{kUpJQ3?KW-$L6&u@^Pf^{Qgwsun9a${{g2^$DBX^|o|(i~7?4(vK^B2i>TaU4KMghXqoDlXQrJK#a%S!-tO z#8qzXDTn@hJ?C%eAJBep76?(U+10%H_RV{5-;Zy%{_jfMeEiRwoLyZt>@Tt09z?;| zDP+V>BUaQ{QD?fwPV3jWaSJa5++csfrOAqg02aw*&}ve=&k%!tX4Tl`fss z*=2*8jT6!~SQjH8)C5`#=nl|QKr!p$=yHJ-cgewiB0$E=w}Y)*2fGKy)o{MXx&~%H zV5aveuO39NDEOKsWN z1;&S@0s(vj?nDB=4v)tSG@~1Ctm5`)<66W9igmVOAnH@hz_APX=W{8 z7KGaeN+(v$5Ha=RNovYMZq3@svt&E zB|j+V-8O}$99Yz%x&obs!=lWGL%$5gaA@UBIeffO+=HU}ykE<6G1cB>RFRKw^kH~k o9%)V)wI}-t;!8CFeb^dO?(Slzj7Hv$h=Jt}m_r4{U{EZvX%Q diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.py deleted file mode 100644 index 623c8d75c..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.py +++ /dev/null @@ -1,72 +0,0 @@ -"""SCons.Tool.as - -Tool-specific initialization for as, the generic Posix assembler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/as.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Defaults -import SCons.Tool -import SCons.Util - -assemblers = ['as'] - -ASSuffixes = ['.s', '.asm', '.ASM'] -ASPPSuffixes = ['.spp', '.SPP', '.sx'] -if SCons.Util.case_sensitive_suffixes('.s', '.S'): - ASPPSuffixes.extend(['.S']) -else: - ASSuffixes.extend(['.S']) - -def generate(env): - """Add Builders and construction variables for as to an Environment.""" - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - for suffix in ASSuffixes: - static_obj.add_action(suffix, SCons.Defaults.ASAction) - shared_obj.add_action(suffix, SCons.Defaults.ASAction) - static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter) - shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter) - - for suffix in ASPPSuffixes: - static_obj.add_action(suffix, SCons.Defaults.ASPPAction) - shared_obj.add_action(suffix, SCons.Defaults.ASPPAction) - static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter) - shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter) - - env['AS'] = env.Detect(assemblers) or 'as' - env['ASFLAGS'] = SCons.Util.CLVar('') - env['ASCOM'] = '$AS $ASFLAGS -o $TARGET $SOURCES' - env['ASPPFLAGS'] = '$ASFLAGS' - env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES' - -def exists(env): - return env.Detect(assemblers) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/as.pyc deleted file mode 100644 index 78b892a3004156e742add05f4e8210d93fa9d9d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2088 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 D@L+|C diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.py deleted file mode 100644 index ef1249d4c..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.py +++ /dev/null @@ -1,108 +0,0 @@ -"""SCons.Tool.cc - -Tool-specific initialization for generic Posix C compilers. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/cc.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Tool -import SCons.Defaults -import SCons.Util - -CSuffixes = ['.c', '.m'] -if not SCons.Util.case_sensitive_suffixes('.c', '.C'): - CSuffixes.append('.C') - -def add_common_cc_variables(env): - """ - Add underlying common "C compiler" variables that - are used by multiple tools (specifically, c++). - """ - if not env.has_key('_CCCOMCOM'): - env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS' - # It's a hack to test for darwin here, but the alternative - # of creating an applecc.py to contain this seems overkill. - # Maybe someday the Apple platform will require more setup and - # this logic will be moved. - env['FRAMEWORKS'] = SCons.Util.CLVar('') - env['FRAMEWORKPATH'] = SCons.Util.CLVar('') - if env['PLATFORM'] == 'darwin': - env['_CCCOMCOM'] = env['_CCCOMCOM'] + ' $_FRAMEWORKPATH' - - if not env.has_key('CCFLAGS'): - env['CCFLAGS'] = SCons.Util.CLVar('') - - if not env.has_key('SHCCFLAGS'): - env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') - -def generate(env): - """ - Add Builders and construction variables for C compilers to an Environment. - """ - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - for suffix in CSuffixes: - static_obj.add_action(suffix, SCons.Defaults.CAction) - shared_obj.add_action(suffix, SCons.Defaults.ShCAction) - static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter) - shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter) -#<<<<<<< .working -# -# env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS' -# # It's a hack to test for darwin here, but the alternative of creating -# # an applecc.py to contain this seems overkill. Maybe someday the Apple -# # platform will require more setup and this logic will be moved. -# env['FRAMEWORKS'] = SCons.Util.CLVar('') -# env['FRAMEWORKPATH'] = SCons.Util.CLVar('') -# if env['PLATFORM'] == 'darwin': -# env['_CCCOMCOM'] = env['_CCCOMCOM'] + ' $_FRAMEWORKPATH' -#======= -#>>>>>>> .merge-right.r1907 - - add_common_cc_variables(env) - - env['CC'] = 'cc' - env['CFLAGS'] = SCons.Util.CLVar('') - env['CCCOM'] = '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES' - env['SHCC'] = '$CC' - env['SHCFLAGS'] = SCons.Util.CLVar('$CFLAGS') - env['SHCCCOM'] = '$SHCC -o $TARGET -c $SHCFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES' - - env['CPPDEFPREFIX'] = '-D' - env['CPPDEFSUFFIX'] = '' - env['INCPREFIX'] = '-I' - env['INCSUFFIX'] = '' - env['SHOBJSUFFIX'] = '.os' - env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 0 - - env['CFILESUFFIX'] = '.c' - -def exists(env): - return env.Detect('cc') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/cc.pyc deleted file mode 100644 index 8eaf65e21653fa622b2aa47e9d65e920c4cd13a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.py deleted file mode 100644 index db763f1d0..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.py +++ /dev/null @@ -1,88 +0,0 @@ -"""SCons.Tool.dvips - -Tool-specific initialization for dvips. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/dvips.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Action -import SCons.Builder -import SCons.Tool.dvipdf -import SCons.Util - -def DviPsFunction(target = None, source= None, env=None): - result = SCons.Tool.dvipdf.DviPdfPsFunction(PSAction,target,source,env) - return result - -def DviPsStrFunction(target = None, source= None, env=None): - """A strfunction for dvipdf that returns the appropriate - command string for the no_exec options.""" - if env.GetOption("no_exec"): - result = env.subst('$PSCOM',0,target,source) - else: - result = '' - return result - -PSAction = None -DVIPSAction = None -PSBuilder = None - -def generate(env): - """Add Builders and construction variables for dvips to an Environment.""" - global PSAction - if PSAction is None: - PSAction = SCons.Action.Action('$PSCOM', '$PSCOMSTR') - - global DVIPSAction - if DVIPSAction is None: - DVIPSAction = SCons.Action.Action(DviPsFunction, strfunction = DviPsStrFunction) - - global PSBuilder - if PSBuilder is None: - PSBuilder = SCons.Builder.Builder(action = PSAction, - prefix = '$PSPREFIX', - suffix = '$PSSUFFIX', - src_suffix = '.dvi', - src_builder = 'DVI', - single_source=True) - - env['BUILDERS']['PostScript'] = PSBuilder - - env['DVIPS'] = 'dvips' - env['DVIPSFLAGS'] = SCons.Util.CLVar('') - # I'm not quite sure I got the directories and filenames right for variant_dir - # We need to be in the correct directory for the sake of latex \includegraphics eps included files. - env['PSCOM'] = 'cd ${TARGET.dir} && $DVIPS $DVIPSFLAGS -o ${TARGET.file} ${SOURCE.file}' - env['PSPREFIX'] = '' - env['PSSUFFIX'] = '.ps' - -def exists(env): - return env.Detect('dvips') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/dvips.pyc deleted file mode 100644 index ebe36b244b353b06e98173b4de259bebadbc65d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2575 zcmcgu-BTk)5T8v#fE*ups3&-(j#m^HtjdOqToqDi$?;Vv2dP~+EnZT~&V&qZc2YC5 z5fq-d2Vea2ET8-<`~$SRHz8DckDf`kx2Lyzrayk&o8n*7mGaUbuVOa%l;HjiT=rKW zg0WMe9y|4zC@@iENr9afhkWTCKX#8V6AxNk}JQm z@AywDNqA;6+68QLeYEWuot<~!F8R4kr2&8L`HPNLmn&8#uopVlm9C=&cxJ!C@Jw8n z>A6Z}os8-0H4Q^w|i255ohj9`1!2*uK zwS{{=1>zXH@YqFxT@;xsv1`VzJ$7ASw|idJOdB6BVsu~ug$mJYp>X`e(!+AMKZkT4?lTj1(F zqxzAPb=U3HQ!Qkzzv8d@Yjp>1*g8d;(^{hAD5*X78~)1M(&eUMJ9PBU%ViK)bdGtS zc>hk+Dm;LkToBrCJ!U?qgr!>_0ZlnVN!@vND-FjYBBDL|M z+Ha&b!7gAFmFNgihGK#ONMIVlD1tczLueY)c+1Ms_+SU9znEbQVwP=)huA{m5!*n= zD(nJG=HNJzz6a0WC+-8_=7@U?+=s-?1GfO}_7OyAw}EU5!Cz)75z<(gK?0zV0t&Kx zKJ+8N$XO!o9hv|?8ua*1+E+%WU70%n9uzFrK1W4(9JmK~%m|azcTwK52!WoFZFM=c zX$CvH`#fgc5M4VTP283PQW4ztRE$LJU|P|Z3V~WxABd&$Kz-c7P-y&Jrn&>%R$ zf8>X7E?oH;G&$Wrqwpr0kMGmw2p2Mi4F_tWCZ{^mW449N56<{jh^a{{q3) zNGKllkF_$(25RqMeUf=5m&qd^E++C6$L+f zsw-RNiWa(@2+6AmB8_>)snS)MOF5@ztf!KxhnBwQG*@$~IA_#qD#{5sLtJ5Kso7L= z%0$HrE9X)0+R{%#N;)-D7X^Il{pdTc^mH`7mC;H$SV{OOFkC_`%)aDytQllxo+AlW z5!W2V&MC(IG1L-G=Je_QZbFk@Z$EyL#7U1P$>H9?;a);b0d$Gq@SKO(NqYxG&R7Q7 zWmacg&6X;NwNN!+7yK3;e9^55>ll`~1YrsJLdZ9dc-C7WP<-%-ZJ>IxjT7<}Y|adG za&(OvOVnJV7CC~c>W6KJe4e@-@$}P!o^8Rme}-rcHE+|4^wqiT*4p|n#LQAyB*k1U zMmgaY7=;>fy*gJ6#V8|0jLffx8&P6nPMc0sNqb`!QBiBN-wB=$oz*G)^Y z{1n4FWr_^Ayq);B$s>XMN*HUN0W!!G@j}ebH6hEGF0#ySfFjE(J`)B;6%<%wJfgc5M4VTP27|N5(sX4Dn=r9>NZkZDg-Gi?Ijn>csI$SwKsS-p+Rth z|Hu#F$N^^7O`3`;B--)w?CkT*o7vjW9k03j<4s0xel9#;!qOkXFhWLP9WrtVa|x>v z>5@@xh3gx*v4NXp)U+{mBDYB1BBK_`+ho)x4r`DJ(0PP4$#-DiCTz=s4zdsZ7Jm8{ z7+y?7!Gqz6Ds*tElnlm)ea}PG)ia)nvB;<>gb}F}pHm}LLC313X3FV=7rcb+cS?(E z3g_sVDovRdG*kIZNL~iOH033yg(~w@$|coPHJ7Y-V(5EL(_%>r&KWg|ihKr#fmdjn zD>j#$GEwr($YtQYHuRH_lFs$qvcTCY9?wooHJ?oHWVBHZR^mVPG?&1I+2`C$6@$$5 za}=S>!b*eC9ttr&gj#~xlI{-|$Tx>L##te7d~k`Wp?kKA6Y>@I z>^98F@eQi2QGJaX@-TXyaDx)m8CGj1?pC825Yt#2S4LD4dmIks2PFd=?gp@$RA*90Y^VfYv&+ zVpg^*RhG)`UJwPnzx!cuYVFVg*)zZzWhaj3cPaL-~OMIa<(;M$4Jqd3-a&(m%6K<<=jYAx%Cd{C_y6p{OcPXDO-)Gso9->eFn)-yof}EY*#zEK3^QI8l16jT$%(Z!GGe z3gd1Zx^WttI7s4mfr+!!?Pj@a`pP{~a1G>j1A2XxD>u#ZL69V4SNF3~5~a6|yQ|zF z9lNPg5ro}%FwAm;Q)2B7vS^ejH;Qu=nq=H?o*DN|oFwi@kK`2S7V@my&$CglFZcIU zs&bfj$_KW)e#g-&!C7qUK$(6PH5~nfJ40ec<#l>rrh^h0qJuK0{ewjZ7U$^;NWGq=Z9K$A*G7VDK0|@HVLwQFN{h$C!1Ud$ zE4T_Pj0DnKIa?z>HxfZSrE51vGS^SO*~?`Z>7fFpu{Gqnc(g zY^GVH7WbDL_ZttJ0-mPCx1ftj76!@U-A1di^wCU7{8y4-up0%Bn>b&~b#gOXGzf-u z&WNcnk*Ek;#7&G=>Aswj`o(jPT{>f{=Wqq1#$>)4#Kx$cFVs~KDp%}T>#BVWCbnF_ zbO?rFBY9v(vhm6${fP4eEE${N5(|JSc!3tcbm>={-hNHU7akXYTYuT$mIBxTl4gog zxmO|F0$@%Un+{8qZ*nv0yxyd3X&W4$w!Q@F6cJl?Z)&HAD6=s~KgOc^IS>hQqEf?7 zuWGGwuE~u&&vK7_^B8g>^e!HH;ESRHetkx|q|f7nJPwanW5OnQoZmCf(*<0?dGZ5k zBz_lFeh+)v0U_&=eZ{(FRf}A)ISjQmEPWZ|0IgUkGBb||P6A&>0kLe`uv2T#fB31h zt{!V4!_LW2VpJcta$YR)Hqe}UhA+QJFp(zR)G2@^N9PVM>RgQR!Jp2W% zk*QG+=%%T_q7)jl%T|%w<1NO|V3e3xYDfSw z=@0rAM;SNBz^&^$%kILB&hr=E+D2!A`~Sj?tyS;ajjhgt_X$L0xQmV7sj(EBnZ-7z zb1Qo?iW7_qY2NKDRVe<+OMqN?^q3QSD*xyxL|rYVx*q4Ew2_*8?6KhS@vC~GFQY)} zRVINtW3*ObguD!3x~zhih>=yYW~>X=d3y%G6)dLbOGp1M+H=;NEl_4S^Aad?g8?3j z5!{w+6y~#p_;kkJaA#C+V{P=$;3g#}5pB2YT$qw6-;c7;_YEV`_j9!$YxGv%_pY5ta}ri0u1n?TpWnZ}_w!2{KexQ*?vK|gsh$Sx&td8BAQ&MdkPaC+gt>$@ zh;+#aK#3b<)Tr?q8Lij2xq>%VaBBs(YrICJN3u;a+9X+rj5@?&kf=%62ARMgY!TKX z-=K~=gtaZ$#yW;w4~zT-VtA%s9-r#(I6sThltid-0xNbxB#Lgf^^ zXhJ7E=LHzwDlM+*xZe-PM?HE`W}vCcWuUYnoG!q^=I5n6@$w3GvuI11D;Pr&I211pnp&?;m?-z$>1QQVXrp`_QN3T(J(wd zJUTuMsZN17@f)7Yt_zvW9S{j)F;o~E74v*y?p3NPU#-R|86O>*a_^OUzn?mw$5d;u z&S2?N5QdP?gnV^~W1Jd+;)6>d4%D+<9I-E8vt}5slL|G+35?*di|H;Sl%@@0_~PPC zbQPUmnhiKr*g8dUCJ|O)njp@(0nThpeWAK+6${7yu-I|h1xc*XuK)$JLM#%)1Cz~y zTrs}4==lf!ATU6!4lHk_+>lj^oMDZ!;9)yFQ!5E zN@tw&mE$`jqUZDWcH6B#l@M5b diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.py deleted file mode 100644 index feb39519e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.py +++ /dev/null @@ -1,84 +0,0 @@ -"""SCons.Tool.g++ - -Tool-specific initialization for g++. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/g++.py 3842 2008/12/20 22:59:52 scons" - -import os.path -import re -import subprocess - -import SCons.Tool -import SCons.Util - -cplusplus = __import__('c++', globals(), locals(), []) - -compilers = ['g++'] - -def generate(env): - """Add Builders and construction variables for g++ to an Environment.""" - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - cplusplus.generate(env) - - env['CXX'] = env.Detect(compilers) - - # platform specific settings - if env['PLATFORM'] == 'aix': - env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS -mminimal-toc') - env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 - env['SHOBJSUFFIX'] = '$OBJSUFFIX' - elif env['PLATFORM'] == 'hpux': - env['SHOBJSUFFIX'] = '.pic.o' - elif env['PLATFORM'] == 'sunos': - env['SHOBJSUFFIX'] = '.pic.o' - # determine compiler version - if env['CXX']: - #pipe = SCons.Action._subproc(env, [env['CXX'], '-dumpversion'], - pipe = SCons.Action._subproc(env, [env['CXX'], '--version'], - stdin = 'devnull', - stderr = 'devnull', - stdout = subprocess.PIPE) - if pipe.wait() != 0: return - # -dumpversion was added in GCC 3.0. As long as we're supporting - # GCC versions older than that, we should use --version and a - # regular expression. - #line = pipe.stdout.read().strip() - #if line: - # env['CXXVERSION'] = line - line = pipe.stdout.readline() - match = re.search(r'[0-9]+(\.[0-9]+)+', line) - if match: - env['CXXVERSION'] = match.group(0) - -def exists(env): - return env.Detect(compilers) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g++.pyc deleted file mode 100644 index 015532af0b3707723766498c758ce5045df95101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2073 zcmcIl>r&fB6h4wKfUyH1X&R>KR6l6y47E($WQI_tQ)5h^!zE*rOopbT5!#KtimX+& zD+fC8r}PQ>B7K(r>VxzF+H+PmVJ3fDd-mw;x$U`pD;55(RmuuU< z*Fwh5TbVj&<)Yb;r`(BUI`X6F+)+cBMJ)bGJEz?7<8vqGoH<%LVwA{KJ9;RTGmVJfr15TD!`@R+BV&5c|s&HAH?;t|H8)J9wn zCBw|rw^UjhGe~DCfPSB_2k_7X8lRaX|1iTHy^i}tu?3B+IaeG<7vxL0ro=t zgTF&nz$n4$s(GScVBx-uYYtZjmwJv84G>xo+Hiq=x8RKpmlj;wpbHQdCqfH#VF`4Z zERe^sZ_>ktWt_x28`8|gnSpSY#yPPn!6uH53}=v=HQXF*#v6ts=ZbOu9oYP}^7CtD z)hPeCsRX06U^(qrl=vKk6%yq+EwdU75Q_*Dgvg?yw?WTCScNOQa9My0EUHEzV@vR^ z0BONucc4$wTM#ag;<5;O5yIQR?!pCDg6$~5MG5dgq~Q{IPRjcPHh=C|F$TjJ^?TIN zEhKHmoUKemjHe25#2lK4PP2T*V?P!CX~fkOh=eddcDnIcq%t1ySi9JI9MJ36nh^eC zzkR%O)H^UjU!18=QMiKIo&EOnzS9_u5a5X5hL(Y@psv3=RSFuoen_(8_VHfFYaecV z{oQu2yX_rq{m|_k_dVQr$Gcsx-#+Lna$iAB|K-lk-fL_eMfu9=AS49XcF$5|91fY4fFXVNJvGc8aEhw3)cAJ-bsep;=+ zadYO;s;LO;dDZRp_l^$hchJbhHdjJZMszJSIR`2CH9tBHr`^|-QjkQMqGh^it|3~P z=JD9ntu(%}0#BZX`F7~1oS7}vorr{+ zqfB6$!^qdcu#OBEqIQvMCaD->!A(6%nz3ZOFT4um-?wY_ox-AZ&#G88YcXGT#eQIw@n5x;pg6N&Eg>He3TaX8=CxBp z25)SLy2PirotokBS16t2xGVnZI zMScEa1J diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.py deleted file mode 100644 index effc9fcfc..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.py +++ /dev/null @@ -1,67 +0,0 @@ -"""engine.SCons.Tool.g77 - -Tool-specific initialization for g77. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/g77.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util -from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env - -compilers = ['g77', 'f77'] - -def generate(env): - """Add Builders and construction variables for g77 to an Environment.""" - add_all_to_env(env) - add_f77_to_env(env) - - fcomp = env.Detect(compilers) or 'g77' - if env['PLATFORM'] in ['cygwin', 'win32']: - env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS') - env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS') - else: - env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -fPIC') - env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS -fPIC') - - env['FORTRAN'] = fcomp - env['SHFORTRAN'] = '$FORTRAN' - - env['F77'] = fcomp - env['SHF77'] = '$F77' - - env['INCFORTRANPREFIX'] = "-I" - env['INCFORTRANSUFFIX'] = "" - - env['INCF77PREFIX'] = "-I" - env['INCF77SUFFIX'] = "" - -def exists(env): - return env.Detect(compilers) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/g77.pyc deleted file mode 100644 index 31b4116591fe64d3b603110de31192dbd6d614b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1767 zcmcIl&2Aev5T2DS*;ehu&5slH#6yrOK((uE639)BppF_f0vy*^IYFR{uvt>;T_^kLbJ$eAg*^lu_(1n*sb@0RRZ)wcygbr{EJ(|Lf80R_^|@{802>9kub?Dh&fLhTL`tVSn(j^dPa_IxT+E^>pM;EZn9=F_5HvpARWyHuDZsfaDH zVlUK8=2~S!SwC_`*u_{EXQ!8)AEH;bf*;9z^j<1kMiu8rp*cY99xh)-r{|rs)9-t( zO1+nxkRjsV>$F;hK^4EyVDV{g{xbq=3@^HEbA8jP!0ZlUi^zs@TkdRWht;Nz4H(}L z3us@LuiMhlu^L@_h*S5xy@+)Yz36n`B2ADhpRV*?cW7mQVcu#jOxHkRQIOWGugI*f zs7^^o6gwhzx@-JSSnM5_b)vJ0OtDTylJq1X!2n)cnL4O__9o7Yo*~J^4;lHXBcH7Hlk1p)i|Uxl)?mgPIlz#-h}w!b~!bndvX-Xe#nWI+m&Mt&>mo zKBb;7*yFt?UDoY%_WVa(zuRHm?(?V5oZ4Q z8wRvmhqytCD@=L|;%(qNaOt8OT$SJwO>aoXJLI`c^A7C)cmpX0!x-L2bPX?19B|HF z%w)oa(pY@X=o*ch6@{6HN`_~N&@1*3Ey9!?rgN#XbShHQ4loMXtM2s-QSq>{4h9;VL2*3*c3Xz{HImg5KW}5qH#zkx1X+LT2`39R$`?k9Z*-Ek~ zOj?iH-FD~S4I0!jSPO?{D8OyFO=rhxx_8~0d(WxhTX%M$T-|nd5l3{nG^hr)H5&-9 zKk$!g9HQ>PBXv=vfRq8T#4ZM(62kF69K+UF{3Nx}ecV7(e&BeUC@uF!Bc4U0k)hL$ zMoP>j5p*;v*h1Es4nDyt_?TR%gvAe#ND*w4g3e)YE4Yv7!#V!@nppDe7k}`tsH5~Q Rib}KM*0CD+y7X?``x{XAld1p! diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.py deleted file mode 100644 index 7da19e4fd..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.py +++ /dev/null @@ -1,58 +0,0 @@ -"""SCons.Tool.gfortran - -Tool-specific initialization for gfortran, the GNU Fortran 95/Fortran -2003 compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/gfortran.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util - -import fortran - -def generate(env): - """Add Builders and construction variables for gfortran to an - Environment.""" - fortran.generate(env) - - for dialect in ['F77', 'F90', 'FORTRAN', 'F95']: - env['%s' % dialect] = 'gfortran' - env['SH%s' % dialect] = '$%s' % dialect - if env['PLATFORM'] in ['cygwin', 'win32']: - env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect) - else: - env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect) - - env['INC%sPREFIX' % dialect] = "-I" - env['INC%sSUFFIX' % dialect] = "" - -def exists(env): - return env.Detect('gfortran') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gfortran.pyc deleted file mode 100644 index 5cf34e884b7d7aa5a2925f2d30137bd3d4ceff87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1542 zcmcIkYi=7i5T4a5v1&Vx`vCkWV1c?-fM{1)$B1nNL0u(Eh1!a-vfIEwAZ(VjM3>^K zBqc{d`m4P_579&PBt1wE(9UqB#0A=)S%Jgh=$qj@zTNU)YxUZfe;#MBcuKf`jmsXO z-~i_+12_+Wmw=Z+mEgR*)GKga0bYS$5mp6W^-7Ik{YH&qR0Dv1JJ&Wm&2tqFFLL8d zs_S(+Htj@Y@-vUp*Ba=^uBcIbyXkjq;ueeJgWdgu-I&=7n<)RrrZ&)y8H2K;Zx` z19%JYO8~*^-)UyWz;Han3OsrF8~lu>DnWP+-Ujg5BYwm0WVu;bNL_&~{t5h819Jtg z1eayF#38SG00t+>T7lMgt^wBn1Hf;2_(lQexBY3eIQ_)n2mUb<#@)-bY+a!dHAr{_gn4;ou4PC z$zg9{+jTe5wrswohHhI+eqZ2T!M*?Ow)LQsqr+2lK6b?EY(Bh_+EMdy--#`SL6^?a z;j_M7S@;#F^=p5z=EX_3?eA%J?ML`ex7XgbC&|-J_XSQ5oAA!qKkJ~e*Px{A`%CS+ zOBtGbfcdwU53}jSuR3AoR?K;P~nxUmFMoFYGaD(Zt9Z z28-Ny66u_a=ByPy2=^j~q_vSJWFea>&r;RAAI4$pe~6vbG2&fZb`u4Z*GgN#daxO6 z1fQ4gl-2{!=_Ri{r`HgMRJ%mB1;pvT&%2jUK@CFsVLTCzGN*Gw&Hj)z_zT5rX`S82 ztNbJ(Xb`h}8wUfPXM=%TMZ;iV#7tWJ1fYRxFFq19iG-${5KnwllG~`gPx}M)-_zq! U@u_=E`B)OQty*ane=8gR0B#0!5C8xG diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gnulink.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gnulink.py deleted file mode 100644 index de95ee1bb..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gnulink.py +++ /dev/null @@ -1,57 +0,0 @@ -"""SCons.Tool.gnulink - -Tool-specific initialization for the gnu linker. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/gnulink.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util - -import link - -linkers = ['g++', 'gcc'] - -def generate(env): - """Add Builders and construction variables for gnulink to an Environment.""" - link.generate(env) - - if env['PLATFORM'] == 'hpux': - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared -fPIC') - - # __RPATH is set to $_RPATH in the platform specification if that - # platform supports it. - env.Append(LINKFLAGS=['$__RPATH']) - env['RPATHPREFIX'] = '-Wl,-rpath=' - env['RPATHSUFFIX'] = '' - env['_RPATH'] = '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}' - -def exists(env): - return env.Detect(linkers) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.py deleted file mode 100644 index c52440af6..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.py +++ /dev/null @@ -1,75 +0,0 @@ -"""SCons.Tool.gs - -Tool-specific initialization for Ghostscript. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/gs.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Action -import SCons.Platform -import SCons.Util - -# Ghostscript goes by different names on different platforms... -platform = SCons.Platform.platform_default() - -if platform == 'os2': - gs = 'gsos2' -elif platform == 'win32': - gs = 'gswin32c' -else: - gs = 'gs' - -GhostscriptAction = None - -def generate(env): - """Add Builders and construction variables for Ghostscript to an - Environment.""" - - global GhostscriptAction - if GhostscriptAction is None: - GhostscriptAction = SCons.Action.Action('$GSCOM', '$GSCOMSTR') - - import pdf - pdf.generate(env) - - bld = env['BUILDERS']['PDF'] - bld.add_action('.ps', GhostscriptAction) - - env['GS'] = gs - env['GSFLAGS'] = SCons.Util.CLVar('-dNOPAUSE -dBATCH -sDEVICE=pdfwrite') - env['GSCOM'] = '$GS $GSFLAGS -sOutputFile=$TARGET $SOURCES' - - -def exists(env): - if env.has_key('PS2PDF'): - return env.Detect(env['PS2PDF']) - else: - return env.Detect(gs) or SCons.Util.WhereIs(gs) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/gs.pyc deleted file mode 100644 index c0723c50d47c6d49c9593146ae0f1c26843244a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmcIkQE%He5I)I{V>?dMuE4NtF9a5B-T+IfngUsn7IPfO3y>y(i5?PEI$|L?{VngP;h`t zlnz`vz+K=KP%d0n9`x!*`U>fy0@E5ySK%H5>mcgDtMJx^Vh9`^8jyZrjWuhOz*nuY z2E0xR=8xBaH{cfxZvk&wWu5F%dyR_v14Y!!Qtb`1OnGD7Y?9K^xk%)-Oqfiik+G6L z$3|u;yUq$Wm}J`Mq>#Ds(0w8b!P2al#Y){WJ;~;Zr(YX(C0Lx^vQ!ApOvdCa&kDoL zL~1t6_*@CbWg!xyZoTHQVK-7KHrI2T1!GHpik%eMd_2Kfu(3!*fmMA}GL_r@rm2O( zTvXyrm`TR5GQCG9ED~R&W0?xy2KnUgkF}TIvgf-y0SmUbcl~F9A8fNA*n9Ea-iv_g z1Un-C!tc~nFiEBZvx4(jKWH~HeIA&)wOKte1oT)Z4o(z9qlZKPiozi12wWYCEkMU9 z!iu0<4&1vC1ElDHmMW+!ymR2rf$0j|0o*&_;Dlgr@)~TubKwrd5#LqHiLs7ZB|pS_ zpAy$$im*2*j;u}C=WAALp;krI*Quma6kX2Q!CWdX3XMQ4&aoORgXXo9EsLwk5pgZjSz&iS{|K_;Yf0^^^n?f3a2L>2KM<-p3`4)BjTZY3L z(EV&~^0_&ZO1#_}cEdq`$hM-hi?G*^EQq$qb`t~56Uy{~&0TwTQ$_1(mI~`_Nn_}A z%UvoOODVA@I>uNMWs5l<#Wq7o8El#hBb80lJ9!fqZHl$07wIB=^su;6yp1|op$Dk> zc_9~=*Eh4=Pctq$i*0Ym+w~2SSNoQprR=CIiB;#B7kJzMB6zrgxpr{qPf);0%lXW0 zIqU8t=ds&#K6NZtANblMKN85BDN@HF4i(HUOENjIiKdA59bz#q@>g`8X_eSoS|WVn zqBh-yQ`@!kC_t#&)IbZ|B-W$1;@0jR3WImnb}MY5Lr8d7uOI1AIo53|E_{mO|7nn| zLi{B0Iit2)5`(khJaO9=9b(#O#Is~HGF0GbREUMt_{uB|&1').readline().rstrip() - if string.find(line, 'aCC: HP ANSI C++') == 0: - env['CXXVERSION'] = string.split(line)[-1] - - if env['PLATFORM'] == 'cygwin': - env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS') - else: - env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS +Z') - -def exists(env): - return acc diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hpcc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hpcc.py deleted file mode 100644 index a4da9568b..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hpcc.py +++ /dev/null @@ -1,47 +0,0 @@ -"""SCons.Tool.hpcc - -Tool-specific initialization for HP aCC and cc. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/hpcc.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Util - -import cc - -def generate(env): - """Add Builders and construction variables for aCC & cc to an Environment.""" - cc.generate(env) - - env['CXX'] = 'aCC' - env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS +Z') - -def exists(env): - return env.Detect('aCC') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hplink.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hplink.py deleted file mode 100644 index 0eb5b0a6b..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/hplink.py +++ /dev/null @@ -1,71 +0,0 @@ -"""SCons.Tool.hplink - -Tool-specific initialization for the HP linker. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/hplink.py 3842 2008/12/20 22:59:52 scons" - -import os -import os.path - -import SCons.Util - -import link - -ccLinker = None - -# search for the acc compiler and linker front end - -try: - dirs = os.listdir('/opt') -except (IOError, OSError): - # Not being able to read the directory because it doesn't exist - # (IOError) or isn't readable (OSError) is okay. - dirs = [] - -for dir in dirs: - linker = '/opt/' + dir + '/bin/aCC' - if os.path.exists(linker): - ccLinker = linker - break - -def generate(env): - """ - Add Builders and construction variables for Visual Age linker to - an Environment. - """ - link.generate(env) - - env['LINKFLAGS'] = SCons.Util.CLVar('-Wl,+s -Wl,+vnocompatwarnings') - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -b') - env['SHLIBSUFFIX'] = '.sl' - -def exists(env): - return ccLinker diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icc.py deleted file mode 100644 index ac6d6aade..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icc.py +++ /dev/null @@ -1,53 +0,0 @@ -"""engine.SCons.Tool.icc - -Tool-specific initialization for the OS/2 icc compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/icc.py 3842 2008/12/20 22:59:52 scons" - -import cc - -def generate(env): - """Add Builders and construction variables for the OS/2 to an Environment.""" - cc.generate(env) - - env['CC'] = 'icc' - env['CCCOM'] = '$CC $CFLAGS $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET' - env['CXXCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET' - env['CPPDEFPREFIX'] = '/D' - env['CPPDEFSUFFIX'] = '' - env['INCPREFIX'] = '/I' - env['INCSUFFIX'] = '' - env['CFILESUFFIX'] = '.c' - env['CXXFILESUFFIX'] = '.cc' - -def exists(env): - return env.Detect('icc') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icl.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icl.py deleted file mode 100644 index 322de7935..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/icl.py +++ /dev/null @@ -1,46 +0,0 @@ -"""engine.SCons.Tool.icl - -Tool-specific initialization for the Intel C/C++ compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/icl.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Tool.intelc - -# This has been completely superceded by intelc.py, which can -# handle both Windows and Linux versions. - -def generate(*args, **kw): - """Add Builders and construction variables for icl to an Environment.""" - return apply(SCons.Tool.intelc.generate, args, kw) - -def exists(*args, **kw): - return apply(SCons.Tool.intelc.exists, args, kw) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifl.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifl.py deleted file mode 100644 index bfb157e6e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifl.py +++ /dev/null @@ -1,66 +0,0 @@ -"""SCons.Tool.ifl - -Tool-specific initialization for the Intel Fortran compiler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/ifl.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Defaults -from SCons.Scanner.Fortran import FortranScan -from FortranCommon import add_all_to_env - -def generate(env): - """Add Builders and construction variables for ifl to an Environment.""" - fscan = FortranScan("FORTRANPATH") - SCons.Tool.SourceFileScanner.add_scanner('.i', fscan) - SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan) - - if not env.has_key('FORTRANFILESUFFIXES'): - env['FORTRANFILESUFFIXES'] = ['.i'] - else: - env['FORTRANFILESUFFIXES'].append('.i') - - if not env.has_key('F90FILESUFFIXES'): - env['F90FILESUFFIXES'] = ['.i90'] - else: - env['F90FILESUFFIXES'].append('.i90') - - add_all_to_env(env) - - env['FORTRAN'] = 'ifl' - env['SHFORTRAN'] = '$FORTRAN' - env['FORTRANCOM'] = '$FORTRAN $FORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET' - env['FORTRANPPCOM'] = '$FORTRAN $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET' - env['SHFORTRANCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET' - env['SHFORTRANPPCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET' - -def exists(env): - return env.Detect('ifl') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifort.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifort.py deleted file mode 100644 index 17b7bf7b3..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ifort.py +++ /dev/null @@ -1,83 +0,0 @@ -"""SCons.Tool.ifort - -Tool-specific initialization for newer versions of the Intel Fortran Compiler -for Linux/Windows (and possibly Mac OS X). - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/ifort.py 3842 2008/12/20 22:59:52 scons" - -import string - -import SCons.Defaults -from SCons.Scanner.Fortran import FortranScan -from FortranCommon import add_all_to_env - -def generate(env): - """Add Builders and construction variables for ifort to an Environment.""" - # ifort supports Fortran 90 and Fortran 95 - # Additionally, ifort recognizes more file extensions. - fscan = FortranScan("FORTRANPATH") - SCons.Tool.SourceFileScanner.add_scanner('.i', fscan) - SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan) - - if not env.has_key('FORTRANFILESUFFIXES'): - env['FORTRANFILESUFFIXES'] = ['.i'] - else: - env['FORTRANFILESUFFIXES'].append('.i') - - if not env.has_key('F90FILESUFFIXES'): - env['F90FILESUFFIXES'] = ['.i90'] - else: - env['F90FILESUFFIXES'].append('.i90') - - add_all_to_env(env) - - fc = 'ifort' - - for dialect in ['F77', 'F90', 'FORTRAN', 'F95']: - env['%s' % dialect] = fc - env['SH%s' % dialect] = '$%s' % dialect - env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect) - - if env['PLATFORM'] == 'win32': - # On Windows, the ifort compiler specifies the object on the - # command line with -object:, not -o. Massage the necessary - # command-line construction variables. - for dialect in ['F77', 'F90', 'FORTRAN', 'F95']: - for var in ['%sCOM' % dialect, '%sPPCOM' % dialect, - 'SH%sCOM' % dialect, 'SH%sPPCOM' % dialect]: - env[var] = string.replace(env[var], '-o $TARGET', '-object:$TARGET') - env['FORTRANMODDIRPREFIX'] = "/module:" - else: - env['FORTRANMODDIRPREFIX'] = "-module " - -def exists(env): - return env.Detect('ifort') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink.py deleted file mode 100644 index b443a6b68..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink.py +++ /dev/null @@ -1,53 +0,0 @@ -"""SCons.Tool.ilink - -Tool-specific initialization for the OS/2 ilink linker. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/ilink.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Defaults -import SCons.Tool -import SCons.Util - -def generate(env): - """Add Builders and construction variables for ilink to an Environment.""" - SCons.Tool.createProgBuilder(env) - - env['LINK'] = 'ilink' - env['LINKFLAGS'] = SCons.Util.CLVar('') - env['LINKCOM'] = '$LINK $LINKFLAGS /O:$TARGET $SOURCES $( $_LIBDIRFLAGS $) $_LIBFLAGS' - env['LIBDIRPREFIX']='/LIBPATH:' - env['LIBDIRSUFFIX']='' - env['LIBLINKPREFIX']='' - env['LIBLINKSUFFIX']='$LIBSUFFIX' - -def exists(env): - return env.Detect('ilink') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink32.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink32.py deleted file mode 100644 index f357bec67..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/ilink32.py +++ /dev/null @@ -1,54 +0,0 @@ -"""SCons.Tool.ilink32 - -XXX - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/ilink32.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Tool -import SCons.Tool.bcc32 -import SCons.Util - -def generate(env): - """Add Builders and construction variables for ilink to an - Environment.""" - SCons.Tool.createSharedLibBuilder(env) - SCons.Tool.createProgBuilder(env) - - env['LINK'] = '$CC' - env['LINKFLAGS'] = SCons.Util.CLVar('') - env['LINKCOM'] = '$LINK -q $LINKFLAGS $SOURCES $LIBS' - env['LIBDIRPREFIX']='' - env['LIBDIRSUFFIX']='' - env['LIBLINKPREFIX']='' - env['LIBLINKSUFFIX']='$LIBSUFFIX' - - -def exists(env): - # Uses bcc32 to do linking as it generally knows where the standard - # LIBS are and set up the linking correctly - return SCons.Tool.bcc32.findIt('bcc32', env) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.py deleted file mode 100644 index be36be08c..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.py +++ /dev/null @@ -1,223 +0,0 @@ -"""SCons.Tool.install - -Tool-specific initialization for the install tool. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/install.py 3842 2008/12/20 22:59:52 scons" - -import os -import shutil -import stat - -import SCons.Action -from SCons.Util import make_path_relative - -# -# We keep track of *all* installed files. -_INSTALLED_FILES = [] -_UNIQUE_INSTALLED_FILES = None - -# -# Functions doing the actual work of the Install Builder. -# -def copyFunc(dest, source, env): - """Install a source file or directory into a destination by copying, - (including copying permission/mode bits).""" - - if os.path.isdir(source): - if os.path.exists(dest): - if not os.path.isdir(dest): - raise SCons.Errors.UserError, "cannot overwrite non-directory `%s' with a directory `%s'" % (str(dest), str(source)) - else: - parent = os.path.split(dest)[0] - if not os.path.exists(parent): - os.makedirs(parent) - shutil.copytree(source, dest) - else: - shutil.copy2(source, dest) - st = os.stat(source) - os.chmod(dest, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE) - - return 0 - -def installFunc(target, source, env): - """Install a source file into a target using the function specified - as the INSTALL construction variable.""" - try: - install = env['INSTALL'] - except KeyError: - raise SCons.Errors.UserError('Missing INSTALL construction variable.') - - assert len(target)==len(source), \ - "Installing source %s into target %s: target and source lists must have same length."%(map(str, source), map(str, target)) - for t,s in zip(target,source): - if install(t.get_path(),s.get_path(),env): - return 1 - - return 0 - -def stringFunc(target, source, env): - installstr = env.get('INSTALLSTR') - if installstr: - return env.subst_target_source(installstr, 0, target, source) - target = str(target[0]) - source = str(source[0]) - if os.path.isdir(source): - type = 'directory' - else: - type = 'file' - return 'Install %s: "%s" as "%s"' % (type, source, target) - -# -# Emitter functions -# -def add_targets_to_INSTALLED_FILES(target, source, env): - """ an emitter that adds all target files to the list stored in the - _INSTALLED_FILES global variable. This way all installed files of one - scons call will be collected. - """ - global _INSTALLED_FILES, _UNIQUE_INSTALLED_FILES - _INSTALLED_FILES.extend(target) - _UNIQUE_INSTALLED_FILES = None - return (target, source) - -class DESTDIR_factory: - """ a node factory, where all files will be relative to the dir supplied - in the constructor. - """ - def __init__(self, env, dir): - self.env = env - self.dir = env.arg2nodes( dir, env.fs.Dir )[0] - - def Entry(self, name): - name = make_path_relative(name) - return self.dir.Entry(name) - - def Dir(self, name): - name = make_path_relative(name) - return self.dir.Dir(name) - -# -# The Builder Definition -# -install_action = SCons.Action.Action(installFunc, stringFunc) -installas_action = SCons.Action.Action(installFunc, stringFunc) - -BaseInstallBuilder = None - -def InstallBuilderWrapper(env, target=None, source=None, dir=None, **kw): - if target and dir: - import SCons.Errors - raise SCons.Errors.UserError, "Both target and dir defined for Install(), only one may be defined." - if not dir: - dir=target - - import SCons.Script - install_sandbox = SCons.Script.GetOption('install_sandbox') - if install_sandbox: - target_factory = DESTDIR_factory(env, install_sandbox) - else: - target_factory = env.fs - - try: - dnodes = env.arg2nodes(dir, target_factory.Dir) - except TypeError: - raise SCons.Errors.UserError, "Target `%s' of Install() is a file, but should be a directory. Perhaps you have the Install() arguments backwards?" % str(dir) - sources = env.arg2nodes(source, env.fs.Entry) - tgt = [] - for dnode in dnodes: - for src in sources: - # Prepend './' so the lookup doesn't interpret an initial - # '#' on the file name portion as meaning the Node should - # be relative to the top-level SConstruct directory. - target = env.fs.Entry('.'+os.sep+src.name, dnode) - #tgt.extend(BaseInstallBuilder(env, target, src, **kw)) - tgt.extend(apply(BaseInstallBuilder, (env, target, src), kw)) - return tgt - -def InstallAsBuilderWrapper(env, target=None, source=None, **kw): - result = [] - for src, tgt in map(lambda x, y: (x, y), source, target): - #result.extend(BaseInstallBuilder(env, tgt, src, **kw)) - result.extend(apply(BaseInstallBuilder, (env, tgt, src), kw)) - return result - -added = None - -def generate(env): - - from SCons.Script import AddOption, GetOption - global added - if not added: - added = 1 - AddOption('--install-sandbox', - dest='install_sandbox', - type="string", - action="store", - help='A directory under which all installed files will be placed.') - - global BaseInstallBuilder - if BaseInstallBuilder is None: - install_sandbox = GetOption('install_sandbox') - if install_sandbox: - target_factory = DESTDIR_factory(env, install_sandbox) - else: - target_factory = env.fs - - BaseInstallBuilder = SCons.Builder.Builder( - action = install_action, - target_factory = target_factory.Entry, - source_factory = env.fs.Entry, - multi = 1, - emitter = [ add_targets_to_INSTALLED_FILES, ], - name = 'InstallBuilder') - - env['BUILDERS']['_InternalInstall'] = InstallBuilderWrapper - env['BUILDERS']['_InternalInstallAs'] = InstallAsBuilderWrapper - - # We'd like to initialize this doing something like the following, - # but there isn't yet support for a ${SOURCE.type} expansion that - # will print "file" or "directory" depending on what's being - # installed. For now we punt by not initializing it, and letting - # the stringFunc() that we put in the action fall back to the - # hand-crafted default string if it's not set. - # - #try: - # env['INSTALLSTR'] - #except KeyError: - # env['INSTALLSTR'] = 'Install ${SOURCE.type}: "$SOURCES" as "$TARGETS"' - - try: - env['INSTALL'] - except KeyError: - env['INSTALL'] = copyFunc - -def exists(env): - return 1 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/install.pyc deleted file mode 100644 index 51416232f76068f8c361a365a62c39a22ba80a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7141 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 QDpgD8-#9y7E!A%R7rxU?T>t<8 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/intelc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/intelc.py deleted file mode 100644 index dfdedc4ab..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/intelc.py +++ /dev/null @@ -1,482 +0,0 @@ -"""SCons.Tool.icl - -Tool-specific initialization for the Intel C/C++ compiler. -Supports Linux and Windows compilers, v7 and up. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/intelc.py 3842 2008/12/20 22:59:52 scons" - -import math, sys, os.path, glob, string, re - -is_windows = sys.platform == 'win32' -is_win64 = is_windows and (os.environ['PROCESSOR_ARCHITECTURE'] == 'AMD64' or - (os.environ.has_key('PROCESSOR_ARCHITEW6432') and - os.environ['PROCESSOR_ARCHITEW6432'] == 'AMD64')) -is_linux = sys.platform == 'linux2' -is_mac = sys.platform == 'darwin' - -if is_windows: - import SCons.Tool.msvc -elif is_linux: - import SCons.Tool.gcc -elif is_mac: - import SCons.Tool.gcc -import SCons.Util -import SCons.Warnings - -# Exceptions for this tool -class IntelCError(SCons.Errors.InternalError): - pass -class MissingRegistryError(IntelCError): # missing registry entry - pass -class MissingDirError(IntelCError): # dir not found - pass -class NoRegistryModuleError(IntelCError): # can't read registry at all - pass - -def uniquify(s): - """Return a sequence containing only one copy of each unique element from input sequence s. - Does not preserve order. - Input sequence must be hashable (i.e. must be usable as a dictionary key).""" - u = {} - for x in s: - u[x] = 1 - return u.keys() - -def linux_ver_normalize(vstr): - """Normalize a Linux compiler version number. - Intel changed from "80" to "9.0" in 2005, so we assume if the number - is greater than 60 it's an old-style number and otherwise new-style. - Always returns an old-style float like 80 or 90 for compatibility with Windows. - Shades of Y2K!""" - # Check for version number like 9.1.026: return 91.026 - m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)', vstr) - if m: - vmaj,vmin,build = m.groups() - return float(vmaj) * 10 + float(vmin) + float(build) / 1000.; - else: - f = float(vstr) - if is_windows: - return f - else: - if f < 60: return f * 10.0 - else: return f - -def check_abi(abi): - """Check for valid ABI (application binary interface) name, - and map into canonical one""" - if not abi: - return None - abi = abi.lower() - # valid_abis maps input name to canonical name - if is_windows: - valid_abis = {'ia32' : 'ia32', - 'x86' : 'ia32', - 'ia64' : 'ia64', - 'em64t' : 'em64t', - 'amd64' : 'em64t'} - if is_linux: - valid_abis = {'ia32' : 'ia32', - 'x86' : 'ia32', - 'x86_64' : 'x86_64', - 'em64t' : 'x86_64', - 'amd64' : 'x86_64'} - if is_mac: - valid_abis = {'ia32' : 'ia32', - 'x86' : 'ia32', - 'x86_64' : 'x86_64', - 'em64t' : 'x86_64'} - try: - abi = valid_abis[abi] - except KeyError: - raise SCons.Errors.UserError, \ - "Intel compiler: Invalid ABI %s, valid values are %s"% \ - (abi, valid_abis.keys()) - return abi - -def vercmp(a, b): - """Compare strings as floats, - but Intel changed Linux naming convention at 9.0""" - return cmp(linux_ver_normalize(b), linux_ver_normalize(a)) - -def get_version_from_list(v, vlist): - """See if we can match v (string) in vlist (list of strings) - Linux has to match in a fuzzy way.""" - if is_windows: - # Simple case, just find it in the list - if v in vlist: return v - else: return None - else: - # Fuzzy match: normalize version number first, but still return - # original non-normalized form. - fuzz = 0.001 - for vi in vlist: - if math.fabs(linux_ver_normalize(vi) - linux_ver_normalize(v)) < fuzz: - return vi - # Not found - return None - -def get_intel_registry_value(valuename, version=None, abi=None): - """ - Return a value from the Intel compiler registry tree. (Windows only) - """ - # Open the key: - if is_win64: - K = 'Software\\Wow6432Node\\Intel\\Compilers\\C++\\' + version + '\\'+abi.upper() - else: - K = 'Software\\Intel\\Compilers\\C++\\' + version + '\\'+abi.upper() - try: - k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K) - except SCons.Util.RegError: - raise MissingRegistryError, \ - "%s was not found in the registry, for Intel compiler version %s, abi='%s'"%(K, version,abi) - - # Get the value: - try: - v = SCons.Util.RegQueryValueEx(k, valuename)[0] - return v # or v.encode('iso-8859-1', 'replace') to remove unicode? - except SCons.Util.RegError: - raise MissingRegistryError, \ - "%s\\%s was not found in the registry."%(K, valuename) - - -def get_all_compiler_versions(): - """Returns a sorted list of strings, like "70" or "80" or "9.0" - with most recent compiler version first. - """ - versions=[] - if is_windows: - if is_win64: - keyname = 'Software\\WoW6432Node\\Intel\\Compilers\\C++' - else: - keyname = 'Software\\Intel\\Compilers\\C++' - try: - k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, - keyname) - except WindowsError: - return [] - i = 0 - versions = [] - try: - while i < 100: - subkey = SCons.Util.RegEnumKey(k, i) # raises EnvironmentError - # Check that this refers to an existing dir. - # This is not 100% perfect but should catch common - # installation issues like when the compiler was installed - # and then the install directory deleted or moved (rather - # than uninstalling properly), so the registry values - # are still there. - ok = False - for try_abi in ('IA32', 'IA32e', 'IA64', 'EM64T'): - try: - d = get_intel_registry_value('ProductDir', subkey, try_abi) - except MissingRegistryError: - continue # not found in reg, keep going - if os.path.exists(d): ok = True - if ok: - versions.append(subkey) - else: - try: - # Registry points to nonexistent dir. Ignore this - # version. - value = get_intel_registry_value('ProductDir', subkey, 'IA32') - except MissingRegistryError, e: - - # Registry key is left dangling (potentially - # after uninstalling). - - print \ - "scons: *** Ignoring the registry key for the Intel compiler version %s.\n" \ - "scons: *** It seems that the compiler was uninstalled and that the registry\n" \ - "scons: *** was not cleaned up properly.\n" % subkey - else: - print "scons: *** Ignoring "+str(value) - - i = i + 1 - except EnvironmentError: - # no more subkeys - pass - elif is_linux: - for d in glob.glob('/opt/intel_cc_*'): - # Typical dir here is /opt/intel_cc_80. - m = re.search(r'cc_(.*)$', d) - if m: - versions.append(m.group(1)) - for d in glob.glob('/opt/intel/cc*/*'): - # Typical dir here is /opt/intel/cc/9.0 for IA32, - # /opt/intel/cce/9.0 for EMT64 (AMD64) - m = re.search(r'([0-9.]+)$', d) - if m: - versions.append(m.group(1)) - elif is_mac: - for d in glob.glob('/opt/intel/cc*/*'): - # Typical dir here is /opt/intel/cc/9.0 for IA32, - # /opt/intel/cce/9.0 for EMT64 (AMD64) - m = re.search(r'([0-9.]+)$', d) - if m: - versions.append(m.group(1)) - versions = uniquify(versions) # remove dups - versions.sort(vercmp) - return versions - -def get_intel_compiler_top(version, abi): - """ - Return the main path to the top-level dir of the Intel compiler, - using the given version. - The compiler will be in /bin/icl.exe (icc on linux), - the include dir is /include, etc. - """ - - if is_windows: - if not SCons.Util.can_read_reg: - raise NoRegistryModuleError, "No Windows registry module was found" - top = get_intel_registry_value('ProductDir', version, abi) - if not os.path.exists(os.path.join(top, "Bin", "icl.exe")): - raise MissingDirError, \ - "Can't find Intel compiler in %s"%(top) - elif is_mac or is_linux: - # first dir is new (>=9.0) style, second is old (8.0) style. - dirs=('/opt/intel/cc/%s', '/opt/intel_cc_%s') - if abi == 'x86_64': - dirs=('/opt/intel/cce/%s',) # 'e' stands for 'em64t', aka x86_64 aka amd64 - top=None - for d in dirs: - if os.path.exists(os.path.join(d%version, "bin", "icc")): - top = d%version - break - if not top: - raise MissingDirError, \ - "Can't find version %s Intel compiler in %s (abi='%s')"%(version,top, abi) - return top - - -def generate(env, version=None, abi=None, topdir=None, verbose=0): - """Add Builders and construction variables for Intel C/C++ compiler - to an Environment. - args: - version: (string) compiler version to use, like "80" - abi: (string) 'win32' or whatever Itanium version wants - topdir: (string) compiler top dir, like - "c:\Program Files\Intel\Compiler70" - If topdir is used, version and abi are ignored. - verbose: (int) if >0, prints compiler version used. - """ - if not (is_mac or is_linux or is_windows): - # can't handle this platform - return - - if is_windows: - SCons.Tool.msvc.generate(env) - elif is_linux: - SCons.Tool.gcc.generate(env) - elif is_mac: - SCons.Tool.gcc.generate(env) - - # if version is unspecified, use latest - vlist = get_all_compiler_versions() - if not version: - if vlist: - version = vlist[0] - else: - # User may have specified '90' but we need to get actual dirname '9.0'. - # get_version_from_list does that mapping. - v = get_version_from_list(version, vlist) - if not v: - raise SCons.Errors.UserError, \ - "Invalid Intel compiler version %s: "%version + \ - "installed versions are %s"%(', '.join(vlist)) - version = v - - # if abi is unspecified, use ia32 - # alternatives are ia64 for Itanium, or amd64 or em64t or x86_64 (all synonyms here) - abi = check_abi(abi) - if abi is None: - if is_mac or is_linux: - # Check if we are on 64-bit linux, default to 64 then. - uname_m = os.uname()[4] - if uname_m == 'x86_64': - abi = 'x86_64' - else: - abi = 'ia32' - else: - if is_win64: - abi = 'em64t' - else: - abi = 'ia32' - - if version and not topdir: - try: - topdir = get_intel_compiler_top(version, abi) - except (SCons.Util.RegError, IntelCError): - topdir = None - - if not topdir: - # Normally this is an error, but it might not be if the compiler is - # on $PATH and the user is importing their env. - class ICLTopDirWarning(SCons.Warnings.Warning): - pass - if (is_mac or is_linux) and not env.Detect('icc') or \ - is_windows and not env.Detect('icl'): - - SCons.Warnings.enableWarningClass(ICLTopDirWarning) - SCons.Warnings.warn(ICLTopDirWarning, - "Failed to find Intel compiler for version='%s', abi='%s'"% - (str(version), str(abi))) - else: - # should be cleaned up to say what this other version is - # since in this case we have some other Intel compiler installed - SCons.Warnings.enableWarningClass(ICLTopDirWarning) - SCons.Warnings.warn(ICLTopDirWarning, - "Can't find Intel compiler top dir for version='%s', abi='%s'"% - (str(version), str(abi))) - - if topdir: - if verbose: - print "Intel C compiler: using version %s (%g), abi %s, in '%s'"%\ - (repr(version), linux_ver_normalize(version),abi,topdir) - if is_linux: - # Show the actual compiler version by running the compiler. - os.system('%s/bin/icc --version'%topdir) - if is_mac: - # Show the actual compiler version by running the compiler. - os.system('%s/bin/icc --version'%topdir) - - env['INTEL_C_COMPILER_TOP'] = topdir - if is_linux: - paths={'INCLUDE' : 'include', - 'LIB' : 'lib', - 'PATH' : 'bin', - 'LD_LIBRARY_PATH' : 'lib'} - for p in paths.keys(): - env.PrependENVPath(p, os.path.join(topdir, paths[p])) - if is_mac: - paths={'INCLUDE' : 'include', - 'LIB' : 'lib', - 'PATH' : 'bin', - 'LD_LIBRARY_PATH' : 'lib'} - for p in paths.keys(): - env.PrependENVPath(p, os.path.join(topdir, paths[p])) - if is_windows: - # env key reg valname default subdir of top - paths=(('INCLUDE', 'IncludeDir', 'Include'), - ('LIB' , 'LibDir', 'Lib'), - ('PATH' , 'BinDir', 'Bin')) - # We are supposed to ignore version if topdir is set, so set - # it to the emptry string if it's not already set. - if version is None: - version = '' - # Each path has a registry entry, use that or default to subdir - for p in paths: - try: - path=get_intel_registry_value(p[1], version, abi) - # These paths may have $(ICInstallDir) - # which needs to be substituted with the topdir. - path=path.replace('$(ICInstallDir)', topdir + os.sep) - except IntelCError: - # Couldn't get it from registry: use default subdir of topdir - env.PrependENVPath(p[0], os.path.join(topdir, p[2])) - else: - env.PrependENVPath(p[0], string.split(path, os.pathsep)) - # print "ICL %s: %s, final=%s"%(p[0], path, str(env['ENV'][p[0]])) - - if is_windows: - env['CC'] = 'icl' - env['CXX'] = 'icl' - env['LINK'] = 'xilink' - else: - env['CC'] = 'icc' - env['CXX'] = 'icpc' - # Don't reset LINK here; - # use smart_link which should already be here from link.py. - #env['LINK'] = '$CC' - env['AR'] = 'xiar' - env['LD'] = 'xild' # not used by default - - # This is not the exact (detailed) compiler version, - # just the major version as determined above or specified - # by the user. It is a float like 80 or 90, in normalized form for Linux - # (i.e. even for Linux 9.0 compiler, still returns 90 rather than 9.0) - if version: - env['INTEL_C_COMPILER_VERSION']=linux_ver_normalize(version) - - if is_windows: - # Look for license file dir - # in system environment, registry, and default location. - envlicdir = os.environ.get("INTEL_LICENSE_FILE", '') - K = ('SOFTWARE\Intel\Licenses') - try: - k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K) - reglicdir = SCons.Util.RegQueryValueEx(k, "w_cpp")[0] - except (AttributeError, SCons.Util.RegError): - reglicdir = "" - defaultlicdir = r'C:\Program Files\Common Files\Intel\Licenses' - - licdir = None - for ld in [envlicdir, reglicdir]: - # If the string contains an '@', then assume it's a network - # license (port@system) and good by definition. - if ld and (string.find(ld, '@') != -1 or os.path.exists(ld)): - licdir = ld - break - if not licdir: - licdir = defaultlicdir - if not os.path.exists(licdir): - class ICLLicenseDirWarning(SCons.Warnings.Warning): - pass - SCons.Warnings.enableWarningClass(ICLLicenseDirWarning) - SCons.Warnings.warn(ICLLicenseDirWarning, - "Intel license dir was not found." - " Tried using the INTEL_LICENSE_FILE environment variable (%s), the registry (%s) and the default path (%s)." - " Using the default path as a last resort." - % (envlicdir, reglicdir, defaultlicdir)) - env['ENV']['INTEL_LICENSE_FILE'] = licdir - -def exists(env): - if not (is_mac or is_linux or is_windows): - # can't handle this platform - return 0 - - try: - versions = get_all_compiler_versions() - except (SCons.Util.RegError, IntelCError): - versions = None - detected = versions is not None and len(versions) > 0 - if not detected: - # try env.Detect, maybe that will work - if is_windows: - return env.Detect('icl') - elif is_linux: - return env.Detect('icc') - elif is_mac: - return env.Detect('icc') - return detected - -# end of file diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.py deleted file mode 100644 index be50b016d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.py +++ /dev/null @@ -1,104 +0,0 @@ -"""SCons.Tool.jar - -Tool-specific initialization for jar. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/jar.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Subst -import SCons.Util - -def jarSources(target, source, env, for_signature): - """Only include sources that are not a manifest file.""" - try: - env['JARCHDIR'] - except KeyError: - jarchdir_set = False - else: - jarchdir_set = True - jarchdir = env.subst('$JARCHDIR', target=target, source=source) - if jarchdir: - jarchdir = env.fs.Dir(jarchdir) - result = [] - for src in source: - contents = src.get_contents() - if contents[:16] != "Manifest-Version": - if jarchdir_set: - _chdir = jarchdir - else: - try: - _chdir = src.attributes.java_classdir - except AttributeError: - _chdir = None - if _chdir: - # If we are changing the dir with -C, then sources should - # be relative to that directory. - src = SCons.Subst.Literal(src.get_path(_chdir)) - result.append('-C') - result.append(_chdir) - result.append(src) - return result - -def jarManifest(target, source, env, for_signature): - """Look in sources for a manifest file, if any.""" - for src in source: - contents = src.get_contents() - if contents[:16] == "Manifest-Version": - return src - return '' - -def jarFlags(target, source, env, for_signature): - """If we have a manifest, make sure that the 'm' - flag is specified.""" - jarflags = env.subst('$JARFLAGS', target=target, source=source) - for src in source: - contents = src.get_contents() - if contents[:16] == "Manifest-Version": - if not 'm' in jarflags: - return jarflags + 'm' - break - return jarflags - -def generate(env): - """Add Builders and construction variables for jar to an Environment.""" - SCons.Tool.CreateJarBuilder(env) - - env['JAR'] = 'jar' - env['JARFLAGS'] = SCons.Util.CLVar('cf') - env['_JARFLAGS'] = jarFlags - env['_JARMANIFEST'] = jarManifest - env['_JARSOURCES'] = jarSources - env['_JARCOM'] = '$JAR $_JARFLAGS $TARGET $_JARMANIFEST $_JARSOURCES' - env['JARCOM'] = "${TEMPFILE('$_JARCOM')}" - env['JARSUFFIX'] = '.jar' - -def exists(env): - return env.Detect('jar') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/jar.pyc deleted file mode 100644 index 68dab440507908cd4d800302b96ac5a7814e92e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3137 zcmcImUvC>l5TCOh$99u8fokGnseBM#dE{g8$P*ug4*6$Oqwss*g-NVBiBVWp!LptYY5<@HrI zeR!-se{ip+YKw~xs&{ME+M=q}9^U`r;r*JjZTKSm6Thu?4q8fh@_6d3QF%niGjsw7 zJi6}f#@8t4hz?3*J|)ldoJXfQioc>gmthGD`xBH-03b#@dgEnIr|4vg%)TthQD3@m zuz8ANqAt;Co{oOu#VgfgRYl$(rFJ? zj{E84tAy~si?MN7)!?pYF`^=j+tDb{$|fVz))rX$PWciyc&mXQhaGL5>V%Q5xB|94 zU2fE$tgJUI$LGyS&oKzjH(l*SO!b9x7`5DNjukDu(8eMdEGN)HeXGoqqW4>UylM<0 zaS9`Aeq^;{fVa&^%a9%ITL;{TI@V?JS_zGt!5c@m5EV|x&N_|<-#HWRj~witMYr!C z`mJ{4TZ^!Emoc(DS&$yc$805WdW^)P9N3ftr!lz^I&J(&%;eLCzU#?X`op1)gEAl5 zKhS-g^(vEJo(=E@Ezu=e&IO2HtbtRZlXLt!0?%csh2S(futz@2IfD z)K>ZTxC0%)bAlDeZ<(z;hpzE1cdv5u0XNstT$HabK{tFoNsKjgEe8^1Qr8wzH*);3 zk>bVx0+W^$8~BS!D?1^r934GMJ^YZF3XIbSQwUih@j-41yu=>H~``(|KBrmcTjU2l{8+8VhoMR00jRYioP_U|H)vm|xZM%wqbt}t#;JAIV|M1==JMA1+G=wf zwJaTIKHF*3SDTj05SI{j^K6s4xxL(YytZwR++(Ua7{>y4fxV=MXDPOK7Hz&vCm|7 z$AytphWf?}-!v3&{g9g*Xi`pL{VB>N5;%FJa--us~6$=_MzarQ{$ zaS=pNq^yD9YD!{lH9p3;m@ST4(GK^ti~kJHXMGe}XSl7cjuFlin_+FsGm~VWxu&jsTHDqA<~@a&s5WIV2+ezeSUASxPU?UvvBmALOs+ RGc(>yrub2@P@E~w{smZ##%urp diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.py deleted file mode 100644 index b8cabe89b..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.py +++ /dev/null @@ -1,228 +0,0 @@ -"""SCons.Tool.javac - -Tool-specific initialization for javac. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/javac.py 3842 2008/12/20 22:59:52 scons" - -import os -import os.path -import string - -import SCons.Action -import SCons.Builder -from SCons.Node.FS import _my_normcase -from SCons.Tool.JavaCommon import parse_java_file -import SCons.Util - -def classname(path): - """Turn a string (path name) into a Java class name.""" - return string.replace(os.path.normpath(path), os.sep, '.') - -def emit_java_classes(target, source, env): - """Create and return lists of source java files - and their corresponding target class files. - """ - java_suffix = env.get('JAVASUFFIX', '.java') - class_suffix = env.get('JAVACLASSSUFFIX', '.class') - - target[0].must_be_same(SCons.Node.FS.Dir) - classdir = target[0] - - s = source[0].rentry().disambiguate() - if isinstance(s, SCons.Node.FS.File): - sourcedir = s.dir.rdir() - elif isinstance(s, SCons.Node.FS.Dir): - sourcedir = s.rdir() - else: - raise SCons.Errors.UserError("Java source must be File or Dir, not '%s'" % s.__class__) - - slist = [] - js = _my_normcase(java_suffix) - find_java = lambda n, js=js, ljs=len(js): _my_normcase(n[-ljs:]) == js - for entry in source: - entry = entry.rentry().disambiguate() - if isinstance(entry, SCons.Node.FS.File): - slist.append(entry) - elif isinstance(entry, SCons.Node.FS.Dir): - result = SCons.Util.OrderedDict() - def visit(arg, dirname, names, fj=find_java, dirnode=entry.rdir()): - java_files = filter(fj, names) - # The on-disk entries come back in arbitrary order. Sort - # them so our target and source lists are determinate. - java_files.sort() - mydir = dirnode.Dir(dirname) - java_paths = map(lambda f, d=mydir: d.File(f), java_files) - for jp in java_paths: - arg[jp] = True - - os.path.walk(entry.rdir().get_abspath(), visit, result) - entry.walk(visit, result) - - slist.extend(result.keys()) - else: - raise SCons.Errors.UserError("Java source must be File or Dir, not '%s'" % entry.__class__) - - version = env.get('JAVAVERSION', '1.4') - full_tlist = [] - for f in slist: - tlist = [] - source_file_based = True - pkg_dir = None - if not f.is_derived(): - pkg_dir, classes = parse_java_file(f.rfile().get_abspath(), version) - if classes: - source_file_based = False - if pkg_dir: - d = target[0].Dir(pkg_dir) - p = pkg_dir + os.sep - else: - d = target[0] - p = '' - for c in classes: - t = d.File(c + class_suffix) - t.attributes.java_classdir = classdir - t.attributes.java_sourcedir = sourcedir - t.attributes.java_classname = classname(p + c) - tlist.append(t) - - if source_file_based: - base = f.name[:-len(java_suffix)] - if pkg_dir: - t = target[0].Dir(pkg_dir).File(base + class_suffix) - else: - t = target[0].File(base + class_suffix) - t.attributes.java_classdir = classdir - t.attributes.java_sourcedir = f.dir - t.attributes.java_classname = classname(base) - tlist.append(t) - - for t in tlist: - t.set_specific_source([f]) - - full_tlist.extend(tlist) - - return full_tlist, slist - -JavaAction = SCons.Action.Action('$JAVACCOM', '$JAVACCOMSTR') - -JavaBuilder = SCons.Builder.Builder(action = JavaAction, - emitter = emit_java_classes, - target_factory = SCons.Node.FS.Entry, - source_factory = SCons.Node.FS.Entry) - -class pathopt: - """ - Callable object for generating javac-style path options from - a construction variable (e.g. -classpath, -sourcepath). - """ - def __init__(self, opt, var, default=None): - self.opt = opt - self.var = var - self.default = default - - def __call__(self, target, source, env, for_signature): - path = env[self.var] - if path and not SCons.Util.is_List(path): - path = [path] - if self.default: - path = path + [ env[self.default] ] - if path: - return [self.opt, string.join(path, os.pathsep)] - #return self.opt + " " + string.join(path, os.pathsep) - else: - return [] - #return "" - -def Java(env, target, source, *args, **kw): - """ - A pseudo-Builder wrapper around the separate JavaClass{File,Dir} - Builders. - """ - if not SCons.Util.is_List(target): - target = [target] - if not SCons.Util.is_List(source): - source = [source] - - # Pad the target list with repetitions of the last element in the - # list so we have a target for every source element. - target = target + ([target[-1]] * (len(source) - len(target))) - - java_suffix = env.subst('$JAVASUFFIX') - result = [] - - for t, s in zip(target, source): - if isinstance(s, SCons.Node.FS.Base): - if isinstance(s, SCons.Node.FS.File): - b = env.JavaClassFile - else: - b = env.JavaClassDir - else: - if os.path.isfile(s): - b = env.JavaClassFile - elif os.path.isdir(s): - b = env.JavaClassDir - elif s[-len(java_suffix):] == java_suffix: - b = env.JavaClassFile - else: - b = env.JavaClassDir - result.extend(apply(b, (t, s) + args, kw)) - - return result - -def generate(env): - """Add Builders and construction variables for javac to an Environment.""" - java_file = SCons.Tool.CreateJavaFileBuilder(env) - java_class = SCons.Tool.CreateJavaClassFileBuilder(env) - java_class_dir = SCons.Tool.CreateJavaClassDirBuilder(env) - java_class.add_emitter(None, emit_java_classes) - java_class.add_emitter(env.subst('$JAVASUFFIX'), emit_java_classes) - java_class_dir.emitter = emit_java_classes - - env.AddMethod(Java) - - env['JAVAC'] = 'javac' - env['JAVACFLAGS'] = SCons.Util.CLVar('') - env['JAVABOOTCLASSPATH'] = [] - env['JAVACLASSPATH'] = [] - env['JAVASOURCEPATH'] = [] - env['_javapathopt'] = pathopt - env['_JAVABOOTCLASSPATH'] = '${_javapathopt("-bootclasspath", "JAVABOOTCLASSPATH")} ' - env['_JAVACLASSPATH'] = '${_javapathopt("-classpath", "JAVACLASSPATH")} ' - env['_JAVASOURCEPATH'] = '${_javapathopt("-sourcepath", "JAVASOURCEPATH", "_JAVASOURCEPATHDEFAULT")} ' - env['_JAVASOURCEPATHDEFAULT'] = '${TARGET.attributes.java_sourcedir}' - env['_JAVACCOM'] = '$JAVAC $JAVACFLAGS $_JAVABOOTCLASSPATH $_JAVACLASSPATH -d ${TARGET.attributes.java_classdir} $_JAVASOURCEPATH $SOURCES' - env['JAVACCOM'] = "${TEMPFILE('$_JAVACCOM')}" - env['JAVACLASSSUFFIX'] = '.class' - env['JAVASUFFIX'] = '.java' - -def exists(env): - return 1 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javac.pyc deleted file mode 100644 index 126a2a8ba08a643b2d1ff39cc9207c65cfc6870e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7873 zcmcIpOLH7o6~5ggjXWdCdP|l`aL0C{F<2v8Ngzp?RAfDZjV-5Ia-4{mrZwG?dOXuT z?%N|v$;>8B0V|-24S#?&8x|DBA7I0dqKYbt1(iKjRHfL#_nkWr`N1x>+*jwG`#R^` z^SsLad$gE;?XR~hs`Iaa-|ykmc}uB4sU5VI+Obq%t01Rpw%P$;;M@s#KceVh*z~dYh|JBaFL3Or3WfwYt-`#jj`4qRN(BY= z7$l4faza%nR8UmmxC(|+ZQwHACi<8kFup69SJE3+YhY1pXwl@JFjmFSE#alh;o0J0*T96CB|2um(E zDB&}Wz6oflkw%Ap7A|G=#!{RF;o{+y@*Cy1mNE!aFNv&7yI4yqer@q;dAWS$c>>R9 zhC(?RDx;%GnX)US;ViyEe5?5M?}2GSUSg*(ESN_-*Tv*iFd!HaC2Vf~q;#u;l&%FK zbEG|}S}=3Y$H_7 zji@S2JTF71)hy`v+*12E@07~MR4Yfy+6C1rsBD}qx^xI&uBeW_B&BQj|E}7@sx_>h zpm$iPK>HNE-?3V!=r1szOh5eUnR$lVKUiETE`;ols8&(V5c=VPNW!Sfrd4%DRcHG{ z)j7(cHL6-8)KiOeVc7I-^l|zb4p!$mu}cHa>WKm?dZGY*_d3^FppWCVo)!U(siQw~ zx3&Afv)bc=no!wU)t;pPYfq`xxT?OyGxV2s_Of)p$!>?j)7_t z4lDR=arq1ycy@>%Dm{FT;Jt4$+=V!Yz+Sn@nQRuGLtyPJCMa9w>@ct z7bY&3>LP^Uw<=Lg5=)_KS(pkz8VQVC8?-`x*ZqbJY^TkzM4<{6iYlQO=?#Ni#;piw zx%s_nZxDf0w6~W!Xqj6-#>)NxBeYpsZM-n<<>13eN7-#qtC{R5Yb;l^#;h4@)XIj@ zr;&ZQ?rz<Z)ZOIU}6N}@zF@^(W{clnpxOJuc4uBiwcTdtT7O)?GR zEIpQ`L4-xS(S8$dLxcdLVx9SMC3MHT=TJaY;FJJ2SWnX=)skJ@)nO`K>3N=5yXT1+ z3XwG&#x;JU5ypY+b2q~+lgB%0fOIxkiz=DRdy{NPraba%4`d2>^!!~di4(U8kFxGI z55i;Z&H>lqH12ZXVb|y|3|zVek#$NJCeVgo)1gaa6?Xj$Y2R)$gSyZ{L^p&5vU<9U zG42W|SJbYD@1<5kfvDdU)@ab&P3Aqbw!~yha4w z2SKWP#F0011wHD7K~0bEk{P*?y(kVOTb4m{@kR%9vzEE9a2_+)!!Xsz=S3)c&05XN zWSS_v1^W#y-{Ph0&snOkwSaHEYdbmuX-w*mLNQVefH!)S9*@Y)!?vNSj_=y>nYEzSrB@c8!Hd zMI{m>@$`e#G@~%yo?polSS?ZAE9jsoa~ep}$SMHkA8r0RK79dAh)NiVFIuU%O++z; z_7^}7DtD_y1J|FUkvPAK!qDGkRNk$k(vuog%0ZN*NDru{l|`K$V+K!la5S_>J9}wT zH;Dxj3OJIqY0AVyKaFI+Qdr(EJBxBBTzT19G~BRr$s`#S(!!5Stm4z>&>(stba?;} zA_1U__y_;DQ}T!HHl*JH>8!RK=pI^hZ(XTS{M} zO>xu~MUuQ4PJ+q<8^RbS5s<|6%=8>~p&rRg9fqJ^P#q+!NB?55prOhG!rJ|RNQF2g zsVa(e6y;bpq^e!5OaDeyd;%{uYWin6099c@J-p7R1(dgd;{z%U%3D0+VHM6!|I?ot z-|UW}wlt%&C)Qq;gSzH3d=Bc5;vs!orpQq-YQ64Je3n2#jB*x8*ou@|u&X&F=_t%` zwDs^OD6aExJ=A~w5gKuQD^5d)%^+F4-i&HUMVv<|lb_V_@w8^@EeB@dr!3WO!jrD@ zZRs;6;Fs5;v@M%-)@tJs!utj< zMM_L!BoUqakJ zV~yA&i1>nsOBk^W)`DGObQ!=$fv)1y6Hi!~)KoBwj%7i~494zax{r{ZM>V`do~1WM z1!%!o_(}rB!^5Y5gG=B*C{}wfXwI^AoDyk0SG35(J4T9=K(YW2+u8m<^Z7_1vC%n zEG*$06b&8xN)R|*9hO&y=cWTl7`l(!e6{vtXFWcQ(j=}UQ!PKO@SY?=y zp0`aund*|&XO0-zqmNo!-&nbOYg>+BN&eKZWRDj=+g@?sU*9hGizRvT>6A9G|8_R} z?Ap%O`jBLb+#T~v?#Q|LtYA909*53i;QZgiMP59+v#QUNbJ4(CrX-c4nRL&KytdbG zf3R`m)_Q5dP{4eA;Zj?k=zCM?e@WN(Z$e< zcGMqlswYRp*`FLHS^b4F43FDg%;Wta@H!QNNjE+Q(yg)iAsS&5_I6wT6yrW3UXnFB ztN4zpUGe7albkXpkooBF!ctbrQVgAK2L!}9i_}=UjQo+8Bnf4r%XBbqt~<^A*=_Z+<>+vo=ReM>~!m#Pfl|-5IIrQK8#YbA^kA Gv;PAJLEbh1 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.py deleted file mode 100644 index 3a39aebca..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.py +++ /dev/null @@ -1,132 +0,0 @@ -"""SCons.Tool.javah - -Tool-specific initialization for javah. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/javah.py 3842 2008/12/20 22:59:52 scons" - -import os.path -import string - -import SCons.Action -import SCons.Builder -import SCons.Node.FS -import SCons.Tool.javac -import SCons.Util - -def emit_java_headers(target, source, env): - """Create and return lists of Java stub header files that will - be created from a set of class files. - """ - class_suffix = env.get('JAVACLASSSUFFIX', '.class') - classdir = env.get('JAVACLASSDIR') - - if not classdir: - try: - s = source[0] - except IndexError: - classdir = '.' - else: - try: - classdir = s.attributes.java_classdir - except AttributeError: - classdir = '.' - classdir = env.Dir(classdir).rdir() - - if str(classdir) == '.': - c_ = None - else: - c_ = str(classdir) + os.sep - - slist = [] - for src in source: - try: - classname = src.attributes.java_classname - except AttributeError: - classname = str(src) - if c_ and classname[:len(c_)] == c_: - classname = classname[len(c_):] - if class_suffix and classname[-len(class_suffix):] == class_suffix: - classname = classname[:-len(class_suffix)] - classname = SCons.Tool.javac.classname(classname) - s = src.rfile() - s.attributes.java_classname = classname - slist.append(s) - - s = source[0].rfile() - if not hasattr(s.attributes, 'java_classdir'): - s.attributes.java_classdir = classdir - - if target[0].__class__ is SCons.Node.FS.File: - tlist = target - else: - if not isinstance(target[0], SCons.Node.FS.Dir): - target[0].__class__ = SCons.Node.FS.Dir - target[0]._morph() - tlist = [] - for s in source: - fname = string.replace(s.attributes.java_classname, '.', '_') + '.h' - t = target[0].File(fname) - t.attributes.java_lookupdir = target[0] - tlist.append(t) - - return tlist, source - -def JavaHOutFlagGenerator(target, source, env, for_signature): - try: - t = target[0] - except (AttributeError, TypeError): - t = target - try: - return '-d ' + str(t.attributes.java_lookupdir) - except AttributeError: - return '-o ' + str(t) - -def getJavaHClassPath(env,target, source, for_signature): - path = "${SOURCE.attributes.java_classdir}" - if env.has_key('JAVACLASSPATH') and env['JAVACLASSPATH']: - path = SCons.Util.AppendPath(path, env['JAVACLASSPATH']) - return "-classpath %s" % (path) - -def generate(env): - """Add Builders and construction variables for javah to an Environment.""" - java_javah = SCons.Tool.CreateJavaHBuilder(env) - java_javah.emitter = emit_java_headers - - env['_JAVAHOUTFLAG'] = JavaHOutFlagGenerator - env['JAVAH'] = 'javah' - env['JAVAHFLAGS'] = SCons.Util.CLVar('') - env['_JAVAHCLASSPATH'] = getJavaHClassPath - env['JAVAHCOM'] = '$JAVAH $JAVAHFLAGS $_JAVAHOUTFLAG $_JAVAHCLASSPATH ${SOURCES.attributes.java_classname}' - env['JAVACLASSSUFFIX'] = '.class' - -def exists(env): - return env.Detect('javah') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/javah.pyc deleted file mode 100644 index 0f4e8d94e20f976314dac7fb17d42dd144eb8174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3930 zcmcIn-EtdA6+R=$vNZmQ6DM)JIHZ99q6$l1?=F=Mfx>IYo20VN)+k=PT(wM1G;M3- z@r*Lv^4cI>nHPY!*eV`{3%H=*J*eUqzH?f#9cnL$UDI>=%-7xL|Fp{gn)9na`NtO> z8vm8>{tX`UM+`C10Y;AwJc>&cmnkjLL3u(~=%6y8r|6(Mp{K9WwQF?!8tn^Rp+De= z8H%Tbn5DQX#2m%bLd;WK6XFJ+-fq-cw7+9$Z|0e4zRvTs*^5r2uJ1FwYWlj993~x= zWQk3pH2Ga*lRQ(0d7%W?1hA_Mt+Kp0iPH33nQlHv^95iShy2yyLk-B%&%CzqSMmZQIhGFENU^n<%I8_tB)Riysp;Q)*iJ!TyL$fsrB{8 zpM3iGlXYb}ut@SB{Oxqg*k=w;70)K``7Qi9EKyIq30Gc}XjGnX%5>q;s6xXEnIWCe z(-7{i(DG=C_Od0aSdWf^{{D~S$p7BY(jp9ef?J&)rdu?i3l?^ zszca6U5aoDSv@|WCd$=mSfygs8`jCrG7UKtUVQAk+y~f*1uj$Z+X-9@H1hyF#{Umn zxdnEPdh^t~K|KgnA0L`|w9gXW6pdj3$RRchXJ|N0y<0qmDBjz@(B9bUmtea%1|uop zFY`AK_8TuRi;VCl+|;{GeE1#e-KE|V9oMM%w>N~fe9FEhdyhaf?h1r6vEQeq>zpwt zygh;UmRV>IwqVQqboRBg{4OCb><85Q-dLEPnui65p^TOQVTqEdWWIxx0A|5x58Uev35b@JIKOXdgihZ;yn1O7U*_^X_9*XMmLIS|Y+pMx(@7#!>eJpCaLKf)lHh*lq(b7Pn2jG6g=SiEH?l_EOP^g7cfB^uh8AGMGf2H;qTk8c7x5Q&8xy9m!!-3G!jEy zR=Y1ZUOzLOUaOKT{m6FJkBzu!lI-EJJ`XrjC8u|7l1ff*NJaP(3!FRH3Bi?5T9XC5 z<@@sj%Y}*{j@abF&H}v!({L0K;(i&q(cwJiDp|%OmS-m+zI$R_*cE0Ud0eT{heBLW z(67ZcPv8=!%JhWcRq9Q1Lj|0$H*J{u${ zT9%Q<#@9Am4BS=lG%Awl4L7pO8!KN$qf9-`PLm?fPEf#I#|hbg&tC1m-hR39`DF#~ z3MHQ)EA->iD^rHGrOmmO(&)tXdw@I?jB+o5s)z5KFqvL1Q8UyjWba50oX5v+j`e8gPIqL*JqMeqwu8|+?J z30Q3@s64#K*y9M3J3gAhH=te8OL6v*^mp<2F7zhhC!xpLhVbBY_c)N+BKl772>b>k zrM+!wi=PNG7p>l33UL?EXMDH103|mU@)}&g#PDGl=N&Y7j^Z#Z^eLKoo`J#TI5$ns z?|^j*zRyb-=6>*ONLahd!QUNs>{zKnj>ETxCT{_9nk_%>zf^x*_v_XA?0*4mJ8SI# diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.py deleted file mode 100644 index 549f6d374..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.py +++ /dev/null @@ -1,76 +0,0 @@ -"""SCons.Tool.latex - -Tool-specific initialization for LaTeX. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/latex.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Action -import SCons.Defaults -import SCons.Scanner.LaTeX -import SCons.Util -import SCons.Tool -import SCons.Tool.tex - -LaTeXAction = None - -def LaTeXAuxFunction(target = None, source= None, env=None): - result = SCons.Tool.tex.InternalLaTeXAuxAction( LaTeXAction, target, source, env ) - return result - -LaTeXAuxAction = SCons.Action.Action(LaTeXAuxFunction, - strfunction=SCons.Tool.tex.TeXLaTeXStrFunction) - -def generate(env): - """Add Builders and construction variables for LaTeX to an Environment.""" - global LaTeXAction - if LaTeXAction is None: - LaTeXAction = SCons.Action.Action('$LATEXCOM', '$LATEXCOMSTR') - - import dvi - dvi.generate(env) - - import pdf - pdf.generate(env) - - bld = env['BUILDERS']['DVI'] - bld.add_action('.ltx', LaTeXAuxAction) - bld.add_action('.latex', LaTeXAuxAction) - bld.add_emitter('.ltx', SCons.Tool.tex.tex_eps_emitter) - bld.add_emitter('.latex', SCons.Tool.tex.tex_eps_emitter) - - env['LATEX'] = 'latex' - env['LATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode') - env['LATEXCOM'] = 'cd ${TARGET.dir} && $LATEX $LATEXFLAGS ${SOURCE.file}' - env['LATEXRETRIES'] = 3 - -def exists(env): - return env.Detect('latex') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/latex.pyc deleted file mode 100644 index 9cb4881413fa0e608257ca8d4d1fccee596ee9df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2249 zcmcIlUvC>l5T83cj^q4ofYR_#RwxSQ!ROQ@Qm9&lo48dVO{KF_Re7;4x9fP#`p&vt zn*@@l^qcUR5Z{6qJ^;+j*~CITQrkB-yE8jGGyD6k3xBRwN;|*5j$!&K;`=*%?5`*! zz&T0}&OMMm$O0H2&I>cWIHxbn>7_Y+aZWF@UVx}Vp{Bngyf47{GN=L!R_LdeK`!uc z6$WcCScf~$JKq3Vg7=uu1CWcXY*K`FwM@zWhN69#CN}7#sR>Nv)K#TIdd-ehta~~Z zI?+x?M*kc+ohG7}X5u93sCNN6_En}tl4irmm}_DC>Db8ROD8Urh>~lOC?$nUg&vO5 z%n8@mRt!@)HcCjHso0t8pmOZQPudtUwquThYjb~E+t1SRWgp*4T&hH6n9p3klxX#< zid6<~ktFi|Z=6)QPI|qB{B4xyWF2Extb3Ylz0~?m_)Yqu$sRjmFdc zZ=UWqgpIKy`Y-&P#s!Q+XS;yUA;tUxg##FPFz{he09S+?fEy2Pe7GyZZ2@kmy&k%q zR%w+Z!TX~t0OjB)Dz@4^#P@OHRF*`Bo7x;-HMtbGjHY~w$5mSEN+hD}QaM&_I?iIn z(Nr?wsZ80iaaHsK7WRA8>Z43g@NDaDII1V9RJF-&uooQE9VTPzTyHLGCXFLgdlEE) z-T!Ku+rV(MOka)@&aH-XmhuDdvB!y9m-VK`m^wj5s+l|Z2P)V>S%e?UkZptGK4L48 zFvylWA0mJR9dM=y278Ll#da@HqwhTMriK#S`qcG%1KN=STZs6r{2T_0gnCz|pdOwJ zjmz`nCAMRX3JjKsMKeb!Yhr4%p5+DMgIq=*y*HJ6QZ_)elsM;AufdzKM>qC~WkiO$kws1g_0B@DEE((JU} z9lm*OSLR3UPM8B1YX*36c6@Tw3fqj3qqoO=NP%%zmVlJgo#DxxV2#7tM`*5T0%pXS zJx?gjbcEzpu7XB(dwJ4))wcUMjHTHArPB;wwK@SZ`&R7ih&;pTi(S#D{pKt@Yy~}S z)GentD?>9Ss1}|HTb=N@)vm7NM99!5ahfJ7#CJ}FDN$&loM?{5cLV~R3m(ZH=Nd`b z&C76W=sQF29M8x@4Yk91LxOAQ(;l=plC-Nvc4lP;pE+%~SBEEWql}3eF4C%xNf4!Z z`wJsK7!AWuaF;!N>|+#ASn(eDE8Z$UYu*Nax4bRC;yv^#9uttNqN139tEeDi2iP}{ z(A%z(=`^HyzPR`%IZ_U9RUUJBAFLSOO<^fMrDVXXeuUCdU%OqI#@((XaCEzw znrMr6{d6M#H^|R2hX$Q-K6|8k5nhJYQK)>X9Y+cNjRXt=Mn^u+XG*}%hkQxj2clts zPzX2CgW(tw2SbWG2N)XSA0x+ZyKHtnhQua5vG8-$?)%8v|9wH1af@g9pX|4kr2Py< VX{&_T_~+}F{LSLJx9Kl^`ZriS4-fzV diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.py deleted file mode 100644 index f2e0e856d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.py +++ /dev/null @@ -1,93 +0,0 @@ -"""SCons.Tool.lex - -Tool-specific initialization for lex. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/lex.py 3842 2008/12/20 22:59:52 scons" - -import os.path - -import string - -import SCons.Action -import SCons.Tool -import SCons.Util - -LexAction = SCons.Action.Action("$LEXCOM", "$LEXCOMSTR") - -def lexEmitter(target, source, env): - sourceBase, sourceExt = os.path.splitext(SCons.Util.to_String(source[0])) - - if sourceExt == ".lm": # If using Objective-C - target = [sourceBase + ".m"] # the extension is ".m". - - # This emitter essentially tries to add to the target all extra - # files generated by flex. - - # Different options that are used to trigger the creation of extra files. - fileGenOptions = ["--header-file=", "--tables-file="] - - lexflags = env.subst("$LEXFLAGS", target=target, source=source) - for option in SCons.Util.CLVar(lexflags): - for fileGenOption in fileGenOptions: - l = len(fileGenOption) - if option[:l] == fileGenOption: - # A file generating option is present, so add the - # file name to the target list. - fileName = string.strip(option[l:]) - target.append(fileName) - return (target, source) - -def generate(env): - """Add Builders and construction variables for lex to an Environment.""" - c_file, cxx_file = SCons.Tool.createCFileBuilders(env) - - # C - c_file.add_action(".l", LexAction) - c_file.add_emitter(".l", lexEmitter) - - c_file.add_action(".lex", LexAction) - c_file.add_emitter(".lex", lexEmitter) - - # Objective-C - cxx_file.add_action(".lm", LexAction) - cxx_file.add_emitter(".lm", lexEmitter) - - # C++ - cxx_file.add_action(".ll", LexAction) - cxx_file.add_emitter(".ll", lexEmitter) - - env["LEX"] = env.Detect("flex") or "lex" - env["LEXFLAGS"] = SCons.Util.CLVar("") - env["LEXCOM"] = "$LEX $LEXFLAGS -t $SOURCES > $TARGET" - -def exists(env): - return env.Detect(["flex", "lex"]) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/lex.pyc deleted file mode 100644 index f19c2694e353484ef032d2366761a0f0f81dc15c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/linkloc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/linkloc.py deleted file mode 100644 index b0550c6e3..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/linkloc.py +++ /dev/null @@ -1,105 +0,0 @@ -"""SCons.Tool.linkloc - -Tool specification for the LinkLoc linker for the Phar Lap ETS embedded -operating system. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/linkloc.py 3842 2008/12/20 22:59:52 scons" - -import os.path -import re - -import SCons.Action -import SCons.Defaults -import SCons.Errors -import SCons.Tool -import SCons.Util - -from SCons.Tool.msvc import get_msvc_paths -from SCons.Tool.PharLapCommon import addPharLapPaths - -_re_linker_command = re.compile(r'(\s)@\s*([^\s]+)') - -def repl_linker_command(m): - # Replaces any linker command file directives (e.g. "@foo.lnk") with - # the actual contents of the file. - try: - f=open(m.group(2), "r") - return m.group(1) + f.read() - except IOError: - # the linker should return an error if it can't - # find the linker command file so we will remain quiet. - # However, we will replace the @ with a # so we will not continue - # to find it with recursive substitution - return m.group(1) + '#' + m.group(2) - -class LinklocGenerator: - def __init__(self, cmdline): - self.cmdline = cmdline - - def __call__(self, env, target, source, for_signature): - if for_signature: - # Expand the contents of any linker command files recursively - subs = 1 - strsub = env.subst(self.cmdline, target=target, source=source) - while subs: - strsub, subs = _re_linker_command.subn(repl_linker_command, strsub) - return strsub - else: - return "${TEMPFILE('" + self.cmdline + "')}" - -def generate(env): - """Add Builders and construction variables for ar to an Environment.""" - SCons.Tool.createSharedLibBuilder(env) - SCons.Tool.createProgBuilder(env) - - env['SUBST_CMD_FILE'] = LinklocGenerator - env['SHLINK'] = '$LINK' - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS') - env['SHLINKCOM'] = '${SUBST_CMD_FILE("$SHLINK $SHLINKFLAGS $( $_LIBDIRFLAGS $) $_LIBFLAGS -dll $TARGET $SOURCES")}' - env['SHLIBEMITTER']= None - env['LINK'] = "linkloc" - env['LINKFLAGS'] = SCons.Util.CLVar('') - env['LINKCOM'] = '${SUBST_CMD_FILE("$LINK $LINKFLAGS $( $_LIBDIRFLAGS $) $_LIBFLAGS -exe $TARGET $SOURCES")}' - env['LIBDIRPREFIX']='-libpath ' - env['LIBDIRSUFFIX']='' - env['LIBLINKPREFIX']='-lib ' - env['LIBLINKSUFFIX']='$LIBSUFFIX' - - msvs_version = env.get('MSVS_VERSION') - include_path, lib_path, exe_path = get_msvc_paths(env, version = msvs_version) - env['ENV']['LIB'] = lib_path - env.PrependENVPath('PATH', exe_path) - - addPharLapPaths(env) - -def exists(env): - return env.Detect('linkloc') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.py deleted file mode 100644 index 0d81d7146..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.py +++ /dev/null @@ -1,57 +0,0 @@ -"""SCons.Tool.m4 - -Tool-specific initialization for m4. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/m4.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Action -import SCons.Builder -import SCons.Util - -def generate(env): - """Add Builders and construction variables for m4 to an Environment.""" - M4Action = SCons.Action.Action('$M4COM', '$M4COMSTR') - bld = SCons.Builder.Builder(action = M4Action, src_suffix = '.m4') - - env['BUILDERS']['M4'] = bld - - # .m4 files might include other files, and it would be pretty hard - # to write a scanner for it, so let's just cd to the dir of the m4 - # file and run from there. - # The src_suffix setup is like so: file.c.m4 -> file.c, - # file.cpp.m4 -> file.cpp etc. - env['M4'] = 'm4' - env['M4FLAGS'] = SCons.Util.CLVar('-E') - env['M4COM'] = 'cd ${SOURCE.rsrcdir} && $M4 $M4FLAGS < ${SOURCE.file} > ${TARGET.abspath}' - -def exists(env): - return env.Detect('m4') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/m4.pyc deleted file mode 100644 index 49959841450227ddec0140e4e413b7df7107276c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 zcmcIkPfy!06nE0nLI!L*Y!ceV2gI^NlhPHbLkO*uf{-XkY1x5GmBuc0pJm_Nc$CmcaGu`d?B-# z>ru*pncBy|vdHJjjYzm}Hu-4p1M|t8zHiiPv{tP){N0*gtI}F+fA7QoUX7{<5+Q!U za}inKqyS?DMhhKE5Soy&g)bx@GJkKAg=LgB8Jj}ffxd`&z9;s=CU@{crAlOrmB|5H zH7h{qr$EMFxkm0Sqjli>GlSLvZ9siC@zf@WCS&wyDkS5Xg4{BSG<7!3I} zb1@E$f+sT*OsBrwh{}OvE=@rMa3x?VN0qrt2cN^NG>*A-2 z0Hboz(u94?HFUgL2k7%Z@yE{Kw?b*v0Ay-SEO!-IV8;7>mPY-)Mh5+U#%DsoC0r`< zYnrDyKx>Vm<=Tf*VY}rTELiXymcdI9kKq{f&uem!{|O!9Juo#XZI$eG3x4+6i{BN@ BRfGTl diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/masm.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/masm.py deleted file mode 100644 index 850890087..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/masm.py +++ /dev/null @@ -1,71 +0,0 @@ -"""SCons.Tool.masm - -Tool-specific initialization for the Microsoft Assembler. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/masm.py 3842 2008/12/20 22:59:52 scons" - -import SCons.Defaults -import SCons.Tool -import SCons.Util - -ASSuffixes = ['.s', '.asm', '.ASM'] -ASPPSuffixes = ['.spp', '.SPP', '.sx'] -if SCons.Util.case_sensitive_suffixes('.s', '.S'): - ASPPSuffixes.extend(['.S']) -else: - ASSuffixes.extend(['.S']) - -def generate(env): - """Add Builders and construction variables for masm to an Environment.""" - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - for suffix in ASSuffixes: - static_obj.add_action(suffix, SCons.Defaults.ASAction) - shared_obj.add_action(suffix, SCons.Defaults.ASAction) - static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter) - shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter) - - for suffix in ASPPSuffixes: - static_obj.add_action(suffix, SCons.Defaults.ASPPAction) - shared_obj.add_action(suffix, SCons.Defaults.ASPPAction) - static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter) - shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter) - - env['AS'] = 'ml' - env['ASFLAGS'] = SCons.Util.CLVar('/nologo') - env['ASPPFLAGS'] = '$ASFLAGS' - env['ASCOM'] = '$AS $ASFLAGS /c /Fo$TARGET $SOURCES' - env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c /Fo$TARGET $SOURCES' - env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 - -def exists(env): - return env.Detect('ml') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.py deleted file mode 100644 index df1bf9a5d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.py +++ /dev/null @@ -1,90 +0,0 @@ -"""SCons.Tool.midl - -Tool-specific initialization for midl (Microsoft IDL compiler). - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/midl.py 3842 2008/12/20 22:59:52 scons" - -import string - -import SCons.Action -import SCons.Builder -import SCons.Defaults -import SCons.Scanner.IDL -import SCons.Util - -def midl_emitter(target, source, env): - """Produces a list of outputs from the MIDL compiler""" - base, ext = SCons.Util.splitext(str(target[0])) - tlb = target[0] - incl = base + '.h' - interface = base + '_i.c' - t = [tlb, incl, interface] - - midlcom = env['MIDLCOM'] - - if string.find(midlcom, '/proxy') != -1: - proxy = base + '_p.c' - t.append(proxy) - if string.find(midlcom, '/dlldata') != -1: - dlldata = base + '_data.c' - t.append(dlldata) - - return (t,source) - -idl_scanner = SCons.Scanner.IDL.IDLScan() - -midl_action = SCons.Action.Action('$MIDLCOM', '$MIDLCOMSTR') - -midl_builder = SCons.Builder.Builder(action = midl_action, - src_suffix = '.idl', - suffix='.tlb', - emitter = midl_emitter, - source_scanner = idl_scanner) - -def generate(env): - """Add Builders and construction variables for midl to an Environment.""" - - env['MIDL'] = 'MIDL.EXE' - env['MIDLFLAGS'] = SCons.Util.CLVar('/nologo') - env['MIDLCOM'] = '$MIDL $MIDLFLAGS /tlb ${TARGETS[0]} /h ${TARGETS[1]} /iid ${TARGETS[2]} /proxy ${TARGETS[3]} /dlldata ${TARGETS[4]} $SOURCE 2> NUL' - env['BUILDERS']['TypeLibrary'] = midl_builder - -def exists(env): - if not env['PLATFORM'] in ('win32', 'cygwin'): - return 0 - - import SCons.Tool.msvs - if SCons.Tool.msvs.is_msvs_installed(): - # there's at least one version of MSVS installed, which comes with midl: - return 1 - else: - return env.Detect('midl') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/midl.pyc deleted file mode 100644 index b6d7e23ddc656df008919de1f1c31c6eeb0b48f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2695 zcmcIm&2HO95FSyo{`?y!{c$f{1VO75HDxPFkp@Ok$94h(vYkqHQMfG#n!A!#p-5qO zrC6?U);~?t*dJ&aSF5CM+M$YcM@K>@+UYRXKZj1IiRh$8kejF->Byuu z?Kp9`-xN_g80uJ=`#vV0CgzIT5 z2B{pyN=R)~26J#^x=j$<*hBhG@cnLow$OgifJ@K=ehN|eEU&K-jeP`h8XD#l#2 z>49>+RN~I;4xQRWb(M5=qUsz}C;vJf${$X|gU1gWqOrC0xW3(}H?~Bh@#N9hPaZXd zjj&GoU;G?Lc}%l}R{^g*N=e9Y0R0^FJ#cxrVu)J3cqGQql zm;Y$K`5J@3dMNy!rP>7Ak6Z~Aa@#vOvPIPELz7-kxRROE(2s1HZpb*6p$jcV1f=;< zjdZtwf_sGr12}U!b`)TTv3BaxVZm|XjHC4UtCKD}c61`y77m9hku_==uU%-m%4P29 z$V7@WsASAx7onXQW~p6#!8ddg#jb)$bmElhgcz5jlzc=25KaN_l~2gl*^z4K1}y9$ zYFGk24xOsI!LXjBQf-d6{D=PIxTJKWTl zxVE350Pk+D%HLJ5>V1sbT8^d1wZ3=V5hAziMfbdZ`5!elML4#J(ZBHqs? zsstOzbvsCQGn7)QT`9%0k&dM@h}1+P6(xv)Q8xPH(CF|YMiAdH7cx(nh=XLTO_~f; z;(V?M6~sUI{(w783x*+fCr-O5cb$ySo4YUC_E&r^7frBaqo`vY#JyimcUvzGPTN0h z{WKNz-kf2Z3|h-MQ-e$lmO0}CGR|-_XMTw0d+n36*4}|=JQc@h%@*zgco3eQ9X9t5 zT5U(&Je>?xQ(u_SOpa?bFD= 8.0 and env.get('WINDOWS_INSERT_MANIFEST', 0): - # MSVC 8 automatically generates .manifest files that must be installed - extratargets.append( - env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "WINDOWSSHLIBMANIFESTPREFIX", "WINDOWSSHLIBMANIFESTSUFFIX")) - - if env.has_key('PDB') and env['PDB']: - pdb = env.arg2nodes('$PDB', target=target, source=source)[0] - extratargets.append(pdb) - target[0].attributes.pdb = pdb - - if not no_import_lib and \ - not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"): - # Append an import library to the list of targets. - extratargets.append( - env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "LIBPREFIX", "LIBSUFFIX")) - # and .exp file is created if there are exports from a DLL - extratargets.append( - env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "WINDOWSEXPPREFIX", "WINDOWSEXPSUFFIX")) - - return (target+extratargets, source+extrasources) - -def prog_emitter(target, source, env): - SCons.Tool.msvc.validate_vars(env) - - extratargets = [] - - exe = env.FindIxes(target, "PROGPREFIX", "PROGSUFFIX") - if not exe: - raise SCons.Errors.UserError, "An executable should have exactly one target with the suffix: %s" % env.subst("$PROGSUFFIX") - - version_num, suite = SCons.Tool.msvs.msvs_parse_version(env.get('MSVS_VERSION', '6.0')) - if version_num >= 8.0 and env.get('WINDOWS_INSERT_MANIFEST', 0): - # MSVC 8 automatically generates .manifest files that have to be installed - extratargets.append( - env.ReplaceIxes(exe, - "PROGPREFIX", "PROGSUFFIX", - "WINDOWSPROGMANIFESTPREFIX", "WINDOWSPROGMANIFESTSUFFIX")) - - if env.has_key('PDB') and env['PDB']: - pdb = env.arg2nodes('$PDB', target=target, source=source)[0] - extratargets.append(pdb) - target[0].attributes.pdb = pdb - - return (target+extratargets,source) - -def RegServerFunc(target, source, env): - if env.has_key('register') and env['register']: - ret = regServerAction([target[0]], [source[0]], env) - if ret: - raise SCons.Errors.UserError, "Unable to register %s" % target[0] - else: - print "Registered %s sucessfully" % target[0] - return ret - return 0 - -regServerAction = SCons.Action.Action("$REGSVRCOM", "$REGSVRCOMSTR") -regServerCheck = SCons.Action.Action(RegServerFunc, None) -shlibLinkAction = SCons.Action.Action('${TEMPFILE("$SHLINK $SHLINKFLAGS $_SHLINK_TARGETS $( $_LIBDIRFLAGS $) $_LIBFLAGS $_PDB $_SHLINK_SOURCES")}') -compositeLinkAction = shlibLinkAction + regServerCheck - -def generate(env): - """Add Builders and construction variables for ar to an Environment.""" - SCons.Tool.createSharedLibBuilder(env) - SCons.Tool.createProgBuilder(env) - - env['SHLINK'] = '$LINK' - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS /dll') - env['_SHLINK_TARGETS'] = windowsShlinkTargets - env['_SHLINK_SOURCES'] = windowsShlinkSources - env['SHLINKCOM'] = compositeLinkAction - env.Append(SHLIBEMITTER = [windowsLibEmitter]) - env['LINK'] = 'link' - env['LINKFLAGS'] = SCons.Util.CLVar('/nologo') - env['_PDB'] = pdbGenerator - env['LINKCOM'] = '${TEMPFILE("$LINK $LINKFLAGS /OUT:$TARGET.windows $( $_LIBDIRFLAGS $) $_LIBFLAGS $_PDB $SOURCES.windows")}' - env.Append(PROGEMITTER = [prog_emitter]) - env['LIBDIRPREFIX']='/LIBPATH:' - env['LIBDIRSUFFIX']='' - env['LIBLINKPREFIX']='' - env['LIBLINKSUFFIX']='$LIBSUFFIX' - - env['WIN32DEFPREFIX'] = '' - env['WIN32DEFSUFFIX'] = '.def' - env['WIN32_INSERT_DEF'] = 0 - env['WINDOWSDEFPREFIX'] = '${WIN32DEFPREFIX}' - env['WINDOWSDEFSUFFIX'] = '${WIN32DEFSUFFIX}' - env['WINDOWS_INSERT_DEF'] = '${WIN32_INSERT_DEF}' - - env['WIN32EXPPREFIX'] = '' - env['WIN32EXPSUFFIX'] = '.exp' - env['WINDOWSEXPPREFIX'] = '${WIN32EXPPREFIX}' - env['WINDOWSEXPSUFFIX'] = '${WIN32EXPSUFFIX}' - - env['WINDOWSSHLIBMANIFESTPREFIX'] = '' - env['WINDOWSSHLIBMANIFESTSUFFIX'] = '${SHLIBSUFFIX}.manifest' - env['WINDOWSPROGMANIFESTPREFIX'] = '' - env['WINDOWSPROGMANIFESTSUFFIX'] = '${PROGSUFFIX}.manifest' - - env['REGSVRACTION'] = regServerCheck - env['REGSVR'] = os.path.join(SCons.Platform.win32.get_system_root(),'System32','regsvr32') - env['REGSVRFLAGS'] = '/s ' - env['REGSVRCOM'] = '$REGSVR $REGSVRFLAGS ${TARGET.windows}' - - try: - version = SCons.Tool.msvs.get_default_visualstudio_version(env) - - if env.has_key('MSVS_IGNORE_IDE_PATHS') and env['MSVS_IGNORE_IDE_PATHS']: - include_path, lib_path, exe_path = SCons.Tool.msvc.get_msvc_default_paths(env,version) - else: - include_path, lib_path, exe_path = SCons.Tool.msvc.get_msvc_paths(env,version) - - # since other tools can set these, we just make sure that the - # relevant stuff from MSVS is in there somewhere. - env.PrependENVPath('INCLUDE', include_path) - env.PrependENVPath('LIB', lib_path) - env.PrependENVPath('PATH', exe_path) - except (SCons.Util.RegError, SCons.Errors.InternalError): - pass - - # For most platforms, a loadable module is the same as a shared - # library. Platforms which are different can override these, but - # setting them the same means that LoadableModule works everywhere. - SCons.Tool.createLoadableModuleBuilder(env) - env['LDMODULE'] = '$SHLINK' - env['LDMODULEPREFIX'] = '$SHLIBPREFIX' - env['LDMODULESUFFIX'] = '$SHLIBSUFFIX' - env['LDMODULEFLAGS'] = '$SHLINKFLAGS' - # We can't use '$SHLINKCOM' here because that will stringify the - # action list on expansion, and will then try to execute expanded - # strings, with the upshot that it would try to execute RegServerFunc - # as a command. - env['LDMODULECOM'] = compositeLinkAction - -def exists(env): - platform = env.get('PLATFORM', '') - if SCons.Tool.msvs.is_msvs_installed(): - # there's at least one version of MSVS installed. - return 1 - elif platform in ('win32', 'cygwin'): - # Only explicitly search for a 'link' executable on Windows - # systems. Some other systems (e.g. Ubuntu Linux) have an - # executable named 'link' and we don't want that to make SCons - # think Visual Studio is installed. - return env.Detect('link') - return None diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvc.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvc.py deleted file mode 100644 index 5b7874a20..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvc.py +++ /dev/null @@ -1,766 +0,0 @@ -"""engine.SCons.Tool.msvc - -Tool-specific initialization for Microsoft Visual C/C++. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/msvc.py 3842 2008/12/20 22:59:52 scons" - -import os.path -import re -import string - -import SCons.Action -import SCons.Builder -import SCons.Errors -import SCons.Platform.win32 -import SCons.Tool -import SCons.Tool.msvs -import SCons.Util -import SCons.Warnings -import SCons.Scanner.RC - -CSuffixes = ['.c', '.C'] -CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++'] - -def _parse_msvc7_overrides(version,platform): - """ Parse any overridden defaults for MSVS directory locations - in MSVS .NET. """ - - # First, we get the shell folder for this user: - if not SCons.Util.can_read_reg: - raise SCons.Errors.InternalError, "No Windows registry module was found" - - comps = "" - try: - (comps, t) = SCons.Util.RegGetValue(SCons.Util.HKEY_CURRENT_USER, - r'Software\Microsoft\Windows\CurrentVersion' +\ - r'\Explorer\Shell Folders\Local AppData') - except SCons.Util.RegError: - raise SCons.Errors.InternalError, \ - "The Local AppData directory was not found in the registry." - - comps = comps + '\\Microsoft\\VisualStudio\\' + version + '\\VCComponents.dat' - dirs = {} - - if os.path.exists(comps): - # now we parse the directories from this file, if it exists. - # We only look for entries after: - # [VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories], - # since this file could contain a number of things... - lines = None - try: - import codecs - except ImportError: - pass - else: - try: - f = codecs.open(comps, 'r', 'utf16') - encoder = codecs.getencoder('ascii') - lines = map(lambda l, e=encoder: e(l)[0], f.readlines()) - except (LookupError, UnicodeError): - lines = codecs.open(comps, 'r', 'utf8').readlines() - if lines is None: - lines = open(comps, 'r').readlines() - if 'x86' == platform: platform = 'Win32' - - found = 0 - for line in lines: - line.strip() - if line.find(r'[VC\VC_OBJECTS_PLATFORM_INFO\%s\Directories]'%platform) >= 0: - found = 1 - elif line == '' or line[:1] == '[': - found = 0 - elif found == 1: - kv = line.split('=', 1) - if len(kv) == 2: - (key, val) = kv - key = key.replace(' Dirs','') - dirs[key.upper()] = val - f.close() - else: - # since the file didn't exist, we have only the defaults in - # the registry to work with. - - if 'x86' == platform: platform = 'Win32' - - try: - K = 'SOFTWARE\\Microsoft\\VisualStudio\\' + version - K = K + r'\VC\VC_OBJECTS_PLATFORM_INFO\%s\Directories'%platform - k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE,K) - i = 0 - while 1: - try: - (key,val,t) = SCons.Util.RegEnumValue(k,i) - key = key.replace(' Dirs','') - dirs[key.upper()] = val - i = i + 1 - except SCons.Util.RegError: - break - except SCons.Util.RegError: - # if we got here, then we didn't find the registry entries: - raise SCons.Errors.InternalError, "Unable to find MSVC paths in the registry." - return dirs - -def _parse_msvc8_overrides(version,platform,suite): - """ Parse any overridden defaults for MSVC directory locations - in MSVC 2005. """ - - # In VS8 the user can change the location of the settings file that - # contains the include, lib and binary paths. Try to get the location - # from registry - if not SCons.Util.can_read_reg: - raise SCons.Errors.InternalError, "No Windows registry module was found" - - # XXX This code assumes anything that isn't EXPRESS uses the default - # registry key string. Is this really true for all VS suites? - if suite == 'EXPRESS': - s = '\\VCExpress\\' - else: - s = '\\VisualStudio\\' - - settings_path = "" - try: - (settings_path, t) = SCons.Util.RegGetValue(SCons.Util.HKEY_CURRENT_USER, - r'Software\Microsoft' + s + version +\ - r'\Profile\AutoSaveFile') - settings_path = settings_path.upper() - except SCons.Util.RegError: - raise SCons.Errors.InternalError, \ - "The VS8 settings file location was not found in the registry." - - # Look for potential environment variables in the settings path - if settings_path.find('%VSSPV_VISUALSTUDIO_DIR%') >= 0: - # First replace a special variable named %vsspv_visualstudio_dir% - # that is not found in the OSs environment variables... - try: - (value, t) = SCons.Util.RegGetValue(SCons.Util.HKEY_CURRENT_USER, - r'Software\Microsoft' + s + version +\ - r'\VisualStudioLocation') - settings_path = settings_path.replace('%VSSPV_VISUALSTUDIO_DIR%', value) - except SCons.Util.RegError: - raise SCons.Errors.InternalError, "The VS8 settings file location was not found in the registry." - - if settings_path.find('%') >= 0: - # Collect global environment variables - env_vars = {} - - # Read all the global environment variables of the current user - k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_CURRENT_USER, r'Environment') - i = 0 - while 1: - try: - (key,val,t) = SCons.Util.RegEnumValue(k,i) - env_vars[key.upper()] = val.upper() - i = i + 1 - except SCons.Util.RegError: - break - - # And some more variables that are not found in the registry - env_vars['USERPROFILE'] = os.getenv('USERPROFILE') - env_vars['SystemDrive'] = os.getenv('SystemDrive') - - found_var = 1 - while found_var: - found_var = 0 - for env_var in env_vars: - if settings_path.find(r'%' + env_var + r'%') >= 0: - settings_path = settings_path.replace(r'%' + env_var + r'%', env_vars[env_var]) - found_var = 1 - - dirs = {} - - if os.path.exists(settings_path): - # now we parse the directories from this file, if it exists. - import xml.dom.minidom - doc = xml.dom.minidom.parse(settings_path) - user_settings = doc.getElementsByTagName('UserSettings')[0] - tool_options = user_settings.getElementsByTagName('ToolsOptions')[0] - tool_options_categories = tool_options.getElementsByTagName('ToolsOptionsCategory') - environment_var_map = { - 'IncludeDirectories' : 'INCLUDE', - 'LibraryDirectories' : 'LIBRARY', - 'ExecutableDirectories' : 'PATH', - } - for category in tool_options_categories: - category_name = category.attributes.get('name') - if category_name is not None and category_name.value == 'Projects': - subcategories = category.getElementsByTagName('ToolsOptionsSubCategory') - for subcategory in subcategories: - subcategory_name = subcategory.attributes.get('name') - if subcategory_name is not None and subcategory_name.value == 'VCDirectories': - properties = subcategory.getElementsByTagName('PropertyValue') - for property in properties: - property_name = property.attributes.get('name') - if property_name is None: - continue - var_name = environment_var_map.get(property_name) - if var_name: - data = property.childNodes[0].data - value_list = string.split(data, '|') - if len(value_list) == 1: - dirs[var_name] = value_list[0] - else: - while value_list: - dest, value = value_list[:2] - del value_list[:2] - # ToDo: Support for destinations - # other than Win32 - if dest == 'Win32': - dirs[var_name] = value - break - else: - # There are no default directories in the registry for VS8 Express :( - raise SCons.Errors.InternalError, "Unable to find MSVC paths in the registry." - return dirs - -def _get_msvc7_path(path, version, platform): - """ - Get Visual Studio directories from version 7 (MSVS .NET) - (it has a different registry structure than versions before it) - """ - # first, look for a customization of the default values in the - # registry: These are sometimes stored in the Local Settings area - # for Visual Studio, in a file, so we have to parse it. - dirs = _parse_msvc7_overrides(version,platform) - - if dirs.has_key(path): - p = dirs[path] - else: - raise SCons.Errors.InternalError, \ - "Unable to retrieve the %s path from MS VC++."%path - - # collect some useful information for later expansions... - paths = SCons.Tool.msvs.get_msvs_install_dirs(version) - - # expand the directory path variables that we support. If there - # is a variable we don't support, then replace that entry with - # "---Unknown Location VSInstallDir---" or something similar, to clue - # people in that we didn't find something, and so env expansion doesn't - # do weird things with the $(xxx)'s - s = re.compile('\$\(([a-zA-Z0-9_]+?)\)') - - def repl(match, paths=paths): - key = string.upper(match.group(1)) - if paths.has_key(key): - return paths[key] - else: - # Now look in the global environment variables - envresult = os.getenv(key) - if not envresult is None: - return envresult + '\\' - else: - return '---Unknown Location %s---' % match.group() - - rv = [] - for entry in p.split(os.pathsep): - entry = s.sub(repl,entry).rstrip('\n\r') - rv.append(entry) - - return string.join(rv,os.pathsep) - -def _get_msvc8_path(path, version, platform, suite): - """ - Get Visual Studio directories from version 8 (MSVS 2005) - (it has a different registry structure than versions before it) - """ - # first, look for a customization of the default values in the - # registry: These are sometimes stored in the Local Settings area - # for Visual Studio, in a file, so we have to parse it. - dirs = _parse_msvc8_overrides(version, platform, suite) - - if dirs.has_key(path): - p = dirs[path] - else: - raise SCons.Errors.InternalError, \ - "Unable to retrieve the %s path from MS VC++."%path - - # collect some useful information for later expansions... - paths = SCons.Tool.msvs.get_msvs_install_dirs(version, suite) - - # expand the directory path variables that we support. If there - # is a variable we don't support, then replace that entry with - # "---Unknown Location VSInstallDir---" or something similar, to clue - # people in that we didn't find something, and so env expansion doesn't - # do weird things with the $(xxx)'s - s = re.compile('\$\(([a-zA-Z0-9_]+?)\)') - - def repl(match, paths=paths): - key = string.upper(match.group(1)) - if paths.has_key(key): - return paths[key] - else: - return '---Unknown Location %s---' % match.group() - - rv = [] - for entry in p.split(os.pathsep): - entry = s.sub(repl,entry).rstrip('\n\r') - rv.append(entry) - - return string.join(rv,os.pathsep) - -def get_msvc_path(env, path, version): - """ - Get a list of visualstudio directories (include, lib or path). - Return a string delimited by the os.pathsep separator (';'). An - exception will be raised if unable to access the registry or - appropriate registry keys not found. - """ - - if not SCons.Util.can_read_reg: - raise SCons.Errors.InternalError, "No Windows registry module was found" - - # normalize the case for comparisons (since the registry is case - # insensitive) - path = string.upper(path) - - if path=='LIB': - path= 'LIBRARY' - - version_num, suite = SCons.Tool.msvs.msvs_parse_version(version) - if version_num >= 8.0: - platform = env.get('MSVS8_PLATFORM', 'x86') - suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env) - else: - platform = 'x86' - - if version_num >= 8.0: - return _get_msvc8_path(path, str(version_num), platform, suite) - elif version_num >= 7.0: - return _get_msvc7_path(path, str(version_num), platform) - - path = string.upper(path + ' Dirs') - K = ('Software\\Microsoft\\Devstudio\\%s\\' + - 'Build System\\Components\\Platforms\\Win32 (x86)\\Directories') % \ - (version) - for base in (SCons.Util.HKEY_CURRENT_USER, - SCons.Util.HKEY_LOCAL_MACHINE): - try: - k = SCons.Util.RegOpenKeyEx(base,K) - i = 0 - while 1: - try: - (p,v,t) = SCons.Util.RegEnumValue(k,i) - if string.upper(p) == path: - return v - i = i + 1 - except SCons.Util.RegError: - break - except SCons.Util.RegError: - pass - - # if we got here, then we didn't find the registry entries: - raise SCons.Errors.InternalError, "The %s path was not found in the registry."%path - -def _get_msvc6_default_paths(version, use_mfc_dirs): - """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those - three environment variables that should be set in order to execute - the MSVC 6.0 tools properly, if the information wasn't available - from the registry.""" - MVSdir = None - paths = {} - exe_path = '' - lib_path = '' - include_path = '' - try: - paths = SCons.Tool.msvs.get_msvs_install_dirs(version) - MVSdir = paths['VSINSTALLDIR'] - except (SCons.Util.RegError, SCons.Errors.InternalError, KeyError): - if os.environ.has_key('MSDEVDIR'): - MVSdir = os.path.normpath(os.path.join(os.environ['MSDEVDIR'],'..','..')) - else: - MVSdir = r'C:\Program Files\Microsoft Visual Studio' - if MVSdir: - if SCons.Util.can_read_reg and paths.has_key('VCINSTALLDIR'): - MVSVCdir = paths['VCINSTALLDIR'] - else: - MVSVCdir = os.path.join(MVSdir,'VC98') - - MVSCommondir = r'%s\Common' % MVSdir - if use_mfc_dirs: - mfc_include_ = r'%s\ATL\include;%s\MFC\include;' % (MVSVCdir, MVSVCdir) - mfc_lib_ = r'%s\MFC\lib;' % MVSVCdir - else: - mfc_include_ = '' - mfc_lib_ = '' - include_path = r'%s%s\include' % (mfc_include_, MVSVCdir) - lib_path = r'%s%s\lib' % (mfc_lib_, MVSVCdir) - - if os.environ.has_key('OS') and os.environ['OS'] == "Windows_NT": - osdir = 'WINNT' - else: - osdir = 'WIN95' - - exe_path = r'%s\tools\%s;%s\MSDev98\bin;%s\tools;%s\bin' % (MVSCommondir, osdir, MVSCommondir, MVSCommondir, MVSVCdir) - return (include_path, lib_path, exe_path) - -def _get_msvc7_default_paths(env, version, use_mfc_dirs): - """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those - three environment variables that should be set in order to execute - the MSVC .NET tools properly, if the information wasn't available - from the registry.""" - - MVSdir = None - paths = {} - exe_path = '' - lib_path = '' - include_path = '' - try: - paths = SCons.Tool.msvs.get_msvs_install_dirs(version) - MVSdir = paths['VSINSTALLDIR'] - except (KeyError, SCons.Util.RegError, SCons.Errors.InternalError): - if os.environ.has_key('VSCOMNTOOLS'): - MVSdir = os.path.normpath(os.path.join(os.environ['VSCOMNTOOLS'],'..','..')) - else: - # last resort -- default install location - MVSdir = r'C:\Program Files\Microsoft Visual Studio .NET' - - if MVSdir: - if SCons.Util.can_read_reg and paths.has_key('VCINSTALLDIR'): - MVSVCdir = paths['VCINSTALLDIR'] - else: - MVSVCdir = os.path.join(MVSdir,'Vc7') - - MVSCommondir = r'%s\Common7' % MVSdir - if use_mfc_dirs: - mfc_include_ = r'%s\atlmfc\include;' % MVSVCdir - mfc_lib_ = r'%s\atlmfc\lib;' % MVSVCdir - else: - mfc_include_ = '' - mfc_lib_ = '' - include_path = r'%s%s\include;%s\PlatformSDK\include' % (mfc_include_, MVSVCdir, MVSVCdir) - lib_path = r'%s%s\lib;%s\PlatformSDK\lib' % (mfc_lib_, MVSVCdir, MVSVCdir) - exe_path = r'%s\IDE;%s\bin;%s\Tools;%s\Tools\bin' % (MVSCommondir,MVSVCdir, MVSCommondir, MVSCommondir ) - - if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKSDKDIR'): - include_path = include_path + r';%s\include'%paths['FRAMEWORKSDKDIR'] - lib_path = lib_path + r';%s\lib'%paths['FRAMEWORKSDKDIR'] - exe_path = exe_path + r';%s\bin'%paths['FRAMEWORKSDKDIR'] - - if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKDIR') and paths.has_key('FRAMEWORKVERSION'): - exe_path = exe_path + r';%s\%s'%(paths['FRAMEWORKDIR'],paths['FRAMEWORKVERSION']) - - return (include_path, lib_path, exe_path) - -def _get_msvc8_default_paths(env, version, suite, use_mfc_dirs): - """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those - three environment variables that should be set in order to execute - the MSVC 8 tools properly, if the information wasn't available - from the registry.""" - - MVSdir = None - paths = {} - exe_paths = [] - lib_paths = [] - include_paths = [] - try: - paths = SCons.Tool.msvs.get_msvs_install_dirs(version, suite) - MVSdir = paths['VSINSTALLDIR'] - except (KeyError, SCons.Util.RegError, SCons.Errors.InternalError): - if os.environ.has_key('VSCOMNTOOLS'): - MVSdir = os.path.normpath(os.path.join(os.environ['VSCOMNTOOLS'],'..','..')) - else: - # last resort -- default install location - MVSdir = os.getenv('ProgramFiles') + r'\Microsoft Visual Studio 8' - - if MVSdir: - if SCons.Util.can_read_reg and paths.has_key('VCINSTALLDIR'): - MVSVCdir = paths['VCINSTALLDIR'] - else: - MVSVCdir = os.path.join(MVSdir,'VC') - - MVSCommondir = os.path.join(MVSdir, 'Common7') - include_paths.append( os.path.join(MVSVCdir, 'include') ) - lib_paths.append( os.path.join(MVSVCdir, 'lib') ) - for base, subdir in [(MVSCommondir,'IDE'), (MVSVCdir,'bin'), - (MVSCommondir,'Tools'), (MVSCommondir,r'Tools\bin')]: - exe_paths.append( os.path.join( base, subdir) ) - - if paths.has_key('PLATFORMSDKDIR'): - PlatformSdkDir = paths['PLATFORMSDKDIR'] - else: - PlatformSdkDir = os.path.join(MVSVCdir,'PlatformSDK') - platform_include_path = os.path.join( PlatformSdkDir, 'Include' ) - include_paths.append( platform_include_path ) - lib_paths.append( os.path.join( PlatformSdkDir, 'Lib' ) ) - if use_mfc_dirs: - if paths.has_key('PLATFORMSDKDIR'): - include_paths.append( os.path.join( platform_include_path, 'mfc' ) ) - include_paths.append( os.path.join( platform_include_path, 'atl' ) ) - else: - atlmfc_path = os.path.join( MVSVCdir, 'atlmfc' ) - include_paths.append( os.path.join( atlmfc_path, 'include' ) ) - lib_paths.append( os.path.join( atlmfc_path, 'lib' ) ) - - if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKSDKDIR'): - fwdir = paths['FRAMEWORKSDKDIR'] - include_paths.append( os.path.join( fwdir, 'include' ) ) - lib_paths.append( os.path.join( fwdir, 'lib' ) ) - exe_paths.append( os.path.join( fwdir, 'bin' ) ) - - if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKDIR') and paths.has_key('FRAMEWORKVERSION'): - exe_paths.append( os.path.join( paths['FRAMEWORKDIR'], paths['FRAMEWORKVERSION'] ) ) - - include_path = string.join( include_paths, os.pathsep ) - lib_path = string.join(lib_paths, os.pathsep ) - exe_path = string.join(exe_paths, os.pathsep ) - return (include_path, lib_path, exe_path) - -def get_msvc_paths(env, version=None, use_mfc_dirs=0): - """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values - of those three environment variables that should be set - in order to execute the MSVC tools properly.""" - exe_path = '' - lib_path = '' - include_path = '' - - if not version: - versions = SCons.Tool.msvs.get_visualstudio_versions() - if versions: - version = versions[0] #use highest version by default - else: - version = '6.0' - - # Some of the configured directories only - # appear if the user changes them from the default. - # Therefore, we'll see if we can get the path to the MSDev - # base installation from the registry and deduce the default - # directories. - version_num, suite = SCons.Tool.msvs.msvs_parse_version(version) - if version_num >= 8.0: - suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env) - defpaths = _get_msvc8_default_paths(env, version, suite, use_mfc_dirs) - elif version_num >= 7.0: - defpaths = _get_msvc7_default_paths(env, version, use_mfc_dirs) - else: - defpaths = _get_msvc6_default_paths(version, use_mfc_dirs) - - try: - include_path = get_msvc_path(env, "include", version) - except (SCons.Util.RegError, SCons.Errors.InternalError): - include_path = defpaths[0] - - try: - lib_path = get_msvc_path(env, "lib", version) - except (SCons.Util.RegError, SCons.Errors.InternalError): - lib_path = defpaths[1] - - try: - exe_path = get_msvc_path(env, "path", version) - except (SCons.Util.RegError, SCons.Errors.InternalError): - exe_path = defpaths[2] - - return (include_path, lib_path, exe_path) - -def get_msvc_default_paths(env, version=None, use_mfc_dirs=0): - """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those - three environment variables that should be set in order to execute - the MSVC tools properly. This will only return the default - locations for the tools, not the values used by MSVS in their - directory setup area. This can help avoid problems with different - developers having different settings, and should allow the tools - to run in most cases.""" - - if not version and not SCons.Util.can_read_reg: - version = '6.0' - - try: - if not version: - version = SCons.Tool.msvs.get_visualstudio_versions()[0] #use highest version - except KeyboardInterrupt: - raise - except: - pass - - version_num, suite = SCons.Tool.msvs.msvs_parse_version(version) - if version_num >= 8.0: - suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env) - return _get_msvc8_default_paths(env, version, suite, use_mfc_dirs) - elif version_num >= 7.0: - return _get_msvc7_default_paths(env, version, use_mfc_dirs) - else: - return _get_msvc6_default_paths(version, use_mfc_dirs) - -def validate_vars(env): - """Validate the PCH and PCHSTOP construction variables.""" - if env.has_key('PCH') and env['PCH']: - if not env.has_key('PCHSTOP'): - raise SCons.Errors.UserError, "The PCHSTOP construction must be defined if PCH is defined." - if not SCons.Util.is_String(env['PCHSTOP']): - raise SCons.Errors.UserError, "The PCHSTOP construction variable must be a string: %r"%env['PCHSTOP'] - -def pch_emitter(target, source, env): - """Adds the object file target.""" - - validate_vars(env) - - pch = None - obj = None - - for t in target: - if SCons.Util.splitext(str(t))[1] == '.pch': - pch = t - if SCons.Util.splitext(str(t))[1] == '.obj': - obj = t - - if not obj: - obj = SCons.Util.splitext(str(pch))[0]+'.obj' - - target = [pch, obj] # pch must be first, and obj second for the PCHCOM to work - - return (target, source) - -def object_emitter(target, source, env, parent_emitter): - """Sets up the PCH dependencies for an object file.""" - - validate_vars(env) - - parent_emitter(target, source, env) - - if env.has_key('PCH') and env['PCH']: - env.Depends(target, env['PCH']) - - return (target, source) - -def static_object_emitter(target, source, env): - return object_emitter(target, source, env, - SCons.Defaults.StaticObjectEmitter) - -def shared_object_emitter(target, source, env): - return object_emitter(target, source, env, - SCons.Defaults.SharedObjectEmitter) - -pch_action = SCons.Action.Action('$PCHCOM', '$PCHCOMSTR') -pch_builder = SCons.Builder.Builder(action=pch_action, suffix='.pch', - emitter=pch_emitter, - source_scanner=SCons.Tool.SourceFileScanner) - - -# Logic to build .rc files into .res files (resource files) -res_scanner = SCons.Scanner.RC.RCScan() -res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR') -res_builder = SCons.Builder.Builder(action=res_action, - src_suffix='.rc', - suffix='.res', - src_builder=[], - source_scanner=res_scanner) - - -def generate(env): - """Add Builders and construction variables for MSVC++ to an Environment.""" - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - for suffix in CSuffixes: - static_obj.add_action(suffix, SCons.Defaults.CAction) - shared_obj.add_action(suffix, SCons.Defaults.ShCAction) - static_obj.add_emitter(suffix, static_object_emitter) - shared_obj.add_emitter(suffix, shared_object_emitter) - - for suffix in CXXSuffixes: - static_obj.add_action(suffix, SCons.Defaults.CXXAction) - shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction) - static_obj.add_emitter(suffix, static_object_emitter) - shared_obj.add_emitter(suffix, shared_object_emitter) - - env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Z7") or ""}']) - env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}']) - env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $CCPCHFLAGS $CCPDBFLAGS' - env['CC'] = 'cl' - env['CCFLAGS'] = SCons.Util.CLVar('/nologo') - env['CFLAGS'] = SCons.Util.CLVar('') - env['CCCOM'] = '$CC /Fo$TARGET /c $SOURCES $CFLAGS $CCFLAGS $_CCCOMCOM' - env['SHCC'] = '$CC' - env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') - env['SHCFLAGS'] = SCons.Util.CLVar('$CFLAGS') - env['SHCCCOM'] = '$SHCC /Fo$TARGET /c $SOURCES $SHCFLAGS $SHCCFLAGS $_CCCOMCOM' - env['CXX'] = '$CC' - env['CXXFLAGS'] = SCons.Util.CLVar('$CCFLAGS $( /TP $)') - env['CXXCOM'] = '$CXX /Fo$TARGET /c $SOURCES $CXXFLAGS $CCFLAGS $_CCCOMCOM' - env['SHCXX'] = '$CXX' - env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS') - env['SHCXXCOM'] = '$SHCXX /Fo$TARGET /c $SOURCES $SHCXXFLAGS $SHCCFLAGS $_CCCOMCOM' - env['CPPDEFPREFIX'] = '/D' - env['CPPDEFSUFFIX'] = '' - env['INCPREFIX'] = '/I' - env['INCSUFFIX'] = '' -# env.Append(OBJEMITTER = [static_object_emitter]) -# env.Append(SHOBJEMITTER = [shared_object_emitter]) - env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 - - env['RC'] = 'rc' - env['RCFLAGS'] = SCons.Util.CLVar('') - env['RCSUFFIXES']=['.rc','.rc2'] - env['RCCOM'] = '$RC $_CPPDEFFLAGS $_CPPINCFLAGS $RCFLAGS /fo$TARGET $SOURCES' - env['BUILDERS']['RES'] = res_builder - env['OBJPREFIX'] = '' - env['OBJSUFFIX'] = '.obj' - env['SHOBJPREFIX'] = '$OBJPREFIX' - env['SHOBJSUFFIX'] = '$OBJSUFFIX' - - try: - version = SCons.Tool.msvs.get_default_visualstudio_version(env) - version_num, suite = SCons.Tool.msvs.msvs_parse_version(version) - if version_num == 8.0: - suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env) - - use_mfc_dirs = env.get('MSVS_USE_MFC_DIRS', 0) - if env.get('MSVS_IGNORE_IDE_PATHS', 0): - _get_paths = get_msvc_default_paths - else: - _get_paths = get_msvc_paths - include_path, lib_path, exe_path = _get_paths(env, version, use_mfc_dirs) - - # since other tools can set these, we just make sure that the - # relevant stuff from MSVS is in there somewhere. - env.PrependENVPath('INCLUDE', include_path) - env.PrependENVPath('LIB', lib_path) - env.PrependENVPath('PATH', exe_path) - except (SCons.Util.RegError, SCons.Errors.InternalError): - pass - - env['CFILESUFFIX'] = '.c' - env['CXXFILESUFFIX'] = '.cc' - - env['PCHPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Yd") or ""}']) - env['PCHCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS $PCHPDBFLAGS' - env['BUILDERS']['PCH'] = pch_builder - - if not env.has_key('ENV'): - env['ENV'] = {} - if not env['ENV'].has_key('SystemRoot'): # required for dlls in the winsxs folders - env['ENV']['SystemRoot'] = SCons.Platform.win32.get_system_root() - -def exists(env): - if SCons.Tool.msvs.is_msvs_installed(): - # there's at least one version of MSVS installed. - return 1 - else: - return env.Detect('cl') - diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvs.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvs.py deleted file mode 100644 index f8a20ea1f..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/Tool/msvs.py +++ /dev/null @@ -1,1815 +0,0 @@ -"""SCons.Tool.msvs - -Tool-specific initialization for Microsoft Visual Studio project files. - -There normally shouldn't be any need to import this module directly. -It will usually be imported through the generic SCons.Tool.Tool() -selection method. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/Tool/msvs.py 3842 2008/12/20 22:59:52 scons" - -import base64 -import hashlib -import os.path -import pickle -import re -import string -import sys - -import SCons.Builder -import SCons.Node.FS -import SCons.Platform.win32 -import SCons.Script.SConscript -import SCons.Util -import SCons.Warnings - -############################################################################## -# Below here are the classes and functions for generation of -# DSP/DSW/SLN/VCPROJ files. -############################################################################## - -def _hexdigest(s): - """Return a string as a string of hex characters. - """ - # NOTE: This routine is a method in the Python 2.0 interface - # of the native md5 module, but we want SCons to operate all - # the way back to at least Python 1.5.2, which doesn't have it. - h = string.hexdigits - r = '' - for c in s: - i = ord(c) - r = r + h[(i >> 4) & 0xF] + h[i & 0xF] - return r - -def xmlify(s): - s = string.replace(s, "&", "&") # do this first - s = string.replace(s, "'", "'") - s = string.replace(s, '"', """) - return s - -external_makefile_guid = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}' - -def _generateGUID(slnfile, name): - """This generates a dummy GUID for the sln file to use. It is - based on the MD5 signatures of the sln filename plus the name of - the project. It basically just needs to be unique, and not - change with each invocation.""" - m = hashlib.md5() - m.update(str(slnfile) + str(name)) - # TODO(1.5) - #solution = m.hexdigest().upper() - solution = string.upper(_hexdigest(m.digest())) - # convert most of the signature to GUID form (discard the rest) - solution = "{" + solution[:8] + "-" + solution[8:12] + "-" + solution[12:16] + "-" + solution[16:20] + "-" + solution[20:32] + "}" - return solution - -version_re = re.compile(r'(\d+\.\d+)(.*)') - -def msvs_parse_version(s): - """ - Split a Visual Studio version, which may in fact be something like - '7.0Exp', into is version number (returned as a float) and trailing - "suite" portion. - """ - num, suite = version_re.match(s).groups() - return float(num), suite - -# This is how we re-invoke SCons from inside MSVS Project files. -# The problem is that we might have been invoked as either scons.bat -# or scons.py. If we were invoked directly as scons.py, then we could -# use sys.argv[0] to find the SCons "executable," but that doesn't work -# if we were invoked as scons.bat, which uses "python -c" to execute -# things and ends up with "-c" as sys.argv[0]. Consequently, we have -# the MSVS Project file invoke SCons the same way that scons.bat does, -# which works regardless of how we were invoked. -def getExecScriptMain(env, xml=None): - scons_home = env.get('SCONS_HOME') - if not scons_home and os.environ.has_key('SCONS_LIB_DIR'): - scons_home = os.environ['SCONS_LIB_DIR'] - if scons_home: - exec_script_main = "from os.path import join; import sys; sys.path = [ r'%s' ] + sys.path; import SCons.Script; SCons.Script.main()" % scons_home - else: - version = SCons.__version__ - exec_script_main = "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-%(version)s'), join(sys.prefix, 'scons-%(version)s'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons') ] + sys.path; import SCons.Script; SCons.Script.main()" % locals() - if xml: - exec_script_main = xmlify(exec_script_main) - return exec_script_main - -# The string for the Python executable we tell the Project file to use -# is either sys.executable or, if an external PYTHON_ROOT environment -# variable exists, $(PYTHON)ROOT\\python.exe (generalized a little to -# pluck the actual executable name from sys.executable). -try: - python_root = os.environ['PYTHON_ROOT'] -except KeyError: - python_executable = sys.executable -else: - python_executable = os.path.join('$$(PYTHON_ROOT)', - os.path.split(sys.executable)[1]) - -class Config: - pass - -def splitFully(path): - dir, base = os.path.split(path) - if dir and dir != '' and dir != path: - return splitFully(dir)+[base] - if base == '': - return [] - return [base] - -def makeHierarchy(sources): - '''Break a list of files into a hierarchy; for each value, if it is a string, - then it is a file. If it is a dictionary, it is a folder. The string is - the original path of the file.''' - - hierarchy = {} - for file in sources: - path = splitFully(file) - if len(path): - dict = hierarchy - for part in path[:-1]: - if not dict.has_key(part): - dict[part] = {} - dict = dict[part] - dict[path[-1]] = file - #else: - # print 'Warning: failed to decompose path for '+str(file) - return hierarchy - -class _DSPGenerator: - """ Base class for DSP generators """ - - srcargs = [ - 'srcs', - 'incs', - 'localincs', - 'resources', - 'misc'] - - def __init__(self, dspfile, source, env): - self.dspfile = str(dspfile) - try: - get_abspath = dspfile.get_abspath - except AttributeError: - self.dspabs = os.path.abspath(dspfile) - else: - self.dspabs = get_abspath() - - if not env.has_key('variant'): - raise SCons.Errors.InternalError, \ - "You must specify a 'variant' argument (i.e. 'Debug' or " +\ - "'Release') to create an MSVSProject." - elif SCons.Util.is_String(env['variant']): - variants = [env['variant']] - elif SCons.Util.is_List(env['variant']): - variants = env['variant'] - - if not env.has_key('buildtarget') or env['buildtarget'] == None: - buildtarget = [''] - elif SCons.Util.is_String(env['buildtarget']): - buildtarget = [env['buildtarget']] - elif SCons.Util.is_List(env['buildtarget']): - if len(env['buildtarget']) != len(variants): - raise SCons.Errors.InternalError, \ - "Sizes of 'buildtarget' and 'variant' lists must be the same." - buildtarget = [] - for bt in env['buildtarget']: - if SCons.Util.is_String(bt): - buildtarget.append(bt) - else: - buildtarget.append(bt.get_abspath()) - else: - buildtarget = [env['buildtarget'].get_abspath()] - if len(buildtarget) == 1: - bt = buildtarget[0] - buildtarget = [] - for _ in variants: - buildtarget.append(bt) - - if not env.has_key('outdir') or env['outdir'] == None: - outdir = [''] - elif SCons.Util.is_String(env['outdir']): - outdir = [env['outdir']] - elif SCons.Util.is_List(env['outdir']): - if len(env['outdir']) != len(variants): - raise SCons.Errors.InternalError, \ - "Sizes of 'outdir' and 'variant' lists must be the same." - outdir = [] - for s in env['outdir']: - if SCons.Util.is_String(s): - outdir.append(s) - else: - outdir.append(s.get_abspath()) - else: - outdir = [env['outdir'].get_abspath()] - if len(outdir) == 1: - s = outdir[0] - outdir = [] - for v in variants: - outdir.append(s) - - if not env.has_key('runfile') or env['runfile'] == None: - runfile = buildtarget[-1:] - elif SCons.Util.is_String(env['runfile']): - runfile = [env['runfile']] - elif SCons.Util.is_List(env['runfile']): - if len(env['runfile']) != len(variants): - raise SCons.Errors.InternalError, \ - "Sizes of 'runfile' and 'variant' lists must be the same." - runfile = [] - for s in env['runfile']: - if SCons.Util.is_String(s): - runfile.append(s) - else: - runfile.append(s.get_abspath()) - else: - runfile = [env['runfile'].get_abspath()] - if len(runfile) == 1: - s = runfile[0] - runfile = [] - for v in variants: - runfile.append(s) - - self.sconscript = env['MSVSSCONSCRIPT'] - - cmdargs = env.get('cmdargs', '') - - self.env = env - - if self.env.has_key('name'): - self.name = self.env['name'] - else: - self.name = os.path.basename(SCons.Util.splitext(self.dspfile)[0]) - self.name = self.env.subst(self.name) - - sourcenames = [ - 'Source Files', - 'Header Files', - 'Local Headers', - 'Resource Files', - 'Other Files'] - - self.sources = {} - for n in sourcenames: - self.sources[n] = [] - - self.configs = {} - - self.nokeep = 0 - if env.has_key('nokeep') and env['variant'] != 0: - self.nokeep = 1 - - if self.nokeep == 0 and os.path.exists(self.dspabs): - self.Parse() - - for t in zip(sourcenames,self.srcargs): - if self.env.has_key(t[1]): - if SCons.Util.is_List(self.env[t[1]]): - for i in self.env[t[1]]: - if not i in self.sources[t[0]]: - self.sources[t[0]].append(i) - else: - if not self.env[t[1]] in self.sources[t[0]]: - self.sources[t[0]].append(self.env[t[1]]) - - for n in sourcenames: - # TODO(1.5): - #self.sources[n].sort(lambda a, b: cmp(a.lower(), b.lower())) - self.sources[n].sort(lambda a, b: cmp(string.lower(a), string.lower(b))) - - def AddConfig(self, variant, buildtarget, outdir, runfile, cmdargs, dspfile=dspfile): - config = Config() - config.buildtarget = buildtarget - config.outdir = outdir - config.cmdargs = cmdargs - config.runfile = runfile - - match = re.match('(.*)\|(.*)', variant) - if match: - config.variant = match.group(1) - config.platform = match.group(2) - else: - config.variant = variant - config.platform = 'Win32' - - self.configs[variant] = config - print "Adding '" + self.name + ' - ' + config.variant + '|' + config.platform + "' to '" + str(dspfile) + "'" - - for i in range(len(variants)): - AddConfig(self, variants[i], buildtarget[i], outdir[i], runfile[i], cmdargs) - - self.platforms = [] - for key in self.configs.keys(): - platform = self.configs[key].platform - if not platform in self.platforms: - self.platforms.append(platform) - - def Build(self): - pass - -V6DSPHeader = """\ -# Microsoft Developer Studio Project File - Name="%(name)s" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) External Target" 0x0106 - -CFG=%(name)s - Win32 %(confkey)s -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "%(name)s.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "%(name)s.mak" CFG="%(name)s - Win32 %(confkey)s" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -""" - -class _GenerateV6DSP(_DSPGenerator): - """Generates a Project file for MSVS 6.0""" - - def PrintHeader(self): - # pick a default config - confkeys = self.configs.keys() - confkeys.sort() - - name = self.name - confkey = confkeys[0] - - self.file.write(V6DSPHeader % locals()) - - for kind in confkeys: - self.file.write('!MESSAGE "%s - Win32 %s" (based on "Win32 (x86) External Target")\n' % (name, kind)) - - self.file.write('!MESSAGE \n\n') - - def PrintProject(self): - name = self.name - self.file.write('# Begin Project\n' - '# PROP AllowPerConfigDependencies 0\n' - '# PROP Scc_ProjName ""\n' - '# PROP Scc_LocalPath ""\n\n') - - first = 1 - confkeys = self.configs.keys() - confkeys.sort() - for kind in confkeys: - outdir = self.configs[kind].outdir - buildtarget = self.configs[kind].buildtarget - if first == 1: - self.file.write('!IF "$(CFG)" == "%s - Win32 %s"\n\n' % (name, kind)) - first = 0 - else: - self.file.write('\n!ELSEIF "$(CFG)" == "%s - Win32 %s"\n\n' % (name, kind)) - - env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET') - if not env_has_buildtarget: - self.env['MSVSBUILDTARGET'] = buildtarget - - # have to write this twice, once with the BASE settings, and once without - for base in ("BASE ",""): - self.file.write('# PROP %sUse_MFC 0\n' - '# PROP %sUse_Debug_Libraries ' % (base, base)) - # TODO(1.5): - #if kind.lower().find('debug') < 0: - if string.find(string.lower(kind), 'debug') < 0: - self.file.write('0\n') - else: - self.file.write('1\n') - self.file.write('# PROP %sOutput_Dir "%s"\n' - '# PROP %sIntermediate_Dir "%s"\n' % (base,outdir,base,outdir)) - cmd = 'echo Starting SCons && ' + self.env.subst('$MSVSBUILDCOM', 1) - self.file.write('# PROP %sCmd_Line "%s"\n' - '# PROP %sRebuild_Opt "-c && %s"\n' - '# PROP %sTarget_File "%s"\n' - '# PROP %sBsc_Name ""\n' - '# PROP %sTarget_Dir ""\n'\ - %(base,cmd,base,cmd,base,buildtarget,base,base)) - - if not env_has_buildtarget: - del self.env['MSVSBUILDTARGET'] - - self.file.write('\n!ENDIF\n\n' - '# Begin Target\n\n') - for kind in confkeys: - self.file.write('# Name "%s - Win32 %s"\n' % (name,kind)) - self.file.write('\n') - first = 0 - for kind in confkeys: - if first == 0: - self.file.write('!IF "$(CFG)" == "%s - Win32 %s"\n\n' % (name,kind)) - first = 1 - else: - self.file.write('!ELSEIF "$(CFG)" == "%s - Win32 %s"\n\n' % (name,kind)) - self.file.write('!ENDIF \n\n') - self.PrintSourceFiles() - self.file.write('# End Target\n' - '# End Project\n') - - if self.nokeep == 0: - # now we pickle some data and add it to the file -- MSDEV will ignore it. - pdata = pickle.dumps(self.configs,1) - pdata = base64.encodestring(pdata) - self.file.write(pdata + '\n') - pdata = pickle.dumps(self.sources,1) - pdata = base64.encodestring(pdata) - self.file.write(pdata + '\n') - - def PrintSourceFiles(self): - categories = {'Source Files': 'cpp|c|cxx|l|y|def|odl|idl|hpj|bat', - 'Header Files': 'h|hpp|hxx|hm|inl', - 'Local Headers': 'h|hpp|hxx|hm|inl', - 'Resource Files': 'r|rc|ico|cur|bmp|dlg|rc2|rct|bin|cnt|rtf|gif|jpg|jpeg|jpe', - 'Other Files': ''} - - cats = categories.keys() - # TODO(1.5): - #cats.sort(lambda a, b: cmp(a.lower(), b.lower())) - cats.sort(lambda a, b: cmp(string.lower(a), string.lower(b))) - for kind in cats: - if not self.sources[kind]: - continue # skip empty groups - - self.file.write('# Begin Group "' + kind + '"\n\n') - # TODO(1.5) - #typelist = categories[kind].replace('|', ';') - typelist = string.replace(categories[kind], '|', ';') - self.file.write('# PROP Default_Filter "' + typelist + '"\n') - - for file in self.sources[kind]: - file = os.path.normpath(file) - self.file.write('# Begin Source File\n\n' - 'SOURCE="' + file + '"\n' - '# End Source File\n') - self.file.write('# End Group\n') - - # add the SConscript file outside of the groups - self.file.write('# Begin Source File\n\n' - 'SOURCE="' + str(self.sconscript) + '"\n' - '# End Source File\n') - - def Parse(self): - try: - dspfile = open(self.dspabs,'r') - except IOError: - return # doesn't exist yet, so can't add anything to configs. - - line = dspfile.readline() - while line: - # TODO(1.5): - #if line.find("# End Project") > -1: - if string.find(line, "# End Project") > -1: - break - line = dspfile.readline() - - line = dspfile.readline() - datas = line - while line and line != '\n': - line = dspfile.readline() - datas = datas + line - - # OK, we've found our little pickled cache of data. - try: - datas = base64.decodestring(datas) - data = pickle.loads(datas) - except KeyboardInterrupt: - raise - except: - return # unable to unpickle any data for some reason - - self.configs.update(data) - - data = None - line = dspfile.readline() - datas = line - while line and line != '\n': - line = dspfile.readline() - datas = datas + line - - # OK, we've found our little pickled cache of data. - # it has a "# " in front of it, so we strip that. - try: - datas = base64.decodestring(datas) - data = pickle.loads(datas) - except KeyboardInterrupt: - raise - except: - return # unable to unpickle any data for some reason - - self.sources.update(data) - - def Build(self): - try: - self.file = open(self.dspabs,'w') - except IOError, detail: - raise SCons.Errors.InternalError, 'Unable to open "' + self.dspabs + '" for writing:' + str(detail) - else: - self.PrintHeader() - self.PrintProject() - self.file.close() - -V7DSPHeader = """\ - - -""" - -V7DSPConfiguration = """\ -\t\t -\t\t\t -\t\t -""" - -V8DSPHeader = """\ - - -""" - -V8DSPConfiguration = """\ -\t\t -\t\t\t -\t\t -""" -class _GenerateV7DSP(_DSPGenerator): - """Generates a Project file for MSVS .NET""" - - def __init__(self, dspfile, source, env): - _DSPGenerator.__init__(self, dspfile, source, env) - self.version = env['MSVS_VERSION'] - self.version_num, self.suite = msvs_parse_version(self.version) - if self.version_num >= 8.0: - self.versionstr = '8.00' - self.dspheader = V8DSPHeader - self.dspconfiguration = V8DSPConfiguration - else: - if self.version_num >= 7.1: - self.versionstr = '7.10' - else: - self.versionstr = '7.00' - self.dspheader = V7DSPHeader - self.dspconfiguration = V7DSPConfiguration - self.file = None - - def PrintHeader(self): - env = self.env - versionstr = self.versionstr - name = self.name - encoding = self.env.subst('$MSVSENCODING') - scc_provider = env.get('MSVS_SCC_PROVIDER', '') - scc_project_name = env.get('MSVS_SCC_PROJECT_NAME', '') - scc_aux_path = env.get('MSVS_SCC_AUX_PATH', '') - scc_local_path = env.get('MSVS_SCC_LOCAL_PATH', '') - project_guid = env.get('MSVS_PROJECT_GUID', '') - if self.version_num >= 8.0 and not project_guid: - project_guid = _generateGUID(self.dspfile, '') - if scc_provider != '': - scc_attrs = ('\tProjectGUID="%s"\n' - '\tSccProjectName="%s"\n' - '\tSccAuxPath="%s"\n' - '\tSccLocalPath="%s"\n' - '\tSccProvider="%s"' % (project_guid, scc_project_name, scc_aux_path, scc_local_path, scc_provider)) - else: - scc_attrs = ('\tProjectGUID="%s"\n' - '\tSccProjectName="%s"\n' - '\tSccLocalPath="%s"' % (project_guid, scc_project_name, scc_local_path)) - - self.file.write(self.dspheader % locals()) - - self.file.write('\t\n') - for platform in self.platforms: - self.file.write( - '\t\t\n' % platform) - self.file.write('\t\n') - - if self.version_num >= 8.0: - self.file.write('\t\n' - '\t\n') - - def PrintProject(self): - self.file.write('\t\n') - - confkeys = self.configs.keys() - confkeys.sort() - for kind in confkeys: - variant = self.configs[kind].variant - platform = self.configs[kind].platform - outdir = self.configs[kind].outdir - buildtarget = self.configs[kind].buildtarget - runfile = self.configs[kind].runfile - cmdargs = self.configs[kind].cmdargs - - env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET') - if not env_has_buildtarget: - self.env['MSVSBUILDTARGET'] = buildtarget - - starting = 'echo Starting SCons && ' - if cmdargs: - cmdargs = ' ' + cmdargs - else: - cmdargs = '' - buildcmd = xmlify(starting + self.env.subst('$MSVSBUILDCOM', 1) + cmdargs) - rebuildcmd = xmlify(starting + self.env.subst('$MSVSREBUILDCOM', 1) + cmdargs) - cleancmd = xmlify(starting + self.env.subst('$MSVSCLEANCOM', 1) + cmdargs) - - if not env_has_buildtarget: - del self.env['MSVSBUILDTARGET'] - - self.file.write(self.dspconfiguration % locals()) - - self.file.write('\t\n') - - if self.version_num >= 7.1: - self.file.write('\t\n' - '\t\n') - - self.PrintSourceFiles() - - self.file.write('\n') - - if self.nokeep == 0: - # now we pickle some data and add it to the file -- MSDEV will ignore it. - pdata = pickle.dumps(self.configs,1) - pdata = base64.encodestring(pdata) - self.file.write('\n') - - def printSources(self, hierarchy, commonprefix): - sorteditems = hierarchy.items() - # TODO(1.5): - #sorteditems.sort(lambda a, b: cmp(a[0].lower(), b[0].lower())) - sorteditems.sort(lambda a, b: cmp(string.lower(a[0]), string.lower(b[0]))) - - # First folders, then files - for key, value in sorteditems: - if SCons.Util.is_Dict(value): - self.file.write('\t\t\t\n' % (key)) - self.printSources(value, commonprefix) - self.file.write('\t\t\t\n') - - for key, value in sorteditems: - if SCons.Util.is_String(value): - file = value - if commonprefix: - file = os.path.join(commonprefix, value) - file = os.path.normpath(file) - self.file.write('\t\t\t\n' - '\t\t\t\n' % (file)) - - def PrintSourceFiles(self): - categories = {'Source Files': 'cpp;c;cxx;l;y;def;odl;idl;hpj;bat', - 'Header Files': 'h;hpp;hxx;hm;inl', - 'Local Headers': 'h;hpp;hxx;hm;inl', - 'Resource Files': 'r;rc;ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe', - 'Other Files': ''} - - self.file.write('\t\n') - - cats = categories.keys() - # TODO(1.5) - #cats.sort(lambda a, b: cmp(a.lower(), b.lower())) - cats.sort(lambda a, b: cmp(string.lower(a), string.lower(b))) - cats = filter(lambda k, s=self: s.sources[k], cats) - for kind in cats: - if len(cats) > 1: - self.file.write('\t\t\n' % (kind, categories[kind])) - - sources = self.sources[kind] - - # First remove any common prefix - commonprefix = None - if len(sources) > 1: - s = map(os.path.normpath, sources) - # take the dirname because the prefix may include parts - # of the filenames (e.g. if you have 'dir\abcd' and - # 'dir\acde' then the cp will be 'dir\a' ) - cp = os.path.dirname( os.path.commonprefix(s) ) - if cp and s[0][len(cp)] == os.sep: - # +1 because the filename starts after the separator - sources = map(lambda s, l=len(cp)+1: s[l:], sources) - commonprefix = cp - elif len(sources) == 1: - commonprefix = os.path.dirname( sources[0] ) - sources[0] = os.path.basename( sources[0] ) - - hierarchy = makeHierarchy(sources) - self.printSources(hierarchy, commonprefix=commonprefix) - - if len(cats)>1: - self.file.write('\t\t\n') - - # add the SConscript file outside of the groups - self.file.write('\t\t\n' - '\t\t\n' % str(self.sconscript)) - - self.file.write('\t\n' - '\t\n' - '\t\n') - - def Parse(self): - try: - dspfile = open(self.dspabs,'r') - except IOError: - return # doesn't exist yet, so can't add anything to configs. - - line = dspfile.readline() - while line: - # TODO(1.5) - #if line.find('LAF=m0ZjV7e zlAf^3@4N!%knWqlZbM*Ov6IUL2-OLBt43{p`4IL(?~_8|mCqk+J!o$JOg-6bZav)k zeEYsq5C1=zLz9?|K7{W$ z3V_XV-u@5e9Ps@FK!yOx(sqVy$y2ZwMgTZ~GU60+>2Yy_y%v?bjI6&n+8ZF_qAXptU|M?6&vu}Ni4VYeCqvDO zZR57@!zo+?MC>c!S~w_0^2C;vSPcxkXM$B#=c25ihaB!TznJDyoM&x_YV_e5AXw7; zcujZVmXbcEMh8>B2E8j6jrlbc40J;api~NU?{p z;1}Lny}hQw4j%_{R47)rNbMViZNGLLk8Z$n92|TknWAF(Tr!z{R5GRBK(R=s`p9qA z3~Ij0?uKuE%7<*;Uf1a^tXY@rTX(eULBOF60*==^AH2JvHtyd2VEx|4`o>+gv2p*s z5AVOXp(N(*3fRoxe-i(nGRqDgXt~jECqzf+NZh+eM^$=JrM(L6Rmn~eHy2e}Ihvps zn3|*)L@y?2*W*^;>na^h($N$hP0Q*Oz3}J-Xz(&kFDJ+Y`|bJ!%ljG+U*X3^&pE%S zVX(dkN}a2?cqYl(KuZ+oI8?HHc$>3|!@?}a+ZaX-nT!96pRE{DsE(F|EG`y=09hVn zfOKfPFo#H9*bN2+$y#d2VGQ;h3OZ29g|tTR7Wp@~nj?BmRc zVCXHvn6HT77pAoHATk5gh3Cvv2X@%kb>1!y^9XP2{X9MZkk)Olzn+5V&cWTryNwUl zZI&fwT>|Q!zz)20=U!u@arXzIVQ0Z}lp&iK7#|Osta&wW$-C+~*V#8PSCoQoXu3(f zBfcx&**9gS(AJ1~hF|7RF5G)hz{Wz^Jp#6h_rqY@1^gVi1ad$SAa~?3_5im%!4zi9 zK?%`m1|6@?Fx;3JG@zVi++pZ8V(H@)K@lz(tnB$EOe+lV{Ta&tPR~0G=+Az6gO0!r zD8~KIqx@UOIBsxm=so+E@b@JBke!uOWU|$afuelaZ7H78M6Ik|fd12skmW(-s{k~44x=800 zhOwCc2g=?cvCS18v(*?kFXOYx8T6Xr&hn9NDA@*YM&Ut~WpBzmhu@la z)?4xBy|a}$ykEd`*<17^D+_SP*eHqS@@6zT3pNFb)z9r=9`?oKqrowPtZ(~ajwrCX zqX9cjLT1>9>ybWKPthDn98xQO!q{?*%S7uY5GBQm-z2d()I1}J^(VXx7s(Rsq4J_M zOI^m*@pm)#_9P3ULB~4yhq@ zsOE6WOWclm)-RZO&;B4(NSBhE$g7p>#Wx_uLGW|bf~IZ{a1A`r(l>KsqqsnFBRs13 z+&qN1EpZ#hWsaLrbgf+f`RAc)<`ormW)mtRTe%x-X9L`J z(O{yF({c-IG{BuHvVDb|4pr}<(U$8bZcDNe7b51uKP)abW*}E!G-0gp_?F8zG=pwX zL4*95H%x;O5vF{*6z$MnmPe;reaoz(AK_-q8l7}xq9NEc!(I}n`(~@oRoqn;m%nmY zaS?g6EuEGtF$}!e@ae`>raM3{D|zDL0G|LEM6yE!uqSP


?Y<9wi9dFaU;lQO}E zOb$|3r7oqc%G|+>KjHk>TrpTT_S)ZAD%UWYt)eQ-NyS*g8985>_eRObI(^ENT*+PL z;S2!w`6xO*BZm`Aa7zjw``iuz|Fk7dkt>>FFnc=O!F3j03JXBDAf9O6$DsKU9z^+C*E5CuV#8xjFgd82P~^CV5#!|@eB+=WsrFx)~aJMeM4vOUC? zL(j+KV_zRM&oL|Z^tQImC44q-@C?h`v``pd4mnQEo4k079~=UgBdj;-x0G*Y!bOIG zQ+~JN`oq8-k(?^-Rg$QA2jeF1YDzEgF~70e?>PfGA3JaS#>Q z5YOSc;LT0W;B$sY)dlbT)B+CY8q%)jRlPHqon4&urVILo3Ab;d9FM4K-mL87z30o> eY4EQWd?sqbsalz>f?u`dQ%d1>_>y;};QK#}*mzI? diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_UserString.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_UserString.py deleted file mode 100644 index cde813d9d..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_UserString.py +++ /dev/null @@ -1,92 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/compat/_scons_UserString.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """ -A user-defined wrapper around string objects - -This class is "borrowed" from the Python 2.2 UserString and modified -slightly for use with SCons. It is *NOT* guaranteed to be fully compliant -with the standard UserString class from all later versions of Python. -In particular, it does not necessarily contain all of the methods found -in later versions. -""" - -import types - -StringType = types.StringType - -if hasattr(types, 'UnicodeType'): - UnicodeType = types.UnicodeType - def is_String(obj): - return type(obj) in (StringType, UnicodeType) -else: - def is_String(obj): - return type(obj) is StringType - -class UserString: - def __init__(self, seq): - if is_String(seq): - self.data = seq - elif isinstance(seq, UserString): - self.data = seq.data[:] - else: - self.data = str(seq) - def __str__(self): return str(self.data) - def __repr__(self): return repr(self.data) - def __int__(self): return int(self.data) - def __long__(self): return long(self.data) - def __float__(self): return float(self.data) - def __complex__(self): return complex(self.data) - def __hash__(self): return hash(self.data) - - def __cmp__(self, string): - if isinstance(string, UserString): - return cmp(self.data, string.data) - else: - return cmp(self.data, string) - def __contains__(self, char): - return char in self.data - - def __len__(self): return len(self.data) - def __getitem__(self, index): return self.__class__(self.data[index]) - def __getslice__(self, start, end): - start = max(start, 0); end = max(end, 0) - return self.__class__(self.data[start:end]) - - def __add__(self, other): - if isinstance(other, UserString): - return self.__class__(self.data + other.data) - elif is_String(other): - return self.__class__(self.data + other) - else: - return self.__class__(self.data + str(other)) - def __radd__(self, other): - if is_String(other): - return self.__class__(other + self.data) - else: - return self.__class__(str(other) + self.data) - def __mul__(self, n): - return self.__class__(self.data*n) - __rmul__ = __mul__ diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_hashlib.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_hashlib.py deleted file mode 100644 index 97bf8d94e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_hashlib.py +++ /dev/null @@ -1,85 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__doc__ = """ -hashlib backwards-compatibility module for older (pre-2.5) Python versions - -This does not not NOT (repeat, *NOT*) provide complete hashlib -functionality. It only wraps the portions of MD5 functionality used -by SCons, in an interface that looks like hashlib (or enough for our -purposes, anyway). In fact, this module will raise an ImportError if -the underlying md5 module isn't available. -""" - -__revision__ = "src/engine/SCons/compat/_scons_hashlib.py 3842 2008/12/20 22:59:52 scons" - -import md5 -import string - -class md5obj: - - md5_module = md5 - - def __init__(self, name, string=''): - if not name in ('MD5', 'md5'): - raise ValueError, "unsupported hash type" - self.name = 'md5' - self.m = self.md5_module.md5() - - def __repr__(self): - return '<%s HASH object @ %#x>' % (self.name, id(self)) - - def copy(self): - import copy - result = copy.copy(self) - result.m = self.m.copy() - return result - - def digest(self): - return self.m.digest() - - def update(self, arg): - return self.m.update(arg) - - if hasattr(md5.md5(), 'hexdigest'): - - def hexdigest(self): - return self.m.hexdigest() - - else: - - # Objects created by the underlying md5 module have no native - # hexdigest() method (*cough* 1.5.2 *cough*), so provide an - # equivalent lifted from elsewhere. - def hexdigest(self): - h = string.hexdigits - r = '' - for c in self.digest(): - i = ord(c) - r = r + h[(i >> 4) & 0xF] + h[i & 0xF] - return r - -new = md5obj - -def md5(string=''): - return md5obj('md5', string) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_itertools.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_itertools.py deleted file mode 100644 index 145a7f9cf..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_itertools.py +++ /dev/null @@ -1,118 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/compat/_scons_itertools.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """ -Implementations of itertools functions for Python versions that don't -have iterators. - -These implement the functions by creating the entire list, not returning -it element-by-element as the real itertools functions do. This means -that early Python versions won't get the performance benefit of using -the itertools, but we can still use them so the later Python versions -do get the advantages of using iterators. - -Because we return the entire list, we intentionally do not implement the -itertools functions that "return" infinitely-long lists: the count(), -cycle() and repeat() functions. Other functions below have remained -unimplemented simply because they aren't being used (yet) and it wasn't -obvious how to do it. Or, conversely, we only implemented those functions -that *were* easy to implement (mostly because the Python documentation -contained examples of equivalent code). - -Note that these do not have independent unit tests, so it's possible -that there are bugs. -""" - -def chain(*iterables): - result = [] - for x in iterables: - result.extend(list(x)) - return result - -def count(n=0): - # returns infinite length, should not be supported - raise NotImplementedError - -def cycle(iterable): - # returns infinite length, should not be supported - raise NotImplementedError - -def dropwhile(predicate, iterable): - result = [] - for x in iterable: - if not predicate(x): - result.append(x) - break - result.extend(iterable) - return result - -def groupby(iterable, *args): - raise NotImplementedError - -def ifilter(predicate, iterable): - result = [] - if predicate is None: - predicate = bool - for x in iterable: - if predicate(x): - result.append(x) - return result - -def ifilterfalse(predicate, iterable): - result = [] - if predicate is None: - predicate = bool - for x in iterable: - if not predicate(x): - result.append(x) - return result - -def imap(function, *iterables): - return apply(map, (function,) + tuple(iterables)) - -def islice(*args, **kw): - raise NotImplementedError - -def izip(*iterables): - return apply(zip, iterables) - -def repeat(*args, **kw): - # returns infinite length, should not be supported - raise NotImplementedError - -def starmap(*args, **kw): - raise NotImplementedError - -def takewhile(predicate, iterable): - result = [] - for x in iterable: - if predicate(x): - result.append(x) - else: - break - return result - -def tee(*args, **kw): - raise NotImplementedError diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_optparse.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_optparse.py deleted file mode 100644 index 6b376875e..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_optparse.py +++ /dev/null @@ -1,1719 +0,0 @@ -"""optparse - a powerful, extensible, and easy-to-use option parser. - -By Greg Ward - -Originally distributed as Optik; see http://optik.sourceforge.net/ . - -If you have problems with this module, please do not file bugs, -patches, or feature requests with Python; instead, use Optik's -SourceForge project page: - http://sourceforge.net/projects/optik - -For support, use the optik-users@lists.sourceforge.net mailing list -(http://lists.sourceforge.net/lists/listinfo/optik-users). -""" - -# Python developers: please do not make changes to this file, since -# it is automatically generated from the Optik source code. - -__version__ = "1.5.3" - -__all__ = ['Option', - 'SUPPRESS_HELP', - 'SUPPRESS_USAGE', - 'Values', - 'OptionContainer', - 'OptionGroup', - 'OptionParser', - 'HelpFormatter', - 'IndentedHelpFormatter', - 'TitledHelpFormatter', - 'OptParseError', - 'OptionError', - 'OptionConflictError', - 'OptionValueError', - 'BadOptionError'] - -__copyright__ = """ -Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved. -Copyright (c) 2002-2006 Python Software Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" - -import string -import sys, os -import types -import textwrap - -def _repr(self): - return "<%s at 0x%x: %s>" % (self.__class__.__name__, id(self), self) - - -try: - sys.getdefaultencoding -except AttributeError: - def fake_getdefaultencoding(): - return None - sys.getdefaultencoding = fake_getdefaultencoding - -try: - ''.encode -except AttributeError: - def encode_wrapper(s, encoding, replacement): - return s -else: - def encode_wrapper(s, encoding, replacement): - return s.encode(encoding, replacement) - - -# This file was generated from: -# Id: option_parser.py 527 2006-07-23 15:21:30Z greg -# Id: option.py 522 2006-06-11 16:22:03Z gward -# Id: help.py 527 2006-07-23 15:21:30Z greg -# Id: errors.py 509 2006-04-20 00:58:24Z gward - -try: - from gettext import gettext -except ImportError: - def gettext(message): - return message -_ = gettext - - -class OptParseError (Exception): - def __init__(self, msg): - self.msg = msg - - def __str__(self): - return self.msg - - -class OptionError (OptParseError): - """ - Raised if an Option instance is created with invalid or - inconsistent arguments. - """ - - def __init__(self, msg, option): - self.msg = msg - self.option_id = str(option) - - def __str__(self): - if self.option_id: - return "option %s: %s" % (self.option_id, self.msg) - else: - return self.msg - -class OptionConflictError (OptionError): - """ - Raised if conflicting options are added to an OptionParser. - """ - -class OptionValueError (OptParseError): - """ - Raised if an invalid option value is encountered on the command - line. - """ - -class BadOptionError (OptParseError): - """ - Raised if an invalid option is seen on the command line. - """ - def __init__(self, opt_str): - self.opt_str = opt_str - - def __str__(self): - return _("no such option: %s") % self.opt_str - -class AmbiguousOptionError (BadOptionError): - """ - Raised if an ambiguous option is seen on the command line. - """ - def __init__(self, opt_str, possibilities): - BadOptionError.__init__(self, opt_str) - self.possibilities = possibilities - - def __str__(self): - return (_("ambiguous option: %s (%s?)") - % (self.opt_str, string.join(self.possibilities, ", "))) - - -class HelpFormatter: - - """ - Abstract base class for formatting option help. OptionParser - instances should use one of the HelpFormatter subclasses for - formatting help; by default IndentedHelpFormatter is used. - - Instance attributes: - parser : OptionParser - the controlling OptionParser instance - indent_increment : int - the number of columns to indent per nesting level - max_help_position : int - the maximum starting column for option help text - help_position : int - the calculated starting column for option help text; - initially the same as the maximum - width : int - total number of columns for output (pass None to constructor for - this value to be taken from the $COLUMNS environment variable) - level : int - current indentation level - current_indent : int - current indentation level (in columns) - help_width : int - number of columns available for option help text (calculated) - default_tag : str - text to replace with each option's default value, "%default" - by default. Set to false value to disable default value expansion. - option_strings : { Option : str } - maps Option instances to the snippet of help text explaining - the syntax of that option, e.g. "-h, --help" or - "-fFILE, --file=FILE" - _short_opt_fmt : str - format string controlling how short options with values are - printed in help text. Must be either "%s%s" ("-fFILE") or - "%s %s" ("-f FILE"), because those are the two syntaxes that - Optik supports. - _long_opt_fmt : str - similar but for long options; must be either "%s %s" ("--file FILE") - or "%s=%s" ("--file=FILE"). - """ - - NO_DEFAULT_VALUE = "none" - - def __init__(self, - indent_increment, - max_help_position, - width, - short_first): - self.parser = None - self.indent_increment = indent_increment - self.help_position = self.max_help_position = max_help_position - if width is None: - try: - width = int(os.environ['COLUMNS']) - except (KeyError, ValueError): - width = 80 - width = width - 2 - self.width = width - self.current_indent = 0 - self.level = 0 - self.help_width = None # computed later - self.short_first = short_first - self.default_tag = "%default" - self.option_strings = {} - self._short_opt_fmt = "%s %s" - self._long_opt_fmt = "%s=%s" - - def set_parser(self, parser): - self.parser = parser - - def set_short_opt_delimiter(self, delim): - if delim not in ("", " "): - raise ValueError( - "invalid metavar delimiter for short options: %r" % delim) - self._short_opt_fmt = "%s" + delim + "%s" - - def set_long_opt_delimiter(self, delim): - if delim not in ("=", " "): - raise ValueError( - "invalid metavar delimiter for long options: %r" % delim) - self._long_opt_fmt = "%s" + delim + "%s" - - def indent(self): - self.current_indent = self.current_indent + self.indent_increment - self.level = self.level + 1 - - def dedent(self): - self.current_indent = self.current_indent - self.indent_increment - assert self.current_indent >= 0, "Indent decreased below 0." - self.level = self.level - 1 - - def format_usage(self, usage): - raise NotImplementedError, "subclasses must implement" - - def format_heading(self, heading): - raise NotImplementedError, "subclasses must implement" - - def _format_text(self, text): - """ - Format a paragraph of free-form text for inclusion in the - help output at the current indentation level. - """ - text_width = self.width - self.current_indent - indent = " "*self.current_indent - return textwrap.fill(text, - text_width, - initial_indent=indent, - subsequent_indent=indent) - - def format_description(self, description): - if description: - return self._format_text(description) + "\n" - else: - return "" - - def format_epilog(self, epilog): - if epilog: - return "\n" + self._format_text(epilog) + "\n" - else: - return "" - - - def expand_default(self, option): - if self.parser is None or not self.default_tag: - return option.help - - default_value = self.parser.defaults.get(option.dest) - if default_value is NO_DEFAULT or default_value is None: - default_value = self.NO_DEFAULT_VALUE - - return string.replace(option.help, self.default_tag, str(default_value)) - - def format_option(self, option): - # The help for each option consists of two parts: - # * the opt strings and metavars - # eg. ("-x", or "-fFILENAME, --file=FILENAME") - # * the user-supplied help string - # eg. ("turn on expert mode", "read data from FILENAME") - # - # If possible, we write both of these on the same line: - # -x turn on expert mode - # - # But if the opt string list is too long, we put the help - # string on a second line, indented to the same column it would - # start in if it fit on the first line. - # -fFILENAME, --file=FILENAME - # read data from FILENAME - result = [] - opts = self.option_strings[option] - opt_width = self.help_position - self.current_indent - 2 - if len(opts) > opt_width: - opts = "%*s%s\n" % (self.current_indent, "", opts) - indent_first = self.help_position - else: # start help on same line as opts - opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts) - indent_first = 0 - result.append(opts) - if option.help: - help_text = self.expand_default(option) - help_lines = textwrap.wrap(help_text, self.help_width) - result.append("%*s%s\n" % (indent_first, "", help_lines[0])) - for line in help_lines[1:]: - result.append("%*s%s\n" % (self.help_position, "", line)) - elif opts[-1] != "\n": - result.append("\n") - return string.join(result, "") - - def store_option_strings(self, parser): - self.indent() - max_len = 0 - for opt in parser.option_list: - strings = self.format_option_strings(opt) - self.option_strings[opt] = strings - max_len = max(max_len, len(strings) + self.current_indent) - self.indent() - for group in parser.option_groups: - for opt in group.option_list: - strings = self.format_option_strings(opt) - self.option_strings[opt] = strings - max_len = max(max_len, len(strings) + self.current_indent) - self.dedent() - self.dedent() - self.help_position = min(max_len + 2, self.max_help_position) - self.help_width = self.width - self.help_position - - def format_option_strings(self, option): - """Return a comma-separated list of option strings & metavariables.""" - if option.takes_value(): - metavar = option.metavar or string.upper(option.dest) - short_opts = [] - for sopt in option._short_opts: - short_opts.append(self._short_opt_fmt % (sopt, metavar)) - long_opts = [] - for lopt in option._long_opts: - long_opts.append(self._long_opt_fmt % (lopt, metavar)) - else: - short_opts = option._short_opts - long_opts = option._long_opts - - if self.short_first: - opts = short_opts + long_opts - else: - opts = long_opts + short_opts - - return string.join(opts, ", ") - -class IndentedHelpFormatter (HelpFormatter): - """Format help with indented section bodies. - """ - - def __init__(self, - indent_increment=2, - max_help_position=24, - width=None, - short_first=1): - HelpFormatter.__init__( - self, indent_increment, max_help_position, width, short_first) - - def format_usage(self, usage): - return _("Usage: %s\n") % usage - - def format_heading(self, heading): - return "%*s%s:\n" % (self.current_indent, "", heading) - - -class TitledHelpFormatter (HelpFormatter): - """Format help with underlined section headers. - """ - - def __init__(self, - indent_increment=0, - max_help_position=24, - width=None, - short_first=0): - HelpFormatter.__init__ ( - self, indent_increment, max_help_position, width, short_first) - - def format_usage(self, usage): - return "%s %s\n" % (self.format_heading(_("Usage")), usage) - - def format_heading(self, heading): - return "%s\n%s\n" % (heading, "=-"[self.level] * len(heading)) - - -def _parse_num(val, type): - if string.lower(val[:2]) == "0x": # hexadecimal - radix = 16 - elif string.lower(val[:2]) == "0b": # binary - radix = 2 - val = val[2:] or "0" # have to remove "0b" prefix - elif val[:1] == "0": # octal - radix = 8 - else: # decimal - radix = 10 - - return type(val, radix) - -def _parse_int(val): - return _parse_num(val, int) - -def _parse_long(val): - return _parse_num(val, long) - -try: - int('0', 10) -except TypeError: - # Python 1.5.2 doesn't allow a radix value to be passed to int(). - _parse_int = int - -try: - long('0', 10) -except TypeError: - # Python 1.5.2 doesn't allow a radix value to be passed to long(). - _parse_long = long - -_builtin_cvt = { "int" : (_parse_int, _("integer")), - "long" : (_parse_long, _("long integer")), - "float" : (float, _("floating-point")), - "complex" : (complex, _("complex")) } - -def check_builtin(option, opt, value): - (cvt, what) = _builtin_cvt[option.type] - try: - return cvt(value) - except ValueError: - raise OptionValueError( - _("option %s: invalid %s value: %r") % (opt, what, value)) - -def check_choice(option, opt, value): - if value in option.choices: - return value - else: - choices = string.join(map(repr, option.choices), ", ") - raise OptionValueError( - _("option %s: invalid choice: %r (choose from %s)") - % (opt, value, choices)) - -# Not supplying a default is different from a default of None, -# so we need an explicit "not supplied" value. -NO_DEFAULT = ("NO", "DEFAULT") - - -class Option: - """ - Instance attributes: - _short_opts : [string] - _long_opts : [string] - - action : string - type : string - dest : string - default : any - nargs : int - const : any - choices : [string] - callback : function - callback_args : (any*) - callback_kwargs : { string : any } - help : string - metavar : string - """ - - # The list of instance attributes that may be set through - # keyword args to the constructor. - ATTRS = ['action', - 'type', - 'dest', - 'default', - 'nargs', - 'const', - 'choices', - 'callback', - 'callback_args', - 'callback_kwargs', - 'help', - 'metavar'] - - # The set of actions allowed by option parsers. Explicitly listed - # here so the constructor can validate its arguments. - ACTIONS = ("store", - "store_const", - "store_true", - "store_false", - "append", - "append_const", - "count", - "callback", - "help", - "version") - - # The set of actions that involve storing a value somewhere; - # also listed just for constructor argument validation. (If - # the action is one of these, there must be a destination.) - STORE_ACTIONS = ("store", - "store_const", - "store_true", - "store_false", - "append", - "append_const", - "count") - - # The set of actions for which it makes sense to supply a value - # type, ie. which may consume an argument from the command line. - TYPED_ACTIONS = ("store", - "append", - "callback") - - # The set of actions which *require* a value type, ie. that - # always consume an argument from the command line. - ALWAYS_TYPED_ACTIONS = ("store", - "append") - - # The set of actions which take a 'const' attribute. - CONST_ACTIONS = ("store_const", - "append_const") - - # The set of known types for option parsers. Again, listed here for - # constructor argument validation. - TYPES = ("string", "int", "long", "float", "complex", "choice") - - # Dictionary of argument checking functions, which convert and - # validate option arguments according to the option type. - # - # Signature of checking functions is: - # check(option : Option, opt : string, value : string) -> any - # where - # option is the Option instance calling the checker - # opt is the actual option seen on the command-line - # (eg. "-a", "--file") - # value is the option argument seen on the command-line - # - # The return value should be in the appropriate Python type - # for option.type -- eg. an integer if option.type == "int". - # - # If no checker is defined for a type, arguments will be - # unchecked and remain strings. - TYPE_CHECKER = { "int" : check_builtin, - "long" : check_builtin, - "float" : check_builtin, - "complex": check_builtin, - "choice" : check_choice, - } - - - # CHECK_METHODS is a list of unbound method objects; they are called - # by the constructor, in order, after all attributes are - # initialized. The list is created and filled in later, after all - # the methods are actually defined. (I just put it here because I - # like to define and document all class attributes in the same - # place.) Subclasses that add another _check_*() method should - # define their own CHECK_METHODS list that adds their check method - # to those from this class. - CHECK_METHODS = None - - - # -- Constructor/initialization methods ---------------------------- - - def __init__(self, *opts, **attrs): - # Set _short_opts, _long_opts attrs from 'opts' tuple. - # Have to be set now, in case no option strings are supplied. - self._short_opts = [] - self._long_opts = [] - opts = self._check_opt_strings(opts) - self._set_opt_strings(opts) - - # Set all other attrs (action, type, etc.) from 'attrs' dict - self._set_attrs(attrs) - - # Check all the attributes we just set. There are lots of - # complicated interdependencies, but luckily they can be farmed - # out to the _check_*() methods listed in CHECK_METHODS -- which - # could be handy for subclasses! The one thing these all share - # is that they raise OptionError if they discover a problem. - for checker in self.CHECK_METHODS: - checker(self) - - def _check_opt_strings(self, opts): - # Filter out None because early versions of Optik had exactly - # one short option and one long option, either of which - # could be None. - opts = filter(None, opts) - if not opts: - raise TypeError("at least one option string must be supplied") - return opts - - def _set_opt_strings(self, opts): - for opt in opts: - if len(opt) < 2: - raise OptionError( - "invalid option string %r: " - "must be at least two characters long" % opt, self) - elif len(opt) == 2: - if not (opt[0] == "-" and opt[1] != "-"): - raise OptionError( - "invalid short option string %r: " - "must be of the form -x, (x any non-dash char)" % opt, - self) - self._short_opts.append(opt) - else: - if not (opt[0:2] == "--" and opt[2] != "-"): - raise OptionError( - "invalid long option string %r: " - "must start with --, followed by non-dash" % opt, - self) - self._long_opts.append(opt) - - def _set_attrs(self, attrs): - for attr in self.ATTRS: - if attrs.has_key(attr): - setattr(self, attr, attrs[attr]) - del attrs[attr] - else: - if attr == 'default': - setattr(self, attr, NO_DEFAULT) - else: - setattr(self, attr, None) - if attrs: - attrs = attrs.keys() - attrs.sort() - raise OptionError( - "invalid keyword arguments: %s" % string.join(attrs, ", "), - self) - - - # -- Constructor validation methods -------------------------------- - - def _check_action(self): - if self.action is None: - self.action = "store" - elif self.action not in self.ACTIONS: - raise OptionError("invalid action: %r" % self.action, self) - - def _check_type(self): - if self.type is None: - if self.action in self.ALWAYS_TYPED_ACTIONS: - if self.choices is not None: - # The "choices" attribute implies "choice" type. - self.type = "choice" - else: - # No type given? "string" is the most sensible default. - self.type = "string" - else: - # Allow type objects or builtin type conversion functions - # (int, str, etc.) as an alternative to their names. (The - # complicated check of __builtin__ is only necessary for - # Python 2.1 and earlier, and is short-circuited by the - # first check on modern Pythons.) - import __builtin__ - if ( type(self.type) is types.TypeType or - (hasattr(self.type, "__name__") and - getattr(__builtin__, self.type.__name__, None) is self.type) ): - self.type = self.type.__name__ - - if self.type == "str": - self.type = "string" - - if self.type not in self.TYPES: - raise OptionError("invalid option type: %r" % self.type, self) - if self.action not in self.TYPED_ACTIONS: - raise OptionError( - "must not supply a type for action %r" % self.action, self) - - def _check_choice(self): - if self.type == "choice": - if self.choices is None: - raise OptionError( - "must supply a list of choices for type 'choice'", self) - elif type(self.choices) not in (types.TupleType, types.ListType): - raise OptionError( - "choices must be a list of strings ('%s' supplied)" - % string.split(str(type(self.choices)), "'")[1], self) - elif self.choices is not None: - raise OptionError( - "must not supply choices for type %r" % self.type, self) - - def _check_dest(self): - # No destination given, and we need one for this action. The - # self.type check is for callbacks that take a value. - takes_value = (self.action in self.STORE_ACTIONS or - self.type is not None) - if self.dest is None and takes_value: - - # Glean a destination from the first long option string, - # or from the first short option string if no long options. - if self._long_opts: - # eg. "--foo-bar" -> "foo_bar" - self.dest = string.replace(self._long_opts[0][2:], '-', '_') - else: - self.dest = self._short_opts[0][1] - - def _check_const(self): - if self.action not in self.CONST_ACTIONS and self.const is not None: - raise OptionError( - "'const' must not be supplied for action %r" % self.action, - self) - - def _check_nargs(self): - if self.action in self.TYPED_ACTIONS: - if self.nargs is None: - self.nargs = 1 - elif self.nargs is not None: - raise OptionError( - "'nargs' must not be supplied for action %r" % self.action, - self) - - def _check_callback(self): - if self.action == "callback": - if not callable(self.callback): - raise OptionError( - "callback not callable: %r" % self.callback, self) - if (self.callback_args is not None and - type(self.callback_args) is not types.TupleType): - raise OptionError( - "callback_args, if supplied, must be a tuple: not %r" - % self.callback_args, self) - if (self.callback_kwargs is not None and - type(self.callback_kwargs) is not types.DictType): - raise OptionError( - "callback_kwargs, if supplied, must be a dict: not %r" - % self.callback_kwargs, self) - else: - if self.callback is not None: - raise OptionError( - "callback supplied (%r) for non-callback option" - % self.callback, self) - if self.callback_args is not None: - raise OptionError( - "callback_args supplied for non-callback option", self) - if self.callback_kwargs is not None: - raise OptionError( - "callback_kwargs supplied for non-callback option", self) - - - CHECK_METHODS = [_check_action, - _check_type, - _check_choice, - _check_dest, - _check_const, - _check_nargs, - _check_callback] - - - # -- Miscellaneous methods ----------------------------------------- - - def __str__(self): - return string.join(self._short_opts + self._long_opts, "/") - - __repr__ = _repr - - def takes_value(self): - return self.type is not None - - def get_opt_string(self): - if self._long_opts: - return self._long_opts[0] - else: - return self._short_opts[0] - - - # -- Processing methods -------------------------------------------- - - def check_value(self, opt, value): - checker = self.TYPE_CHECKER.get(self.type) - if checker is None: - return value - else: - return checker(self, opt, value) - - def convert_value(self, opt, value): - if value is not None: - if self.nargs == 1: - return self.check_value(opt, value) - else: - return tuple(map(lambda v, o=opt, s=self: s.check_value(o, v), value)) - - def process(self, opt, value, values, parser): - - # First, convert the value(s) to the right type. Howl if any - # value(s) are bogus. - value = self.convert_value(opt, value) - - # And then take whatever action is expected of us. - # This is a separate method to make life easier for - # subclasses to add new actions. - return self.take_action( - self.action, self.dest, opt, value, values, parser) - - def take_action(self, action, dest, opt, value, values, parser): - if action == "store": - setattr(values, dest, value) - elif action == "store_const": - setattr(values, dest, self.const) - elif action == "store_true": - setattr(values, dest, True) - elif action == "store_false": - setattr(values, dest, False) - elif action == "append": - values.ensure_value(dest, []).append(value) - elif action == "append_const": - values.ensure_value(dest, []).append(self.const) - elif action == "count": - setattr(values, dest, values.ensure_value(dest, 0) + 1) - elif action == "callback": - args = self.callback_args or () - kwargs = self.callback_kwargs or {} - apply(self.callback, (self, opt, value, parser,) + args, kwargs) - elif action == "help": - parser.print_help() - parser.exit() - elif action == "version": - parser.print_version() - parser.exit() - else: - raise RuntimeError, "unknown action %r" % self.action - - return 1 - -# class Option - - -SUPPRESS_HELP = "SUPPRESS"+"HELP" -SUPPRESS_USAGE = "SUPPRESS"+"USAGE" - -# For compatibility with Python 2.2 -try: - True, False -except NameError: - (True, False) = (1, 0) - -try: - types.UnicodeType -except AttributeError: - def isbasestring(x): - return isinstance(x, types.StringType) -else: - def isbasestring(x): - return isinstance(x, types.StringType) or isinstance(x, types.UnicodeType) - -class Values: - - def __init__(self, defaults=None): - if defaults: - for (attr, val) in defaults.items(): - setattr(self, attr, val) - - def __str__(self): - return str(self.__dict__) - - __repr__ = _repr - - def __cmp__(self, other): - if isinstance(other, Values): - return cmp(self.__dict__, other.__dict__) - elif isinstance(other, types.DictType): - return cmp(self.__dict__, other) - else: - return -1 - - def _update_careful(self, dict): - """ - Update the option values from an arbitrary dictionary, but only - use keys from dict that already have a corresponding attribute - in self. Any keys in dict without a corresponding attribute - are silently ignored. - """ - for attr in dir(self): - if dict.has_key(attr): - dval = dict[attr] - if dval is not None: - setattr(self, attr, dval) - - def _update_loose(self, dict): - """ - Update the option values from an arbitrary dictionary, - using all keys from the dictionary regardless of whether - they have a corresponding attribute in self or not. - """ - self.__dict__.update(dict) - - def _update(self, dict, mode): - if mode == "careful": - self._update_careful(dict) - elif mode == "loose": - self._update_loose(dict) - else: - raise ValueError, "invalid update mode: %r" % mode - - def read_module(self, modname, mode="careful"): - __import__(modname) - mod = sys.modules[modname] - self._update(vars(mod), mode) - - def read_file(self, filename, mode="careful"): - vars = {} - execfile(filename, vars) - self._update(vars, mode) - - def ensure_value(self, attr, value): - if not hasattr(self, attr) or getattr(self, attr) is None: - setattr(self, attr, value) - return getattr(self, attr) - - -class OptionContainer: - - """ - Abstract base class. - - Class attributes: - standard_option_list : [Option] - list of standard options that will be accepted by all instances - of this parser class (intended to be overridden by subclasses). - - Instance attributes: - option_list : [Option] - the list of Option objects contained by this OptionContainer - _short_opt : { string : Option } - dictionary mapping short option strings, eg. "-f" or "-X", - to the Option instances that implement them. If an Option - has multiple short option strings, it will appears in this - dictionary multiple times. [1] - _long_opt : { string : Option } - dictionary mapping long option strings, eg. "--file" or - "--exclude", to the Option instances that implement them. - Again, a given Option can occur multiple times in this - dictionary. [1] - defaults : { string : any } - dictionary mapping option destination names to default - values for each destination [1] - - [1] These mappings are common to (shared by) all components of the - controlling OptionParser, where they are initially created. - - """ - - def __init__(self, option_class, conflict_handler, description): - # Initialize the option list and related data structures. - # This method must be provided by subclasses, and it must - # initialize at least the following instance attributes: - # option_list, _short_opt, _long_opt, defaults. - self._create_option_list() - - self.option_class = option_class - self.set_conflict_handler(conflict_handler) - self.set_description(description) - - def _create_option_mappings(self): - # For use by OptionParser constructor -- create the master - # option mappings used by this OptionParser and all - # OptionGroups that it owns. - self._short_opt = {} # single letter -> Option instance - self._long_opt = {} # long option -> Option instance - self.defaults = {} # maps option dest -> default value - - - def _share_option_mappings(self, parser): - # For use by OptionGroup constructor -- use shared option - # mappings from the OptionParser that owns this OptionGroup. - self._short_opt = parser._short_opt - self._long_opt = parser._long_opt - self.defaults = parser.defaults - - def set_conflict_handler(self, handler): - if handler not in ("error", "resolve"): - raise ValueError, "invalid conflict_resolution value %r" % handler - self.conflict_handler = handler - - def set_description(self, description): - self.description = description - - def get_description(self): - return self.description - - - def destroy(self): - """see OptionParser.destroy().""" - del self._short_opt - del self._long_opt - del self.defaults - - - # -- Option-adding methods ----------------------------------------- - - def _check_conflict(self, option): - conflict_opts = [] - for opt in option._short_opts: - if self._short_opt.has_key(opt): - conflict_opts.append((opt, self._short_opt[opt])) - for opt in option._long_opts: - if self._long_opt.has_key(opt): - conflict_opts.append((opt, self._long_opt[opt])) - - if conflict_opts: - handler = self.conflict_handler - if handler == "error": - raise OptionConflictError( - "conflicting option string(s): %s" - % string.join(map(lambda co: co[0], conflict_opts), ", "), - option) - elif handler == "resolve": - for (opt, c_option) in conflict_opts: - if opt[:2] == "--": - c_option._long_opts.remove(opt) - del self._long_opt[opt] - else: - c_option._short_opts.remove(opt) - del self._short_opt[opt] - if not (c_option._short_opts or c_option._long_opts): - c_option.container.option_list.remove(c_option) - - def add_option(self, *args, **kwargs): - """add_option(Option) - add_option(opt_str, ..., kwarg=val, ...) - """ - if type(args[0]) is types.StringType: - option = apply(self.option_class, args, kwargs) - elif len(args) == 1 and not kwargs: - option = args[0] - if not isinstance(option, Option): - raise TypeError, "not an Option instance: %r" % option - else: - raise TypeError, "invalid arguments" - - self._check_conflict(option) - - self.option_list.append(option) - option.container = self - for opt in option._short_opts: - self._short_opt[opt] = option - for opt in option._long_opts: - self._long_opt[opt] = option - - if option.dest is not None: # option has a dest, we need a default - if option.default is not NO_DEFAULT: - self.defaults[option.dest] = option.default - elif not self.defaults.has_key(option.dest): - self.defaults[option.dest] = None - - return option - - def add_options(self, option_list): - for option in option_list: - self.add_option(option) - - # -- Option query/removal methods ---------------------------------- - - def get_option(self, opt_str): - return (self._short_opt.get(opt_str) or - self._long_opt.get(opt_str)) - - def has_option(self, opt_str): - return (self._short_opt.has_key(opt_str) or - self._long_opt.has_key(opt_str)) - - def remove_option(self, opt_str): - option = self._short_opt.get(opt_str) - if option is None: - option = self._long_opt.get(opt_str) - if option is None: - raise ValueError("no such option %r" % opt_str) - - for opt in option._short_opts: - del self._short_opt[opt] - for opt in option._long_opts: - del self._long_opt[opt] - option.container.option_list.remove(option) - - - # -- Help-formatting methods --------------------------------------- - - def format_option_help(self, formatter): - if not self.option_list: - return "" - result = [] - for option in self.option_list: - if not option.help is SUPPRESS_HELP: - result.append(formatter.format_option(option)) - return string.join(result, "") - - def format_description(self, formatter): - return formatter.format_description(self.get_description()) - - def format_help(self, formatter): - result = [] - if self.description: - result.append(self.format_description(formatter)) - if self.option_list: - result.append(self.format_option_help(formatter)) - return string.join(result, "\n") - - -class OptionGroup (OptionContainer): - - def __init__(self, parser, title, description=None): - self.parser = parser - OptionContainer.__init__( - self, parser.option_class, parser.conflict_handler, description) - self.title = title - - def _create_option_list(self): - self.option_list = [] - self._share_option_mappings(self.parser) - - def set_title(self, title): - self.title = title - - def destroy(self): - """see OptionParser.destroy().""" - OptionContainer.destroy(self) - del self.option_list - - # -- Help-formatting methods --------------------------------------- - - def format_help(self, formatter): - result = formatter.format_heading(self.title) - formatter.indent() - result = result + OptionContainer.format_help(self, formatter) - formatter.dedent() - return result - - -class OptionParser (OptionContainer): - - """ - Class attributes: - standard_option_list : [Option] - list of standard options that will be accepted by all instances - of this parser class (intended to be overridden by subclasses). - - Instance attributes: - usage : string - a usage string for your program. Before it is displayed - to the user, "%prog" will be expanded to the name of - your program (self.prog or os.path.basename(sys.argv[0])). - prog : string - the name of the current program (to override - os.path.basename(sys.argv[0])). - epilog : string - paragraph of help text to print after option help - - option_groups : [OptionGroup] - list of option groups in this parser (option groups are - irrelevant for parsing the command-line, but very useful - for generating help) - - allow_interspersed_args : bool = true - if true, positional arguments may be interspersed with options. - Assuming -a and -b each take a single argument, the command-line - -ablah foo bar -bboo baz - will be interpreted the same as - -ablah -bboo -- foo bar baz - If this flag were false, that command line would be interpreted as - -ablah -- foo bar -bboo baz - -- ie. we stop processing options as soon as we see the first - non-option argument. (This is the tradition followed by - Python's getopt module, Perl's Getopt::Std, and other argument- - parsing libraries, but it is generally annoying to users.) - - process_default_values : bool = true - if true, option default values are processed similarly to option - values from the command line: that is, they are passed to the - type-checking function for the option's type (as long as the - default value is a string). (This really only matters if you - have defined custom types; see SF bug #955889.) Set it to false - to restore the behaviour of Optik 1.4.1 and earlier. - - rargs : [string] - the argument list currently being parsed. Only set when - parse_args() is active, and continually trimmed down as - we consume arguments. Mainly there for the benefit of - callback options. - largs : [string] - the list of leftover arguments that we have skipped while - parsing options. If allow_interspersed_args is false, this - list is always empty. - values : Values - the set of option values currently being accumulated. Only - set when parse_args() is active. Also mainly for callbacks. - - Because of the 'rargs', 'largs', and 'values' attributes, - OptionParser is not thread-safe. If, for some perverse reason, you - need to parse command-line arguments simultaneously in different - threads, use different OptionParser instances. - - """ - - standard_option_list = [] - - def __init__(self, - usage=None, - option_list=None, - option_class=Option, - version=None, - conflict_handler="error", - description=None, - formatter=None, - add_help_option=True, - prog=None, - epilog=None): - OptionContainer.__init__( - self, option_class, conflict_handler, description) - self.set_usage(usage) - self.prog = prog - self.version = version - self.allow_interspersed_args = True - self.process_default_values = True - if formatter is None: - formatter = IndentedHelpFormatter() - self.formatter = formatter - self.formatter.set_parser(self) - self.epilog = epilog - - # Populate the option list; initial sources are the - # standard_option_list class attribute, the 'option_list' - # argument, and (if applicable) the _add_version_option() and - # _add_help_option() methods. - self._populate_option_list(option_list, - add_help=add_help_option) - - self._init_parsing_state() - - - def destroy(self): - """ - Declare that you are done with this OptionParser. This cleans up - reference cycles so the OptionParser (and all objects referenced by - it) can be garbage-collected promptly. After calling destroy(), the - OptionParser is unusable. - """ - OptionContainer.destroy(self) - for group in self.option_groups: - group.destroy() - del self.option_list - del self.option_groups - del self.formatter - - - # -- Private methods ----------------------------------------------- - # (used by our or OptionContainer's constructor) - - def _create_option_list(self): - self.option_list = [] - self.option_groups = [] - self._create_option_mappings() - - def _add_help_option(self): - self.add_option("-h", "--help", - action="help", - help=_("show this help message and exit")) - - def _add_version_option(self): - self.add_option("--version", - action="version", - help=_("show program's version number and exit")) - - def _populate_option_list(self, option_list, add_help=True): - if self.standard_option_list: - self.add_options(self.standard_option_list) - if option_list: - self.add_options(option_list) - if self.version: - self._add_version_option() - if add_help: - self._add_help_option() - - def _init_parsing_state(self): - # These are set in parse_args() for the convenience of callbacks. - self.rargs = None - self.largs = None - self.values = None - - - # -- Simple modifier methods --------------------------------------- - - def set_usage(self, usage): - if usage is None: - self.usage = _("%prog [options]") - elif usage is SUPPRESS_USAGE: - self.usage = None - # For backwards compatibility with Optik 1.3 and earlier. - elif string.lower(usage)[:7] == "usage: ": - self.usage = usage[7:] - else: - self.usage = usage - - def enable_interspersed_args(self): - self.allow_interspersed_args = True - - def disable_interspersed_args(self): - self.allow_interspersed_args = False - - def set_process_default_values(self, process): - self.process_default_values = process - - def set_default(self, dest, value): - self.defaults[dest] = value - - def set_defaults(self, **kwargs): - self.defaults.update(kwargs) - - def _get_all_options(self): - options = self.option_list[:] - for group in self.option_groups: - options.extend(group.option_list) - return options - - def get_default_values(self): - if not self.process_default_values: - # Old, pre-Optik 1.5 behaviour. - return Values(self.defaults) - - defaults = self.defaults.copy() - for option in self._get_all_options(): - default = defaults.get(option.dest) - if isbasestring(default): - opt_str = option.get_opt_string() - defaults[option.dest] = option.check_value(opt_str, default) - - return Values(defaults) - - - # -- OptionGroup methods ------------------------------------------- - - def add_option_group(self, *args, **kwargs): - # XXX lots of overlap with OptionContainer.add_option() - if type(args[0]) is types.StringType: - group = apply(OptionGroup, (self,) + args, kwargs) - elif len(args) == 1 and not kwargs: - group = args[0] - if not isinstance(group, OptionGroup): - raise TypeError, "not an OptionGroup instance: %r" % group - if group.parser is not self: - raise ValueError, "invalid OptionGroup (wrong parser)" - else: - raise TypeError, "invalid arguments" - - self.option_groups.append(group) - return group - - def get_option_group(self, opt_str): - option = (self._short_opt.get(opt_str) or - self._long_opt.get(opt_str)) - if option and option.container is not self: - return option.container - return None - - - # -- Option-parsing methods ---------------------------------------- - - def _get_args(self, args): - if args is None: - return sys.argv[1:] - else: - return args[:] # don't modify caller's list - - def parse_args(self, args=None, values=None): - """ - parse_args(args : [string] = sys.argv[1:], - values : Values = None) - -> (values : Values, args : [string]) - - Parse the command-line options found in 'args' (default: - sys.argv[1:]). Any errors result in a call to 'error()', which - by default prints the usage message to stderr and calls - sys.exit() with an error message. On success returns a pair - (values, args) where 'values' is an Values instance (with all - your option values) and 'args' is the list of arguments left - over after parsing options. - """ - rargs = self._get_args(args) - if values is None: - values = self.get_default_values() - - # Store the halves of the argument list as attributes for the - # convenience of callbacks: - # rargs - # the rest of the command-line (the "r" stands for - # "remaining" or "right-hand") - # largs - # the leftover arguments -- ie. what's left after removing - # options and their arguments (the "l" stands for "leftover" - # or "left-hand") - self.rargs = rargs - self.largs = largs = [] - self.values = values - - try: - stop = self._process_args(largs, rargs, values) - except (BadOptionError, OptionValueError), err: - self.error(str(err)) - - args = largs + rargs - return self.check_values(values, args) - - def check_values(self, values, args): - """ - check_values(values : Values, args : [string]) - -> (values : Values, args : [string]) - - Check that the supplied option values and leftover arguments are - valid. Returns the option values and leftover arguments - (possibly adjusted, possibly completely new -- whatever you - like). Default implementation just returns the passed-in - values; subclasses may override as desired. - """ - return (values, args) - - def _process_args(self, largs, rargs, values): - """_process_args(largs : [string], - rargs : [string], - values : Values) - - Process command-line arguments and populate 'values', consuming - options and arguments from 'rargs'. If 'allow_interspersed_args' is - false, stop at the first non-option argument. If true, accumulate any - interspersed non-option arguments in 'largs'. - """ - while rargs: - arg = rargs[0] - # We handle bare "--" explicitly, and bare "-" is handled by the - # standard arg handler since the short arg case ensures that the - # len of the opt string is greater than 1. - if arg == "--": - del rargs[0] - return - elif arg[0:2] == "--": - # process a single long option (possibly with value(s)) - self._process_long_opt(rargs, values) - elif arg[:1] == "-" and len(arg) > 1: - # process a cluster of short options (possibly with - # value(s) for the last one only) - self._process_short_opts(rargs, values) - elif self.allow_interspersed_args: - largs.append(arg) - del rargs[0] - else: - return # stop now, leave this arg in rargs - - # Say this is the original argument list: - # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] - # ^ - # (we are about to process arg(i)). - # - # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of - # [arg0, ..., arg(i-1)] (any options and their arguments will have - # been removed from largs). - # - # The while loop will usually consume 1 or more arguments per pass. - # If it consumes 1 (eg. arg is an option that takes no arguments), - # then after _process_arg() is done the situation is: - # - # largs = subset of [arg0, ..., arg(i)] - # rargs = [arg(i+1), ..., arg(N-1)] - # - # If allow_interspersed_args is false, largs will always be - # *empty* -- still a subset of [arg0, ..., arg(i-1)], but - # not a very interesting subset! - - def _match_long_opt(self, opt): - """_match_long_opt(opt : string) -> string - - Determine which long option string 'opt' matches, ie. which one - it is an unambiguous abbrevation for. Raises BadOptionError if - 'opt' doesn't unambiguously match any long option string. - """ - return _match_abbrev(opt, self._long_opt) - - def _process_long_opt(self, rargs, values): - arg = rargs.pop(0) - - # Value explicitly attached to arg? Pretend it's the next - # argument. - if "=" in arg: - (opt, next_arg) = string.split(arg, "=", 1) - rargs.insert(0, next_arg) - had_explicit_value = True - else: - opt = arg - had_explicit_value = False - - opt = self._match_long_opt(opt) - option = self._long_opt[opt] - if option.takes_value(): - nargs = option.nargs - if len(rargs) < nargs: - if nargs == 1: - self.error(_("%s option requires an argument") % opt) - else: - self.error(_("%s option requires %d arguments") - % (opt, nargs)) - elif nargs == 1: - value = rargs.pop(0) - else: - value = tuple(rargs[0:nargs]) - del rargs[0:nargs] - - elif had_explicit_value: - self.error(_("%s option does not take a value") % opt) - - else: - value = None - - option.process(opt, value, values, self) - - def _process_short_opts(self, rargs, values): - arg = rargs.pop(0) - stop = False - i = 1 - for ch in arg[1:]: - opt = "-" + ch - option = self._short_opt.get(opt) - i = i + 1 # we have consumed a character - - if not option: - raise BadOptionError(opt) - if option.takes_value(): - # Any characters left in arg? Pretend they're the - # next arg, and stop consuming characters of arg. - if i < len(arg): - rargs.insert(0, arg[i:]) - stop = True - - nargs = option.nargs - if len(rargs) < nargs: - if nargs == 1: - self.error(_("%s option requires an argument") % opt) - else: - self.error(_("%s option requires %d arguments") - % (opt, nargs)) - elif nargs == 1: - value = rargs.pop(0) - else: - value = tuple(rargs[0:nargs]) - del rargs[0:nargs] - - else: # option doesn't take a value - value = None - - option.process(opt, value, values, self) - - if stop: - break - - - # -- Feedback methods ---------------------------------------------- - - def get_prog_name(self): - if self.prog is None: - return os.path.basename(sys.argv[0]) - else: - return self.prog - - def expand_prog_name(self, s): - return string.replace(s, "%prog", self.get_prog_name()) - - def get_description(self): - return self.expand_prog_name(self.description) - - def exit(self, status=0, msg=None): - if msg: - sys.stderr.write(msg) - sys.exit(status) - - def error(self, msg): - """error(msg : string) - - Print a usage message incorporating 'msg' to stderr and exit. - If you override this in a subclass, it should not return -- it - should either exit or raise an exception. - """ - self.print_usage(sys.stderr) - self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg)) - - def get_usage(self): - if self.usage: - return self.formatter.format_usage( - self.expand_prog_name(self.usage)) - else: - return "" - - def print_usage(self, file=None): - """print_usage(file : file = stdout) - - Print the usage message for the current program (self.usage) to - 'file' (default stdout). Any occurence of the string "%prog" in - self.usage is replaced with the name of the current program - (basename of sys.argv[0]). Does nothing if self.usage is empty - or not defined. - """ - if self.usage: - file.write(self.get_usage() + '\n') - - def get_version(self): - if self.version: - return self.expand_prog_name(self.version) - else: - return "" - - def print_version(self, file=None): - """print_version(file : file = stdout) - - Print the version message for this program (self.version) to - 'file' (default stdout). As with print_usage(), any occurence - of "%prog" in self.version is replaced by the current program's - name. Does nothing if self.version is empty or undefined. - """ - if self.version: - file.write(self.get_version() + '\n') - - def format_option_help(self, formatter=None): - if formatter is None: - formatter = self.formatter - formatter.store_option_strings(self) - result = [] - result.append(formatter.format_heading(_("Options"))) - formatter.indent() - if self.option_list: - result.append(OptionContainer.format_option_help(self, formatter)) - result.append("\n") - for group in self.option_groups: - result.append(group.format_help(formatter)) - result.append("\n") - formatter.dedent() - # Drop the last "\n", or the header if no options or option groups: - return string.join(result[:-1], "") - - def format_epilog(self, formatter): - return formatter.format_epilog(self.epilog) - - def format_help(self, formatter=None): - if formatter is None: - formatter = self.formatter - result = [] - if self.usage: - result.append(self.get_usage() + "\n") - if self.description: - result.append(self.format_description(formatter) + "\n") - result.append(self.format_option_help(formatter)) - result.append(self.format_epilog(formatter)) - return string.join(result, "") - - # used by test suite - def _get_encoding(self, file): - encoding = getattr(file, "encoding", None) - if not encoding: - encoding = sys.getdefaultencoding() - return encoding - - def print_help(self, file=None): - """print_help(file : file = stdout) - - Print an extended help message, listing all options and any - help text provided with them, to 'file' (default stdout). - """ - if file is None: - file = sys.stdout - encoding = self._get_encoding(file) - file.write(encode_wrapper(self.format_help(), encoding, "replace")) - -# class OptionParser - - -def _match_abbrev(s, wordmap): - """_match_abbrev(s : string, wordmap : {string : Option}) -> string - - Return the string key in 'wordmap' for which 's' is an unambiguous - abbreviation. If 's' is found to be ambiguous or doesn't match any of - 'words', raise BadOptionError. - """ - # Is there an exact match? - if wordmap.has_key(s): - return s - else: - # Isolate all words with s as a prefix. - possibilities = filter(lambda w, s=s: w[:len(s)] == s, wordmap.keys()) - # No exact match, so there had better be just one possibility. - if len(possibilities) == 1: - return possibilities[0] - elif not possibilities: - raise BadOptionError(s) - else: - # More than one possible completion: ambiguous prefix. - possibilities.sort() - raise AmbiguousOptionError(s, possibilities) - - -# Some day, there might be many Option classes. As of Optik 1.3, the -# preferred way to instantiate Options is indirectly, via make_option(), -# which will become a factory function when there are many Option -# classes. -make_option = Option diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets.py deleted file mode 100644 index 32a0dd64f..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets.py +++ /dev/null @@ -1,577 +0,0 @@ -"""Classes to represent arbitrary sets (including sets of sets). - -This module implements sets using dictionaries whose values are -ignored. The usual operations (union, intersection, deletion, etc.) -are provided as both methods and operators. - -Important: sets are not sequences! While they support 'x in s', -'len(s)', and 'for x in s', none of those operations are unique for -sequences; for example, mappings support all three as well. The -characteristic operation for sequences is subscripting with small -integers: s[i], for i in range(len(s)). Sets don't support -subscripting at all. Also, sequences allow multiple occurrences and -their elements have a definite order; sets on the other hand don't -record multiple occurrences and don't remember the order of element -insertion (which is why they don't support s[i]). - -The following classes are provided: - -BaseSet -- All the operations common to both mutable and immutable - sets. This is an abstract class, not meant to be directly - instantiated. - -Set -- Mutable sets, subclass of BaseSet; not hashable. - -ImmutableSet -- Immutable sets, subclass of BaseSet; hashable. - An iterable argument is mandatory to create an ImmutableSet. - -_TemporarilyImmutableSet -- A wrapper around a Set, hashable, - giving the same hash value as the immutable set equivalent - would have. Do not use this class directly. - -Only hashable objects can be added to a Set. In particular, you cannot -really add a Set as an element to another Set; if you try, what is -actually added is an ImmutableSet built from it (it compares equal to -the one you tried adding). - -When you ask if `x in y' where x is a Set and y is a Set or -ImmutableSet, x is wrapped into a _TemporarilyImmutableSet z, and -what's tested is actually `z in y'. - -""" - -# Code history: -# -# - Greg V. Wilson wrote the first version, using a different approach -# to the mutable/immutable problem, and inheriting from dict. -# -# - Alex Martelli modified Greg's version to implement the current -# Set/ImmutableSet approach, and make the data an attribute. -# -# - Guido van Rossum rewrote much of the code, made some API changes, -# and cleaned up the docstrings. -# -# - Raymond Hettinger added a number of speedups and other -# improvements. - -from __future__ import generators -try: - from itertools import ifilter, ifilterfalse -except ImportError: - # Code to make the module run under Py2.2 - def ifilter(predicate, iterable): - if predicate is None: - def predicate(x): - return x - for x in iterable: - if predicate(x): - yield x - def ifilterfalse(predicate, iterable): - if predicate is None: - def predicate(x): - return x - for x in iterable: - if not predicate(x): - yield x - try: - True, False - except NameError: - True, False = (0==0, 0!=0) - -__all__ = ['BaseSet', 'Set', 'ImmutableSet'] - -class BaseSet(object): - """Common base class for mutable and immutable sets.""" - - __slots__ = ['_data'] - - # Constructor - - def __init__(self): - """This is an abstract class.""" - # Don't call this from a concrete subclass! - if self.__class__ is BaseSet: - raise TypeError, ("BaseSet is an abstract class. " - "Use Set or ImmutableSet.") - - # Standard protocols: __len__, __repr__, __str__, __iter__ - - def __len__(self): - """Return the number of elements of a set.""" - return len(self._data) - - def __repr__(self): - """Return string representation of a set. - - This looks like 'Set([])'. - """ - return self._repr() - - # __str__ is the same as __repr__ - __str__ = __repr__ - - def _repr(self, sorted=False): - elements = self._data.keys() - if sorted: - elements.sort() - return '%s(%r)' % (self.__class__.__name__, elements) - - def __iter__(self): - """Return an iterator over the elements or a set. - - This is the keys iterator for the underlying dict. - """ - return self._data.iterkeys() - - # Three-way comparison is not supported. However, because __eq__ is - # tried before __cmp__, if Set x == Set y, x.__eq__(y) returns True and - # then cmp(x, y) returns 0 (Python doesn't actually call __cmp__ in this - # case). - - def __cmp__(self, other): - raise TypeError, "can't compare sets using cmp()" - - # Equality comparisons using the underlying dicts. Mixed-type comparisons - # are allowed here, where Set == z for non-Set z always returns False, - # and Set != z always True. This allows expressions like "x in y" to - # give the expected result when y is a sequence of mixed types, not - # raising a pointless TypeError just because y contains a Set, or x is - # a Set and y contain's a non-set ("in" invokes only __eq__). - # Subtle: it would be nicer if __eq__ and __ne__ could return - # NotImplemented instead of True or False. Then the other comparand - # would get a chance to determine the result, and if the other comparand - # also returned NotImplemented then it would fall back to object address - # comparison (which would always return False for __eq__ and always - # True for __ne__). However, that doesn't work, because this type - # *also* implements __cmp__: if, e.g., __eq__ returns NotImplemented, - # Python tries __cmp__ next, and the __cmp__ here then raises TypeError. - - def __eq__(self, other): - if isinstance(other, BaseSet): - return self._data == other._data - else: - return False - - def __ne__(self, other): - if isinstance(other, BaseSet): - return self._data != other._data - else: - return True - - # Copying operations - - def copy(self): - """Return a shallow copy of a set.""" - result = self.__class__() - result._data.update(self._data) - return result - - __copy__ = copy # For the copy module - - def __deepcopy__(self, memo): - """Return a deep copy of a set; used by copy module.""" - # This pre-creates the result and inserts it in the memo - # early, in case the deep copy recurses into another reference - # to this same set. A set can't be an element of itself, but - # it can certainly contain an object that has a reference to - # itself. - from copy import deepcopy - result = self.__class__() - memo[id(self)] = result - data = result._data - value = True - for elt in self: - data[deepcopy(elt, memo)] = value - return result - - # Standard set operations: union, intersection, both differences. - # Each has an operator version (e.g. __or__, invoked with |) and a - # method version (e.g. union). - # Subtle: Each pair requires distinct code so that the outcome is - # correct when the type of other isn't suitable. For example, if - # we did "union = __or__" instead, then Set().union(3) would return - # NotImplemented instead of raising TypeError (albeit that *why* it - # raises TypeError as-is is also a bit subtle). - - def __or__(self, other): - """Return the union of two sets as a new set. - - (I.e. all elements that are in either set.) - """ - if not isinstance(other, BaseSet): - return NotImplemented - return self.union(other) - - def union(self, other): - """Return the union of two sets as a new set. - - (I.e. all elements that are in either set.) - """ - result = self.__class__(self) - result._update(other) - return result - - def __and__(self, other): - """Return the intersection of two sets as a new set. - - (I.e. all elements that are in both sets.) - """ - if not isinstance(other, BaseSet): - return NotImplemented - return self.intersection(other) - - def intersection(self, other): - """Return the intersection of two sets as a new set. - - (I.e. all elements that are in both sets.) - """ - if not isinstance(other, BaseSet): - other = Set(other) - if len(self) <= len(other): - little, big = self, other - else: - little, big = other, self - common = ifilter(big._data.has_key, little) - return self.__class__(common) - - def __xor__(self, other): - """Return the symmetric difference of two sets as a new set. - - (I.e. all elements that are in exactly one of the sets.) - """ - if not isinstance(other, BaseSet): - return NotImplemented - return self.symmetric_difference(other) - - def symmetric_difference(self, other): - """Return the symmetric difference of two sets as a new set. - - (I.e. all elements that are in exactly one of the sets.) - """ - result = self.__class__() - data = result._data - value = True - selfdata = self._data - try: - otherdata = other._data - except AttributeError: - otherdata = Set(other)._data - for elt in ifilterfalse(otherdata.has_key, selfdata): - data[elt] = value - for elt in ifilterfalse(selfdata.has_key, otherdata): - data[elt] = value - return result - - def __sub__(self, other): - """Return the difference of two sets as a new Set. - - (I.e. all elements that are in this set and not in the other.) - """ - if not isinstance(other, BaseSet): - return NotImplemented - return self.difference(other) - - def difference(self, other): - """Return the difference of two sets as a new Set. - - (I.e. all elements that are in this set and not in the other.) - """ - result = self.__class__() - data = result._data - try: - otherdata = other._data - except AttributeError: - otherdata = Set(other)._data - value = True - for elt in ifilterfalse(otherdata.has_key, self): - data[elt] = value - return result - - # Membership test - - def __contains__(self, element): - """Report whether an element is a member of a set. - - (Called in response to the expression `element in self'.) - """ - try: - return element in self._data - except TypeError: - transform = getattr(element, "__as_temporarily_immutable__", None) - if transform is None: - raise # re-raise the TypeError exception we caught - return transform() in self._data - - # Subset and superset test - - def issubset(self, other): - """Report whether another set contains this set.""" - self._binary_sanity_check(other) - if len(self) > len(other): # Fast check for obvious cases - return False - for elt in ifilterfalse(other._data.has_key, self): - return False - return True - - def issuperset(self, other): - """Report whether this set contains another set.""" - self._binary_sanity_check(other) - if len(self) < len(other): # Fast check for obvious cases - return False - for elt in ifilterfalse(self._data.has_key, other): - return False - return True - - # Inequality comparisons using the is-subset relation. - __le__ = issubset - __ge__ = issuperset - - def __lt__(self, other): - self._binary_sanity_check(other) - return len(self) < len(other) and self.issubset(other) - - def __gt__(self, other): - self._binary_sanity_check(other) - return len(self) > len(other) and self.issuperset(other) - - # Assorted helpers - - def _binary_sanity_check(self, other): - # Check that the other argument to a binary operation is also - # a set, raising a TypeError otherwise. - if not isinstance(other, BaseSet): - raise TypeError, "Binary operation only permitted between sets" - - def _compute_hash(self): - # Calculate hash code for a set by xor'ing the hash codes of - # the elements. This ensures that the hash code does not depend - # on the order in which elements are added to the set. This is - # not called __hash__ because a BaseSet should not be hashable; - # only an ImmutableSet is hashable. - result = 0 - for elt in self: - result ^= hash(elt) - return result - - def _update(self, iterable): - # The main loop for update() and the subclass __init__() methods. - data = self._data - - # Use the fast update() method when a dictionary is available. - if isinstance(iterable, BaseSet): - data.update(iterable._data) - return - - value = True - - if type(iterable) in (list, tuple, xrange): - # Optimized: we know that __iter__() and next() can't - # raise TypeError, so we can move 'try:' out of the loop. - it = iter(iterable) - while True: - try: - for element in it: - data[element] = value - return - except TypeError: - transform = getattr(element, "__as_immutable__", None) - if transform is None: - raise # re-raise the TypeError exception we caught - data[transform()] = value - else: - # Safe: only catch TypeError where intended - for element in iterable: - try: - data[element] = value - except TypeError: - transform = getattr(element, "__as_immutable__", None) - if transform is None: - raise # re-raise the TypeError exception we caught - data[transform()] = value - - -class ImmutableSet(BaseSet): - """Immutable set class.""" - - __slots__ = ['_hashcode'] - - # BaseSet + hashing - - def __init__(self, iterable=None): - """Construct an immutable set from an optional iterable.""" - self._hashcode = None - self._data = {} - if iterable is not None: - self._update(iterable) - - def __hash__(self): - if self._hashcode is None: - self._hashcode = self._compute_hash() - return self._hashcode - - def __getstate__(self): - return self._data, self._hashcode - - def __setstate__(self, state): - self._data, self._hashcode = state - -class Set(BaseSet): - """ Mutable set class.""" - - __slots__ = [] - - # BaseSet + operations requiring mutability; no hashing - - def __init__(self, iterable=None): - """Construct a set from an optional iterable.""" - self._data = {} - if iterable is not None: - self._update(iterable) - - def __getstate__(self): - # getstate's results are ignored if it is not - return self._data, - - def __setstate__(self, data): - self._data, = data - - def __hash__(self): - """A Set cannot be hashed.""" - # We inherit object.__hash__, so we must deny this explicitly - raise TypeError, "Can't hash a Set, only an ImmutableSet." - - # In-place union, intersection, differences. - # Subtle: The xyz_update() functions deliberately return None, - # as do all mutating operations on built-in container types. - # The __xyz__ spellings have to return self, though. - - def __ior__(self, other): - """Update a set with the union of itself and another.""" - self._binary_sanity_check(other) - self._data.update(other._data) - return self - - def union_update(self, other): - """Update a set with the union of itself and another.""" - self._update(other) - - def __iand__(self, other): - """Update a set with the intersection of itself and another.""" - self._binary_sanity_check(other) - self._data = (self & other)._data - return self - - def intersection_update(self, other): - """Update a set with the intersection of itself and another.""" - if isinstance(other, BaseSet): - self &= other - else: - self._data = (self.intersection(other))._data - - def __ixor__(self, other): - """Update a set with the symmetric difference of itself and another.""" - self._binary_sanity_check(other) - self.symmetric_difference_update(other) - return self - - def symmetric_difference_update(self, other): - """Update a set with the symmetric difference of itself and another.""" - data = self._data - value = True - if not isinstance(other, BaseSet): - other = Set(other) - if self is other: - self.clear() - for elt in other: - if elt in data: - del data[elt] - else: - data[elt] = value - - def __isub__(self, other): - """Remove all elements of another set from this set.""" - self._binary_sanity_check(other) - self.difference_update(other) - return self - - def difference_update(self, other): - """Remove all elements of another set from this set.""" - data = self._data - if not isinstance(other, BaseSet): - other = Set(other) - if self is other: - self.clear() - for elt in ifilter(data.has_key, other): - del data[elt] - - # Python dict-like mass mutations: update, clear - - def update(self, iterable): - """Add all values from an iterable (such as a list or file).""" - self._update(iterable) - - def clear(self): - """Remove all elements from this set.""" - self._data.clear() - - # Single-element mutations: add, remove, discard - - def add(self, element): - """Add an element to a set. - - This has no effect if the element is already present. - """ - try: - self._data[element] = True - except TypeError: - transform = getattr(element, "__as_immutable__", None) - if transform is None: - raise # re-raise the TypeError exception we caught - self._data[transform()] = True - - def remove(self, element): - """Remove an element from a set; it must be a member. - - If the element is not a member, raise a KeyError. - """ - try: - del self._data[element] - except TypeError: - transform = getattr(element, "__as_temporarily_immutable__", None) - if transform is None: - raise # re-raise the TypeError exception we caught - del self._data[transform()] - - def discard(self, element): - """Remove an element from a set if it is a member. - - If the element is not a member, do nothing. - """ - try: - self.remove(element) - except KeyError: - pass - - def pop(self): - """Remove and return an arbitrary set element.""" - return self._data.popitem()[0] - - def __as_immutable__(self): - # Return a copy of self as an immutable set - return ImmutableSet(self) - - def __as_temporarily_immutable__(self): - # Return self wrapped in a temporarily immutable set - return _TemporarilyImmutableSet(self) - - -class _TemporarilyImmutableSet(BaseSet): - # Wrap a mutable set as if it was temporarily immutable. - # This only supplies hashing and equality comparisons. - - def __init__(self, set): - self._set = set - self._data = set._data # Needed by ImmutableSet.__eq__() - - def __hash__(self): - return self._set._compute_hash() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets15.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets15.py deleted file mode 100644 index 1fe5a4f77..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_sets15.py +++ /dev/null @@ -1,170 +0,0 @@ -# -# A Set class that works all the way back to Python 1.5. From: -# -# Python Cookbook: Yet another Set class for Python -# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/106469 -# Goncalo Rodriques -# -# This is a pure Pythonic implementation of a set class. The syntax -# and methods implemented are, for the most part, borrowed from -# PEP 218 by Greg Wilson. -# -# Note that this class violates the formal definition of a set() by adding -# a __getitem__() method so we can iterate over a set's elements under -# Python 1.5 and 2.1, which don't support __iter__() and iterator types. -# - -import string - -class Set: - """The set class. It can contain mutable objects.""" - - def __init__(self, seq = None): - """The constructor. It can take any object giving an iterator as an optional - argument to populate the new set.""" - self.elems = [] - if seq: - for elem in seq: - if elem not in self.elems: - hash(elem) - self.elems.append(elem) - - def __str__(self): - return "set([%s])" % string.join(map(str, self.elems), ", ") - - - def copy(self): - """Shallow copy of a set object.""" - return Set(self.elems) - - def __contains__(self, elem): - return elem in self.elems - - def __len__(self): - return len(self.elems) - - def __getitem__(self, index): - # Added so that Python 1.5 can iterate over the elements. - # The cookbook recipe's author didn't like this because there - # really isn't any order in a set object, but this is necessary - # to make the class work well enough for our purposes. - return self.elems[index] - - def items(self): - """Returns a list of the elements in the set.""" - return self.elems - - def add(self, elem): - """Add one element to the set.""" - if elem not in self.elems: - hash(elem) - self.elems.append(elem) - - def remove(self, elem): - """Remove an element from the set. Return an error if elem is not in the set.""" - try: - self.elems.remove(elem) - except ValueError: - raise LookupError, "Object %s is not a member of the set." % str(elem) - - def discard(self, elem): - """Remove an element from the set. Do nothing if elem is not in the set.""" - try: - self.elems.remove(elem) - except ValueError: - pass - - def sort(self, func=cmp): - self.elems.sort(func) - - #Define an iterator for a set. - def __iter__(self): - return iter(self.elems) - - #The basic binary operations with sets. - def __or__(self, other): - """Union of two sets.""" - ret = self.copy() - for elem in other.elems: - if elem not in ret: - ret.elems.append(elem) - return ret - - def __sub__(self, other): - """Difference of two sets.""" - ret = self.copy() - for elem in other.elems: - ret.discard(elem) - return ret - - def __and__(self, other): - """Intersection of two sets.""" - ret = Set() - for elem in self.elems: - if elem in other.elems: - ret.elems.append(elem) - return ret - - def __add__(self, other): - """Symmetric difference of two sets.""" - ret = Set() - temp = other.copy() - for elem in self.elems: - if elem in temp.elems: - temp.elems.remove(elem) - else: - ret.elems.append(elem) - #Add remaining elements. - for elem in temp.elems: - ret.elems.append(elem) - return ret - - def __mul__(self, other): - """Cartesian product of two sets.""" - ret = Set() - for elemself in self.elems: - x = map(lambda other, s=elemself: (s, other), other.elems) - ret.elems.extend(x) - return ret - - #Some of the binary comparisons. - def __lt__(self, other): - """Returns 1 if the lhs set is contained but not equal to the rhs set.""" - if len(self.elems) < len(other.elems): - temp = other.copy() - for elem in self.elems: - if elem in temp.elems: - temp.remove(elem) - else: - return 0 - return len(temp.elems) == 0 - else: - return 0 - - def __le__(self, other): - """Returns 1 if the lhs set is contained in the rhs set.""" - if len(self.elems) <= len(other.elems): - ret = 1 - for elem in self.elems: - if elem not in other.elems: - ret = 0 - break - return ret - else: - return 0 - - def __eq__(self, other): - """Returns 1 if the sets are equal.""" - if len(self.elems) != len(other.elems): - return 0 - else: - return len(self - other) == 0 - - def __cmp__(self, other): - """Returns 1 if the sets are equal.""" - if self.__lt__(other): - return -1 - elif other.__lt__(self): - return 1 - else: - return 0 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_shlex.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_shlex.py deleted file mode 100644 index d6c10357a..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_shlex.py +++ /dev/null @@ -1,319 +0,0 @@ -# -*- coding: iso-8859-1 -*- -"""A lexical analyzer class for simple shell-like syntaxes.""" - -# Module and documentation by Eric S. Raymond, 21 Dec 1998 -# Input stacking and error message cleanup added by ESR, March 2000 -# push_source() and pop_source() made explicit by ESR, January 2001. -# Posix compliance, split(), string arguments, and -# iterator interface by Gustavo Niemeyer, April 2003. - -import os.path -import sys -#from collections import deque - -class deque: - def __init__(self): - self.data = [] - def __len__(self): - return len(self.data) - def appendleft(self, item): - self.data.insert(0, item) - def popleft(self): - return self.data.pop(0) - -try: - basestring -except NameError: - import types - def is_basestring(s): - return type(s) is types.StringType -else: - def is_basestring(s): - return isinstance(s, basestring) - -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - -__all__ = ["shlex", "split"] - -class shlex: - "A lexical analyzer class for simple shell-like syntaxes." - def __init__(self, instream=None, infile=None, posix=False): - if is_basestring(instream): - instream = StringIO(instream) - if instream is not None: - self.instream = instream - self.infile = infile - else: - self.instream = sys.stdin - self.infile = None - self.posix = posix - if posix: - self.eof = None - else: - self.eof = '' - self.commenters = '#' - self.wordchars = ('abcdfeghijklmnopqrstuvwxyz' - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_') - if self.posix: - self.wordchars = self.wordchars + ('ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' - 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ') - self.whitespace = ' \t\r\n' - self.whitespace_split = False - self.quotes = '\'"' - self.escape = '\\' - self.escapedquotes = '"' - self.state = ' ' - self.pushback = deque() - self.lineno = 1 - self.debug = 0 - self.token = '' - self.filestack = deque() - self.source = None - if self.debug: - print 'shlex: reading from %s, line %d' \ - % (self.instream, self.lineno) - - def push_token(self, tok): - "Push a token onto the stack popped by the get_token method" - if self.debug >= 1: - print "shlex: pushing token " + repr(tok) - self.pushback.appendleft(tok) - - def push_source(self, newstream, newfile=None): - "Push an input source onto the lexer's input source stack." - if is_basestring(newstream): - newstream = StringIO(newstream) - self.filestack.appendleft((self.infile, self.instream, self.lineno)) - self.infile = newfile - self.instream = newstream - self.lineno = 1 - if self.debug: - if newfile is not None: - print 'shlex: pushing to file %s' % (self.infile,) - else: - print 'shlex: pushing to stream %s' % (self.instream,) - - def pop_source(self): - "Pop the input source stack." - self.instream.close() - (self.infile, self.instream, self.lineno) = self.filestack.popleft() - if self.debug: - print 'shlex: popping to %s, line %d' \ - % (self.instream, self.lineno) - self.state = ' ' - - def get_token(self): - "Get a token from the input stream (or from stack if it's nonempty)" - if self.pushback: - tok = self.pushback.popleft() - if self.debug >= 1: - print "shlex: popping token " + repr(tok) - return tok - # No pushback. Get a token. - raw = self.read_token() - # Handle inclusions - if self.source is not None: - while raw == self.source: - spec = self.sourcehook(self.read_token()) - if spec: - (newfile, newstream) = spec - self.push_source(newstream, newfile) - raw = self.get_token() - # Maybe we got EOF instead? - while raw == self.eof: - if not self.filestack: - return self.eof - else: - self.pop_source() - raw = self.get_token() - # Neither inclusion nor EOF - if self.debug >= 1: - if raw != self.eof: - print "shlex: token=" + repr(raw) - else: - print "shlex: token=EOF" - return raw - - def read_token(self): - quoted = False - escapedstate = ' ' - while True: - nextchar = self.instream.read(1) - if nextchar == '\n': - self.lineno = self.lineno + 1 - if self.debug >= 3: - print "shlex: in state", repr(self.state), \ - "I see character:", repr(nextchar) - if self.state is None: - self.token = '' # past end of file - break - elif self.state == ' ': - if not nextchar: - self.state = None # end of file - break - elif nextchar in self.whitespace: - if self.debug >= 2: - print "shlex: I see whitespace in whitespace state" - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif nextchar in self.commenters: - self.instream.readline() - self.lineno = self.lineno + 1 - elif self.posix and nextchar in self.escape: - escapedstate = 'a' - self.state = nextchar - elif nextchar in self.wordchars: - self.token = nextchar - self.state = 'a' - elif nextchar in self.quotes: - if not self.posix: - self.token = nextchar - self.state = nextchar - elif self.whitespace_split: - self.token = nextchar - self.state = 'a' - else: - self.token = nextchar - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif self.state in self.quotes: - quoted = True - if not nextchar: # end of file - if self.debug >= 2: - print "shlex: I see EOF in quotes state" - # XXX what error should be raised here? - raise ValueError, "No closing quotation" - if nextchar == self.state: - if not self.posix: - self.token = self.token + nextchar - self.state = ' ' - break - else: - self.state = 'a' - elif self.posix and nextchar in self.escape and \ - self.state in self.escapedquotes: - escapedstate = self.state - self.state = nextchar - else: - self.token = self.token + nextchar - elif self.state in self.escape: - if not nextchar: # end of file - if self.debug >= 2: - print "shlex: I see EOF in escape state" - # XXX what error should be raised here? - raise ValueError, "No escaped character" - # In posix shells, only the quote itself or the escape - # character may be escaped within quotes. - if escapedstate in self.quotes and \ - nextchar != self.state and nextchar != escapedstate: - self.token = self.token + self.state - self.token = self.token + nextchar - self.state = escapedstate - elif self.state == 'a': - if not nextchar: - self.state = None # end of file - break - elif nextchar in self.whitespace: - if self.debug >= 2: - print "shlex: I see whitespace in word state" - self.state = ' ' - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif nextchar in self.commenters: - self.instream.readline() - self.lineno = self.lineno + 1 - if self.posix: - self.state = ' ' - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif self.posix and nextchar in self.quotes: - self.state = nextchar - elif self.posix and nextchar in self.escape: - escapedstate = 'a' - self.state = nextchar - elif nextchar in self.wordchars or nextchar in self.quotes \ - or self.whitespace_split: - self.token = self.token + nextchar - else: - self.pushback.appendleft(nextchar) - if self.debug >= 2: - print "shlex: I see punctuation in word state" - self.state = ' ' - if self.token: - break # emit current token - else: - continue - result = self.token - self.token = '' - if self.posix and not quoted and result == '': - result = None - if self.debug > 1: - if result: - print "shlex: raw token=" + repr(result) - else: - print "shlex: raw token=EOF" - return result - - def sourcehook(self, newfile): - "Hook called on a filename to be sourced." - if newfile[0] == '"': - newfile = newfile[1:-1] - # This implements cpp-like semantics for relative-path inclusion. - if is_basestring(self.infile) and not os.path.isabs(newfile): - newfile = os.path.join(os.path.dirname(self.infile), newfile) - return (newfile, open(newfile, "r")) - - def error_leader(self, infile=None, lineno=None): - "Emit a C-compiler-like, Emacs-friendly error-message leader." - if infile is None: - infile = self.infile - if lineno is None: - lineno = self.lineno - return "\"%s\", line %d: " % (infile, lineno) - - def __iter__(self): - return self - - def next(self): - token = self.get_token() - if token == self.eof: - raise StopIteration - return token - -def split(s, comments=False): - lex = shlex(s, posix=True) - lex.whitespace_split = True - if not comments: - lex.commenters = '' - #return list(lex) - result = [] - while True: - token = lex.get_token() - if token == lex.eof: - break - result.append(token) - return result - -if __name__ == '__main__': - if len(sys.argv) == 1: - lexer = shlex() - else: - file = sys.argv[1] - lexer = shlex(open(file), file) - while 1: - tt = lexer.get_token() - if tt: - print "Token: " + repr(tt) - else: - break diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_subprocess.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_subprocess.py deleted file mode 100644 index 68d0e4c85..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_subprocess.py +++ /dev/null @@ -1,1290 +0,0 @@ -# subprocess - Subprocesses with accessible I/O streams -# -# For more information about this module, see PEP 324. -# -# This module should remain compatible with Python 2.2, see PEP 291. -# -# Copyright (c) 2003-2005 by Peter Astrand -# -# Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. - -r"""subprocess - Subprocesses with accessible I/O streams - -This module allows you to spawn processes, connect to their -input/output/error pipes, and obtain their return codes. This module -intends to replace several other, older modules and functions, like: - -os.system -os.spawn* -os.popen* -popen2.* -commands.* - -Information about how the subprocess module can be used to replace these -modules and functions can be found below. - - - -Using the subprocess module -=========================== -This module defines one class called Popen: - -class Popen(args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): - - -Arguments are: - -args should be a string, or a sequence of program arguments. The -program to execute is normally the first item in the args sequence or -string, but can be explicitly set by using the executable argument. - -On UNIX, with shell=False (default): In this case, the Popen class -uses os.execvp() to execute the child program. args should normally -be a sequence. A string will be treated as a sequence with the string -as the only item (the program to execute). - -On UNIX, with shell=True: If args is a string, it specifies the -command string to execute through the shell. If args is a sequence, -the first item specifies the command string, and any additional items -will be treated as additional shell arguments. - -On Windows: the Popen class uses CreateProcess() to execute the child -program, which operates on strings. If args is a sequence, it will be -converted to a string using the list2cmdline method. Please note that -not all MS Windows applications interpret the command line the same -way: The list2cmdline is designed for applications using the same -rules as the MS C runtime. - -bufsize, if given, has the same meaning as the corresponding argument -to the built-in open() function: 0 means unbuffered, 1 means line -buffered, any other positive value means use a buffer of -(approximately) that size. A negative bufsize means to use the system -default, which usually means fully buffered. The default value for -bufsize is 0 (unbuffered). - -stdin, stdout and stderr specify the executed programs' standard -input, standard output and standard error file handles, respectively. -Valid values are PIPE, an existing file descriptor (a positive -integer), an existing file object, and None. PIPE indicates that a -new pipe to the child should be created. With None, no redirection -will occur; the child's file handles will be inherited from the -parent. Additionally, stderr can be STDOUT, which indicates that the -stderr data from the applications should be captured into the same -file handle as for stdout. - -If preexec_fn is set to a callable object, this object will be called -in the child process just before the child is executed. - -If close_fds is true, all file descriptors except 0, 1 and 2 will be -closed before the child process is executed. - -if shell is true, the specified command will be executed through the -shell. - -If cwd is not None, the current directory will be changed to cwd -before the child is executed. - -If env is not None, it defines the environment variables for the new -process. - -If universal_newlines is true, the file objects stdout and stderr are -opened as a text files, but lines may be terminated by any of '\n', -the Unix end-of-line convention, '\r', the Macintosh convention or -'\r\n', the Windows convention. All of these external representations -are seen as '\n' by the Python program. Note: This feature is only -available if Python is built with universal newline support (the -default). Also, the newlines attribute of the file objects stdout, -stdin and stderr are not updated by the communicate() method. - -The startupinfo and creationflags, if given, will be passed to the -underlying CreateProcess() function. They can specify things such as -appearance of the main window and priority for the new process. -(Windows only) - - -This module also defines two shortcut functions: - -call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete, then - return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - retcode = call(["ls", "-l"]) - -check_call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete. If the - exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - check_call(["ls", "-l"]) - -Exceptions ----------- -Exceptions raised in the child process, before the new program has -started to execute, will be re-raised in the parent. Additionally, -the exception object will have one extra attribute called -'child_traceback', which is a string containing traceback information -from the childs point of view. - -The most common exception raised is OSError. This occurs, for -example, when trying to execute a non-existent file. Applications -should prepare for OSErrors. - -A ValueError will be raised if Popen is called with invalid arguments. - -check_call() will raise CalledProcessError, if the called process -returns a non-zero return code. - - -Security --------- -Unlike some other popen functions, this implementation will never call -/bin/sh implicitly. This means that all characters, including shell -metacharacters, can safely be passed to child processes. - - -Popen objects -============= -Instances of the Popen class have the following methods: - -poll() - Check if child process has terminated. Returns returncode - attribute. - -wait() - Wait for child process to terminate. Returns returncode attribute. - -communicate(input=None) - Interact with process: Send data to stdin. Read data from stdout - and stderr, until end-of-file is reached. Wait for process to - terminate. The optional stdin argument should be a string to be - sent to the child process, or None, if no data should be sent to - the child. - - communicate() returns a tuple (stdout, stderr). - - Note: The data read is buffered in memory, so do not use this - method if the data size is large or unlimited. - -The following attributes are also available: - -stdin - If the stdin argument is PIPE, this attribute is a file object - that provides input to the child process. Otherwise, it is None. - -stdout - If the stdout argument is PIPE, this attribute is a file object - that provides output from the child process. Otherwise, it is - None. - -stderr - If the stderr argument is PIPE, this attribute is file object that - provides error output from the child process. Otherwise, it is - None. - -pid - The process ID of the child process. - -returncode - The child return code. A None value indicates that the process - hasn't terminated yet. A negative value -N indicates that the - child was terminated by signal N (UNIX only). - - -Replacing older functions with the subprocess module -==================================================== -In this section, "a ==> b" means that b can be used as a replacement -for a. - -Note: All functions in this section fail (more or less) silently if -the executed program cannot be found; this module raises an OSError -exception. - -In the following examples, we assume that the subprocess module is -imported with "from subprocess import *". - - -Replacing /bin/sh shell backquote ---------------------------------- -output=`mycmd myarg` -==> -output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] - - -Replacing shell pipe line -------------------------- -output=`dmesg | grep hda` -==> -p1 = Popen(["dmesg"], stdout=PIPE) -p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) -output = p2.communicate()[0] - - -Replacing os.system() ---------------------- -sts = os.system("mycmd" + " myarg") -==> -p = Popen("mycmd" + " myarg", shell=True) -pid, sts = os.waitpid(p.pid, 0) - -Note: - -* Calling the program through the shell is usually not required. - -* It's easier to look at the returncode attribute than the - exitstatus. - -A more real-world example would look like this: - -try: - retcode = call("mycmd" + " myarg", shell=True) - if retcode < 0: - print >>sys.stderr, "Child was terminated by signal", -retcode - else: - print >>sys.stderr, "Child returned", retcode -except OSError, e: - print >>sys.stderr, "Execution failed:", e - - -Replacing os.spawn* -------------------- -P_NOWAIT example: - -pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") -==> -pid = Popen(["/bin/mycmd", "myarg"]).pid - - -P_WAIT example: - -retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") -==> -retcode = call(["/bin/mycmd", "myarg"]) - - -Vector example: - -os.spawnvp(os.P_NOWAIT, path, args) -==> -Popen([path] + args[1:]) - - -Environment example: - -os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) -==> -Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) - - -Replacing os.popen* -------------------- -pipe = os.popen(cmd, mode='r', bufsize) -==> -pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout - -pipe = os.popen(cmd, mode='w', bufsize) -==> -pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin - - -(child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize) -==> -p = Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdin, child_stdout) = (p.stdin, p.stdout) - - -(child_stdin, - child_stdout, - child_stderr) = os.popen3(cmd, mode, bufsize) -==> -p = Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) -(child_stdin, - child_stdout, - child_stderr) = (p.stdin, p.stdout, p.stderr) - - -(child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize) -==> -p = Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) -(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) - - -Replacing popen2.* ------------------- -Note: If the cmd argument to popen2 functions is a string, the command -is executed through /bin/sh. If it is a list, the command is directly -executed. - -(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode) -==> -p = Popen(["somestring"], shell=True, bufsize=bufsize - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - - -(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode) -==> -p = Popen(["mycmd", "myarg"], bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - -The popen2.Popen3 and popen3.Popen4 basically works as subprocess.Popen, -except that: - -* subprocess.Popen raises an exception if the execution fails -* the capturestderr argument is replaced with the stderr argument. -* stdin=PIPE and stdout=PIPE must be specified. -* popen2 closes all filedescriptors by default, but you have to specify - close_fds=True with subprocess.Popen. - - -""" - -import sys -mswindows = (sys.platform == "win32") - -import os -import string -import types -import traceback - -# Exception classes used by this module. -class CalledProcessError(Exception): - """This exception is raised when a process run by check_call() returns - a non-zero exit status. The exit status will be stored in the - returncode attribute.""" - def __init__(self, returncode, cmd): - self.returncode = returncode - self.cmd = cmd - def __str__(self): - return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode) - - -if mswindows: - try: - import threading - except ImportError: - # SCons: the threading module is only used by the communicate() - # method, which we don't actually use, so don't worry if we - # can't import it. - pass - import msvcrt - if 0: # <-- change this to use pywin32 instead of the _subprocess driver - import pywintypes - from win32api import GetStdHandle, STD_INPUT_HANDLE, \ - STD_OUTPUT_HANDLE, STD_ERROR_HANDLE - from win32api import GetCurrentProcess, DuplicateHandle, \ - GetModuleFileName, GetVersion - from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE - from win32pipe import CreatePipe - from win32process import CreateProcess, STARTUPINFO, \ - GetExitCodeProcess, STARTF_USESTDHANDLES, \ - STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE - from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0 - else: - # SCons: don't die on Python versions that don't have _subprocess. - try: - from _subprocess import * - except ImportError: - pass - class STARTUPINFO: - dwFlags = 0 - hStdInput = None - hStdOutput = None - hStdError = None - wShowWindow = 0 - class pywintypes: - error = IOError -else: - import select - import errno - import fcntl - import pickle - - try: - fcntl.F_GETFD - except AttributeError: - fcntl.F_GETFD = 1 - - try: - fcntl.F_SETFD - except AttributeError: - fcntl.F_SETFD = 2 - -__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "CalledProcessError"] - -try: - MAXFD = os.sysconf("SC_OPEN_MAX") -except KeyboardInterrupt: - raise # SCons: don't swallow keyboard interrupts -except: - MAXFD = 256 - -# True/False does not exist on 2.2.0 -try: - False -except NameError: - False = 0 - True = 1 - -try: - isinstance(1, int) -except TypeError: - def is_int(obj): - return type(obj) == type(1) - def is_int_or_long(obj): - return type(obj) in (type(1), type(1L)) -else: - def is_int(obj): - return isinstance(obj, int) - def is_int_or_long(obj): - return isinstance(obj, (int, long)) - -try: - types.StringTypes -except AttributeError: - try: - types.StringTypes = (types.StringType, types.UnicodeType) - except AttributeError: - types.StringTypes = (types.StringType,) - def is_string(obj): - return type(obj) in types.StringTypes -else: - def is_string(obj): - return isinstance(obj, types.StringTypes) - -_active = [] - -def _cleanup(): - for inst in _active[:]: - if inst.poll(_deadstate=sys.maxint) >= 0: - try: - _active.remove(inst) - except ValueError: - # This can happen if two threads create a new Popen instance. - # It's harmless that it was already removed, so ignore. - pass - -PIPE = -1 -STDOUT = -2 - - -def call(*popenargs, **kwargs): - """Run command with arguments. Wait for command to complete, then - return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - retcode = call(["ls", "-l"]) - """ - return apply(Popen, popenargs, kwargs).wait() - - -def check_call(*popenargs, **kwargs): - """Run command with arguments. Wait for command to complete. If - the exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - check_call(["ls", "-l"]) - """ - retcode = apply(call, popenargs, kwargs) - cmd = kwargs.get("args") - if cmd is None: - cmd = popenargs[0] - if retcode: - raise CalledProcessError(retcode, cmd) - return retcode - - -def list2cmdline(seq): - """ - Translate a sequence of arguments into a command line - string, using the same rules as the MS C runtime: - - 1) Arguments are delimited by white space, which is either a - space or a tab. - - 2) A string surrounded by double quotation marks is - interpreted as a single argument, regardless of white space - contained within. A quoted string can be embedded in an - argument. - - 3) A double quotation mark preceded by a backslash is - interpreted as a literal double quotation mark. - - 4) Backslashes are interpreted literally, unless they - immediately precede a double quotation mark. - - 5) If backslashes immediately precede a double quotation mark, - every pair of backslashes is interpreted as a literal - backslash. If the number of backslashes is odd, the last - backslash escapes the next double quotation mark as - described in rule 3. - """ - - # See - # http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp - result = [] - needquote = False - for arg in seq: - bs_buf = [] - - # Add a space to separate this argument from the others - if result: - result.append(' ') - - needquote = (" " in arg) or ("\t" in arg) - if needquote: - result.append('"') - - for c in arg: - if c == '\\': - # Don't know if we need to double yet. - bs_buf.append(c) - elif c == '"': - # Double backspaces. - result.append('\\' * len(bs_buf)*2) - bs_buf = [] - result.append('\\"') - else: - # Normal char - if bs_buf: - result.extend(bs_buf) - bs_buf = [] - result.append(c) - - # Add remaining backspaces, if any. - if bs_buf: - result.extend(bs_buf) - - if needquote: - result.extend(bs_buf) - result.append('"') - - return string.join(result, '') - - -try: - object -except NameError: - class object: - pass - -class Popen(object): - def __init__(self, args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): - """Create new Popen instance.""" - _cleanup() - - self._child_created = False - if not is_int_or_long(bufsize): - raise TypeError("bufsize must be an integer") - - if mswindows: - if preexec_fn is not None: - raise ValueError("preexec_fn is not supported on Windows " - "platforms") - if close_fds: - raise ValueError("close_fds is not supported on Windows " - "platforms") - else: - # POSIX - if startupinfo is not None: - raise ValueError("startupinfo is only supported on Windows " - "platforms") - if creationflags != 0: - raise ValueError("creationflags is only supported on Windows " - "platforms") - - self.stdin = None - self.stdout = None - self.stderr = None - self.pid = None - self.returncode = None - self.universal_newlines = universal_newlines - - # Input and output objects. The general principle is like - # this: - # - # Parent Child - # ------ ----- - # p2cwrite ---stdin---> p2cread - # c2pread <--stdout--- c2pwrite - # errread <--stderr--- errwrite - # - # On POSIX, the child objects are file descriptors. On - # Windows, these are Windows file handles. The parent objects - # are file descriptors on both platforms. The parent objects - # are None when not using PIPEs. The child objects are None - # when not redirecting. - - (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) = self._get_handles(stdin, stdout, stderr) - - self._execute_child(args, executable, preexec_fn, close_fds, - cwd, env, universal_newlines, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - if p2cwrite: - self.stdin = os.fdopen(p2cwrite, 'wb', bufsize) - if c2pread: - if universal_newlines: - self.stdout = os.fdopen(c2pread, 'rU', bufsize) - else: - self.stdout = os.fdopen(c2pread, 'rb', bufsize) - if errread: - if universal_newlines: - self.stderr = os.fdopen(errread, 'rU', bufsize) - else: - self.stderr = os.fdopen(errread, 'rb', bufsize) - - - def _translate_newlines(self, data): - data = data.replace("\r\n", "\n") - data = data.replace("\r", "\n") - return data - - - def __del__(self): - if not self._child_created: - # We didn't get to successfully create a child process. - return - # In case the child hasn't been waited on, check if it's done. - self.poll(_deadstate=sys.maxint) - if self.returncode is None and _active is not None: - # Child is still running, keep us alive until we can wait on it. - _active.append(self) - - - def communicate(self, input=None): - """Interact with process: Send data to stdin. Read data from - stdout and stderr, until end-of-file is reached. Wait for - process to terminate. The optional input argument should be a - string to be sent to the child process, or None, if no data - should be sent to the child. - - communicate() returns a tuple (stdout, stderr).""" - - # Optimization: If we are only using one pipe, or no pipe at - # all, using select() or threads is unnecessary. - if [self.stdin, self.stdout, self.stderr].count(None) >= 2: - stdout = None - stderr = None - if self.stdin: - if input: - self.stdin.write(input) - self.stdin.close() - elif self.stdout: - stdout = self.stdout.read() - elif self.stderr: - stderr = self.stderr.read() - self.wait() - return (stdout, stderr) - - return self._communicate(input) - - - if mswindows: - # - # Windows methods - # - def _get_handles(self, stdin, stdout, stderr): - """Construct and return tupel with IO objects: - p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite - """ - if stdin is None and stdout is None and stderr is None: - return (None, None, None, None, None, None) - - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None - - if stdin is None: - p2cread = GetStdHandle(STD_INPUT_HANDLE) - elif stdin == PIPE: - p2cread, p2cwrite = CreatePipe(None, 0) - # Detach and turn into fd - p2cwrite = p2cwrite.Detach() - p2cwrite = msvcrt.open_osfhandle(p2cwrite, 0) - elif is_int(stdin): - p2cread = msvcrt.get_osfhandle(stdin) - else: - # Assuming file-like object - p2cread = msvcrt.get_osfhandle(stdin.fileno()) - p2cread = self._make_inheritable(p2cread) - - if stdout is None: - c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE) - elif stdout == PIPE: - c2pread, c2pwrite = CreatePipe(None, 0) - # Detach and turn into fd - c2pread = c2pread.Detach() - c2pread = msvcrt.open_osfhandle(c2pread, 0) - elif is_int(stdout): - c2pwrite = msvcrt.get_osfhandle(stdout) - else: - # Assuming file-like object - c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) - c2pwrite = self._make_inheritable(c2pwrite) - - if stderr is None: - errwrite = GetStdHandle(STD_ERROR_HANDLE) - elif stderr == PIPE: - errread, errwrite = CreatePipe(None, 0) - # Detach and turn into fd - errread = errread.Detach() - errread = msvcrt.open_osfhandle(errread, 0) - elif stderr == STDOUT: - errwrite = c2pwrite - elif is_int(stderr): - errwrite = msvcrt.get_osfhandle(stderr) - else: - # Assuming file-like object - errwrite = msvcrt.get_osfhandle(stderr.fileno()) - errwrite = self._make_inheritable(errwrite) - - return (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - - def _make_inheritable(self, handle): - """Return a duplicate of handle, which is inheritable""" - return DuplicateHandle(GetCurrentProcess(), handle, - GetCurrentProcess(), 0, 1, - DUPLICATE_SAME_ACCESS) - - - def _find_w9xpopen(self): - """Find and return absolut path to w9xpopen.exe""" - w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)), - "w9xpopen.exe") - if not os.path.exists(w9xpopen): - # Eeek - file-not-found - possibly an embedding - # situation - see if we can locate it in sys.exec_prefix - w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix), - "w9xpopen.exe") - if not os.path.exists(w9xpopen): - raise RuntimeError("Cannot locate w9xpopen.exe, which is " - "needed for Popen to work with your " - "shell or platform.") - return w9xpopen - - - def _execute_child(self, args, executable, preexec_fn, close_fds, - cwd, env, universal_newlines, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite): - """Execute program (MS Windows version)""" - - if not isinstance(args, types.StringTypes): - args = list2cmdline(args) - - # Process startup details - if startupinfo is None: - startupinfo = STARTUPINFO() - if None not in (p2cread, c2pwrite, errwrite): - startupinfo.dwFlags = startupinfo.dwFlags | STARTF_USESTDHANDLES - startupinfo.hStdInput = p2cread - startupinfo.hStdOutput = c2pwrite - startupinfo.hStdError = errwrite - - if shell: - startupinfo.dwFlags = startupinfo.dwFlags | STARTF_USESHOWWINDOW - startupinfo.wShowWindow = SW_HIDE - comspec = os.environ.get("COMSPEC", "cmd.exe") - args = comspec + " /c " + args - if (GetVersion() >= 0x80000000L or - os.path.basename(comspec).lower() == "command.com"): - # Win9x, or using command.com on NT. We need to - # use the w9xpopen intermediate program. For more - # information, see KB Q150956 - # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp) - w9xpopen = self._find_w9xpopen() - args = '"%s" %s' % (w9xpopen, args) - # Not passing CREATE_NEW_CONSOLE has been known to - # cause random failures on win9x. Specifically a - # dialog: "Your program accessed mem currently in - # use at xxx" and a hopeful warning about the - # stability of your system. Cost is Ctrl+C wont - # kill children. - creationflags = creationflags | CREATE_NEW_CONSOLE - - # Start the process - try: - hp, ht, pid, tid = CreateProcess(executable, args, - # no special security - None, None, - # must inherit handles to pass std - # handles - 1, - creationflags, - env, - cwd, - startupinfo) - except pywintypes.error, e: - # Translate pywintypes.error to WindowsError, which is - # a subclass of OSError. FIXME: We should really - # translate errno using _sys_errlist (or simliar), but - # how can this be done from Python? - raise apply(WindowsError, e.args) - - # Retain the process handle, but close the thread handle - self._child_created = True - self._handle = hp - self.pid = pid - ht.Close() - - # Child is launched. Close the parent's copy of those pipe - # handles that only the child should have open. You need - # to make sure that no handles to the write end of the - # output pipe are maintained in this process or else the - # pipe will not close when the child process exits and the - # ReadFile will hang. - if p2cread is not None: - p2cread.Close() - if c2pwrite is not None: - c2pwrite.Close() - if errwrite is not None: - errwrite.Close() - - - def poll(self, _deadstate=None): - """Check if child process has terminated. Returns returncode - attribute.""" - if self.returncode is None: - if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0: - self.returncode = GetExitCodeProcess(self._handle) - return self.returncode - - - def wait(self): - """Wait for child process to terminate. Returns returncode - attribute.""" - if self.returncode is None: - obj = WaitForSingleObject(self._handle, INFINITE) - self.returncode = GetExitCodeProcess(self._handle) - return self.returncode - - - def _readerthread(self, fh, buffer): - buffer.append(fh.read()) - - - def _communicate(self, input): - stdout = None # Return - stderr = None # Return - - if self.stdout: - stdout = [] - stdout_thread = threading.Thread(target=self._readerthread, - args=(self.stdout, stdout)) - stdout_thread.setDaemon(True) - stdout_thread.start() - if self.stderr: - stderr = [] - stderr_thread = threading.Thread(target=self._readerthread, - args=(self.stderr, stderr)) - stderr_thread.setDaemon(True) - stderr_thread.start() - - if self.stdin: - if input is not None: - self.stdin.write(input) - self.stdin.close() - - if self.stdout: - stdout_thread.join() - if self.stderr: - stderr_thread.join() - - # All data exchanged. Translate lists into strings. - if stdout is not None: - stdout = stdout[0] - if stderr is not None: - stderr = stderr[0] - - # Translate newlines, if requested. We cannot let the file - # object do the translation: It is based on stdio, which is - # impossible to combine with select (unless forcing no - # buffering). - if self.universal_newlines and hasattr(file, 'newlines'): - if stdout: - stdout = self._translate_newlines(stdout) - if stderr: - stderr = self._translate_newlines(stderr) - - self.wait() - return (stdout, stderr) - - else: - # - # POSIX methods - # - def _get_handles(self, stdin, stdout, stderr): - """Construct and return tupel with IO objects: - p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite - """ - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None - - if stdin is None: - pass - elif stdin == PIPE: - p2cread, p2cwrite = os.pipe() - elif is_int(stdin): - p2cread = stdin - else: - # Assuming file-like object - p2cread = stdin.fileno() - - if stdout is None: - pass - elif stdout == PIPE: - c2pread, c2pwrite = os.pipe() - elif is_int(stdout): - c2pwrite = stdout - else: - # Assuming file-like object - c2pwrite = stdout.fileno() - - if stderr is None: - pass - elif stderr == PIPE: - errread, errwrite = os.pipe() - elif stderr == STDOUT: - errwrite = c2pwrite - elif is_int(stderr): - errwrite = stderr - else: - # Assuming file-like object - errwrite = stderr.fileno() - - return (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - - def _set_cloexec_flag(self, fd): - try: - cloexec_flag = fcntl.FD_CLOEXEC - except AttributeError: - cloexec_flag = 1 - - old = fcntl.fcntl(fd, fcntl.F_GETFD) - fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag) - - - def _close_fds(self, but): - for i in xrange(3, MAXFD): - if i == but: - continue - try: - os.close(i) - except KeyboardInterrupt: - raise # SCons: don't swallow keyboard interrupts - except: - pass - - - def _execute_child(self, args, executable, preexec_fn, close_fds, - cwd, env, universal_newlines, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite): - """Execute program (POSIX version)""" - - if is_string(args): - args = [args] - - if shell: - args = ["/bin/sh", "-c"] + args - - if executable is None: - executable = args[0] - - # For transferring possible exec failure from child to parent - # The first char specifies the exception type: 0 means - # OSError, 1 means some other error. - errpipe_read, errpipe_write = os.pipe() - self._set_cloexec_flag(errpipe_write) - - self.pid = os.fork() - self._child_created = True - if self.pid == 0: - # Child - try: - # Close parent's pipe ends - if p2cwrite: - os.close(p2cwrite) - if c2pread: - os.close(c2pread) - if errread: - os.close(errread) - os.close(errpipe_read) - - # Dup fds for child - if p2cread: - os.dup2(p2cread, 0) - if c2pwrite: - os.dup2(c2pwrite, 1) - if errwrite: - os.dup2(errwrite, 2) - - # Close pipe fds. Make sure we don't close the same - # fd more than once, or standard fds. - try: - set - except NameError: - # Fall-back for earlier Python versions, so epydoc - # can use this module directly to execute things. - if p2cread: - os.close(p2cread) - if c2pwrite and c2pwrite not in (p2cread,): - os.close(c2pwrite) - if errwrite and errwrite not in (p2cread, c2pwrite): - os.close(errwrite) - else: - for fd in set((p2cread, c2pwrite, errwrite))-set((0,1,2)): - if fd: os.close(fd) - - # Close all other fds, if asked for - if close_fds: - self._close_fds(but=errpipe_write) - - if cwd is not None: - os.chdir(cwd) - - if preexec_fn: - apply(preexec_fn) - - if env is None: - os.execvp(executable, args) - else: - os.execvpe(executable, args, env) - - except KeyboardInterrupt: - raise # SCons: don't swallow keyboard interrupts - - except: - exc_type, exc_value, tb = sys.exc_info() - # Save the traceback and attach it to the exception object - exc_lines = traceback.format_exception(exc_type, - exc_value, - tb) - exc_value.child_traceback = string.join(exc_lines, '') - os.write(errpipe_write, pickle.dumps(exc_value)) - - # This exitcode won't be reported to applications, so it - # really doesn't matter what we return. - os._exit(255) - - # Parent - os.close(errpipe_write) - if p2cread and p2cwrite: - os.close(p2cread) - if c2pwrite and c2pread: - os.close(c2pwrite) - if errwrite and errread: - os.close(errwrite) - - # Wait for exec to fail or succeed; possibly raising exception - data = os.read(errpipe_read, 1048576) # Exceptions limited to 1 MB - os.close(errpipe_read) - if data != "": - os.waitpid(self.pid, 0) - child_exception = pickle.loads(data) - raise child_exception - - - def _handle_exitstatus(self, sts): - if os.WIFSIGNALED(sts): - self.returncode = -os.WTERMSIG(sts) - elif os.WIFEXITED(sts): - self.returncode = os.WEXITSTATUS(sts) - else: - # Should never happen - raise RuntimeError("Unknown child exit status!") - - - def poll(self, _deadstate=None): - """Check if child process has terminated. Returns returncode - attribute.""" - if self.returncode is None: - try: - pid, sts = os.waitpid(self.pid, os.WNOHANG) - if pid == self.pid: - self._handle_exitstatus(sts) - except os.error: - if _deadstate is not None: - self.returncode = _deadstate - return self.returncode - - - def wait(self): - """Wait for child process to terminate. Returns returncode - attribute.""" - if self.returncode is None: - pid, sts = os.waitpid(self.pid, 0) - self._handle_exitstatus(sts) - return self.returncode - - - def _communicate(self, input): - read_set = [] - write_set = [] - stdout = None # Return - stderr = None # Return - - if self.stdin: - # Flush stdio buffer. This might block, if the user has - # been writing to .stdin in an uncontrolled fashion. - self.stdin.flush() - if input: - write_set.append(self.stdin) - else: - self.stdin.close() - if self.stdout: - read_set.append(self.stdout) - stdout = [] - if self.stderr: - read_set.append(self.stderr) - stderr = [] - - input_offset = 0 - while read_set or write_set: - rlist, wlist, xlist = select.select(read_set, write_set, []) - - if self.stdin in wlist: - # When select has indicated that the file is writable, - # we can write up to PIPE_BUF bytes without risk - # blocking. POSIX defines PIPE_BUF >= 512 - bytes_written = os.write(self.stdin.fileno(), buffer(input, input_offset, 512)) - input_offset = input_offset + bytes_written - if input_offset >= len(input): - self.stdin.close() - write_set.remove(self.stdin) - - if self.stdout in rlist: - data = os.read(self.stdout.fileno(), 1024) - if data == "": - self.stdout.close() - read_set.remove(self.stdout) - stdout.append(data) - - if self.stderr in rlist: - data = os.read(self.stderr.fileno(), 1024) - if data == "": - self.stderr.close() - read_set.remove(self.stderr) - stderr.append(data) - - # All data exchanged. Translate lists into strings. - if stdout is not None: - stdout = string.join(stdout, '') - if stderr is not None: - stderr = string.join(stderr, '') - - # Translate newlines, if requested. We cannot let the file - # object do the translation: It is based on stdio, which is - # impossible to combine with select (unless forcing no - # buffering). - if self.universal_newlines and hasattr(file, 'newlines'): - if stdout: - stdout = self._translate_newlines(stdout) - if stderr: - stderr = self._translate_newlines(stderr) - - self.wait() - return (stdout, stderr) - - -def _demo_posix(): - # - # Example 1: Simple redirection: Get process list - # - plist = Popen(["ps"], stdout=PIPE).communicate()[0] - print "Process list:" - print plist - - # - # Example 2: Change uid before executing child - # - if os.getuid() == 0: - p = Popen(["id"], preexec_fn=lambda: os.setuid(100)) - p.wait() - - # - # Example 3: Connecting several subprocesses - # - print "Looking for 'hda'..." - p1 = Popen(["dmesg"], stdout=PIPE) - p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) - print repr(p2.communicate()[0]) - - # - # Example 4: Catch execution error - # - print - print "Trying a weird file..." - try: - print Popen(["/this/path/does/not/exist"]).communicate() - except OSError, e: - if e.errno == errno.ENOENT: - print "The file didn't exist. I thought so..." - print "Child traceback:" - print e.child_traceback - else: - print "Error", e.errno - else: - sys.stderr.write( "Gosh. No error.\n" ) - - -def _demo_windows(): - # - # Example 1: Connecting several subprocesses - # - print "Looking for 'PROMPT' in set output..." - p1 = Popen("set", stdout=PIPE, shell=True) - p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE) - print repr(p2.communicate()[0]) - - # - # Example 2: Simple execution of program - # - print "Executing calc..." - p = Popen("calc") - p.wait() - - -if __name__ == "__main__": - if mswindows: - _demo_windows() - else: - _demo_posix() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_textwrap.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_textwrap.py deleted file mode 100644 index 72ed9b9c5..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/_scons_textwrap.py +++ /dev/null @@ -1,376 +0,0 @@ -"""Text wrapping and filling. -""" - -# Copyright (C) 1999-2001 Gregory P. Ward. -# Copyright (C) 2002, 2003 Python Software Foundation. -# Written by Greg Ward - -__revision__ = "$Id: textwrap.py,v 1.32.8.2 2004/05/13 01:48:15 gward Exp $" - -import string, re - -try: - unicode -except NameError: - class unicode: - pass - -# Do the right thing with boolean values for all known Python versions -# (so this module can be copied to projects that don't depend on Python -# 2.3, e.g. Optik and Docutils). -try: - True, False -except NameError: - (True, False) = (1, 0) - -__all__ = ['TextWrapper', 'wrap', 'fill'] - -# Hardcode the recognized whitespace characters to the US-ASCII -# whitespace characters. The main reason for doing this is that in -# ISO-8859-1, 0xa0 is non-breaking whitespace, so in certain locales -# that character winds up in string.whitespace. Respecting -# string.whitespace in those cases would 1) make textwrap treat 0xa0 the -# same as any other whitespace char, which is clearly wrong (it's a -# *non-breaking* space), 2) possibly cause problems with Unicode, -# since 0xa0 is not in range(128). -_whitespace = '\t\n\x0b\x0c\r ' - -class TextWrapper: - """ - Object for wrapping/filling text. The public interface consists of - the wrap() and fill() methods; the other methods are just there for - subclasses to override in order to tweak the default behaviour. - If you want to completely replace the main wrapping algorithm, - you'll probably have to override _wrap_chunks(). - - Several instance attributes control various aspects of wrapping: - width (default: 70) - the maximum width of wrapped lines (unless break_long_words - is false) - initial_indent (default: "") - string that will be prepended to the first line of wrapped - output. Counts towards the line's width. - subsequent_indent (default: "") - string that will be prepended to all lines save the first - of wrapped output; also counts towards each line's width. - expand_tabs (default: true) - Expand tabs in input text to spaces before further processing. - Each tab will become 1 .. 8 spaces, depending on its position in - its line. If false, each tab is treated as a single character. - replace_whitespace (default: true) - Replace all whitespace characters in the input text by spaces - after tab expansion. Note that if expand_tabs is false and - replace_whitespace is true, every tab will be converted to a - single space! - fix_sentence_endings (default: false) - Ensure that sentence-ending punctuation is always followed - by two spaces. Off by default because the algorithm is - (unavoidably) imperfect. - break_long_words (default: true) - Break words longer than 'width'. If false, those words will not - be broken, and some lines might be longer than 'width'. - """ - - whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace)) - - unicode_whitespace_trans = {} - try: - uspace = eval("ord(u' ')") - except SyntaxError: - # Python1.5 doesn't understand u'' syntax, in which case we - # won't actually use the unicode translation below, so it - # doesn't matter what value we put in the table. - uspace = ord(' ') - for x in map(ord, _whitespace): - unicode_whitespace_trans[x] = uspace - - # This funky little regex is just the trick for splitting - # text up into word-wrappable chunks. E.g. - # "Hello there -- you goof-ball, use the -b option!" - # splits into - # Hello/ /there/ /--/ /you/ /goof-/ball,/ /use/ /the/ /-b/ /option! - # (after stripping out empty strings). - try: - wordsep_re = re.compile(r'(\s+|' # any whitespace - r'[^\s\w]*\w{2,}-(?=\w{2,})|' # hyphenated words - r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash - except re.error: - # Pre-2.0 Python versions don't have the (?<= negative look-behind - # assertion. It mostly doesn't matter for the simple input - # SCons is going to give it, so just leave it out. - wordsep_re = re.compile(r'(\s+|' # any whitespace - r'-*\w{2,}-(?=\w{2,}))') # hyphenated words - - # XXX will there be a locale-or-charset-aware version of - # string.lowercase in 2.3? - sentence_end_re = re.compile(r'[%s]' # lowercase letter - r'[\.\!\?]' # sentence-ending punct. - r'[\"\']?' # optional end-of-quote - % string.lowercase) - - - def __init__(self, - width=70, - initial_indent="", - subsequent_indent="", - expand_tabs=True, - replace_whitespace=True, - fix_sentence_endings=False, - break_long_words=True): - self.width = width - self.initial_indent = initial_indent - self.subsequent_indent = subsequent_indent - self.expand_tabs = expand_tabs - self.replace_whitespace = replace_whitespace - self.fix_sentence_endings = fix_sentence_endings - self.break_long_words = break_long_words - - - # -- Private methods ----------------------------------------------- - # (possibly useful for subclasses to override) - - def _munge_whitespace(self, text): - """_munge_whitespace(text : string) -> string - - Munge whitespace in text: expand tabs and convert all other - whitespace characters to spaces. Eg. " foo\tbar\n\nbaz" - becomes " foo bar baz". - """ - if self.expand_tabs: - text = string.expandtabs(text) - if self.replace_whitespace: - if type(text) == type(''): - text = string.translate(text, self.whitespace_trans) - elif isinstance(text, unicode): - text = string.translate(text, self.unicode_whitespace_trans) - return text - - - def _split(self, text): - """_split(text : string) -> [string] - - Split the text to wrap into indivisible chunks. Chunks are - not quite the same as words; see wrap_chunks() for full - details. As an example, the text - Look, goof-ball -- use the -b option! - breaks into the following chunks: - 'Look,', ' ', 'goof-', 'ball', ' ', '--', ' ', - 'use', ' ', 'the', ' ', '-b', ' ', 'option!' - """ - chunks = self.wordsep_re.split(text) - chunks = filter(None, chunks) - return chunks - - def _fix_sentence_endings(self, chunks): - """_fix_sentence_endings(chunks : [string]) - - Correct for sentence endings buried in 'chunks'. Eg. when the - original text contains "... foo.\nBar ...", munge_whitespace() - and split() will convert that to [..., "foo.", " ", "Bar", ...] - which has one too few spaces; this method simply changes the one - space to two. - """ - i = 0 - pat = self.sentence_end_re - while i < len(chunks)-1: - if chunks[i+1] == " " and pat.search(chunks[i]): - chunks[i+1] = " " - i = i + 2 - else: - i = i + 1 - - def _handle_long_word(self, chunks, cur_line, cur_len, width): - """_handle_long_word(chunks : [string], - cur_line : [string], - cur_len : int, width : int) - - Handle a chunk of text (most likely a word, not whitespace) that - is too long to fit in any line. - """ - space_left = max(width - cur_len, 1) - - # If we're allowed to break long words, then do so: put as much - # of the next chunk onto the current line as will fit. - if self.break_long_words: - cur_line.append(chunks[0][0:space_left]) - chunks[0] = chunks[0][space_left:] - - # Otherwise, we have to preserve the long word intact. Only add - # it to the current line if there's nothing already there -- - # that minimizes how much we violate the width constraint. - elif not cur_line: - cur_line.append(chunks.pop(0)) - - # If we're not allowed to break long words, and there's already - # text on the current line, do nothing. Next time through the - # main loop of _wrap_chunks(), we'll wind up here again, but - # cur_len will be zero, so the next line will be entirely - # devoted to the long word that we can't handle right now. - - def _wrap_chunks(self, chunks): - """_wrap_chunks(chunks : [string]) -> [string] - - Wrap a sequence of text chunks and return a list of lines of - length 'self.width' or less. (If 'break_long_words' is false, - some lines may be longer than this.) Chunks correspond roughly - to words and the whitespace between them: each chunk is - indivisible (modulo 'break_long_words'), but a line break can - come between any two chunks. Chunks should not have internal - whitespace; ie. a chunk is either all whitespace or a "word". - Whitespace chunks will be removed from the beginning and end of - lines, but apart from that whitespace is preserved. - """ - lines = [] - if self.width <= 0: - raise ValueError("invalid width %r (must be > 0)" % self.width) - - while chunks: - - # Start the list of chunks that will make up the current line. - # cur_len is just the length of all the chunks in cur_line. - cur_line = [] - cur_len = 0 - - # Figure out which static string will prefix this line. - if lines: - indent = self.subsequent_indent - else: - indent = self.initial_indent - - # Maximum width for this line. - width = self.width - len(indent) - - # First chunk on line is whitespace -- drop it, unless this - # is the very beginning of the text (ie. no lines started yet). - if string.strip(chunks[0]) == '' and lines: - del chunks[0] - - while chunks: - l = len(chunks[0]) - - # Can at least squeeze this chunk onto the current line. - if cur_len + l <= width: - cur_line.append(chunks.pop(0)) - cur_len = cur_len + l - - # Nope, this line is full. - else: - break - - # The current line is full, and the next chunk is too big to - # fit on *any* line (not just this one). - if chunks and len(chunks[0]) > width: - self._handle_long_word(chunks, cur_line, cur_len, width) - - # If the last chunk on this line is all whitespace, drop it. - if cur_line and string.strip(cur_line[-1]) == '': - del cur_line[-1] - - # Convert current line back to a string and store it in list - # of all lines (return value). - if cur_line: - lines.append(indent + string.join(cur_line, '')) - - return lines - - - # -- Public interface ---------------------------------------------- - - def wrap(self, text): - """wrap(text : string) -> [string] - - Reformat the single paragraph in 'text' so it fits in lines of - no more than 'self.width' columns, and return a list of wrapped - lines. Tabs in 'text' are expanded with string.expandtabs(), - and all other whitespace characters (including newline) are - converted to space. - """ - text = self._munge_whitespace(text) - indent = self.initial_indent - chunks = self._split(text) - if self.fix_sentence_endings: - self._fix_sentence_endings(chunks) - return self._wrap_chunks(chunks) - - def fill(self, text): - """fill(text : string) -> string - - Reformat the single paragraph in 'text' to fit in lines of no - more than 'self.width' columns, and return a new string - containing the entire wrapped paragraph. - """ - return string.join(self.wrap(text), "\n") - - -# -- Convenience interface --------------------------------------------- - -def wrap(text, width=70, **kwargs): - """Wrap a single paragraph of text, returning a list of wrapped lines. - - Reformat the single paragraph in 'text' so it fits in lines of no - more than 'width' columns, and return a list of wrapped lines. By - default, tabs in 'text' are expanded with string.expandtabs(), and - all other whitespace characters (including newline) are converted to - space. See TextWrapper class for available keyword args to customize - wrapping behaviour. - """ - kw = kwargs.copy() - kw['width'] = width - w = apply(TextWrapper, (), kw) - return w.wrap(text) - -def fill(text, width=70, **kwargs): - """Fill a single paragraph of text, returning a new string. - - Reformat the single paragraph in 'text' to fit in lines of no more - than 'width' columns, and return a new string containing the entire - wrapped paragraph. As with wrap(), tabs are expanded and other - whitespace characters converted to space. See TextWrapper class for - available keyword args to customize wrapping behaviour. - """ - kw = kwargs.copy() - kw['width'] = width - w = apply(TextWrapper, (), kw) - return w.fill(text) - - -# -- Loosely related functionality ------------------------------------- - -def dedent(text): - """dedent(text : string) -> string - - Remove any whitespace than can be uniformly removed from the left - of every line in `text`. - - This can be used e.g. to make triple-quoted strings line up with - the left edge of screen/whatever, while still presenting it in the - source code in indented form. - - For example: - - def test(): - # end first line with \ to avoid the empty line! - s = '''\ - hello - world - ''' - print repr(s) # prints ' hello\n world\n ' - print repr(dedent(s)) # prints 'hello\n world\n' - """ - lines = text.expandtabs().split('\n') - margin = None - for line in lines: - content = line.lstrip() - if not content: - continue - indent = len(line) - len(content) - if margin is None: - margin = indent - else: - margin = min(margin, indent) - - if margin is not None and margin > 0: - for i in range(len(lines)): - lines[i] = lines[i][margin:] - - return string.join(lines, '\n') diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.py deleted file mode 100644 index 8ae38b6ff..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.py +++ /dev/null @@ -1,181 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -# Portions of the following are derived from the compat.py file in -# Twisted, under the following copyright: -# -# Copyright (c) 2001-2004 Twisted Matrix Laboratories - -__doc__ = """ -Compatibility idioms for __builtin__ names - -This module adds names to the __builtin__ module for things that we want -to use in SCons but which don't show up until later Python versions than -the earliest ones we support. - -This module checks for the following __builtin__ names: - - all() - any() - bool() - dict() - True - False - zip() - -Implementations of functions are *NOT* guaranteed to be fully compliant -with these functions in later versions of Python. We are only concerned -with adding functionality that we actually use in SCons, so be wary -if you lift this code for other uses. (That said, making these more -nearly the same as later, official versions is still a desirable goal, -we just don't need to be obsessive about it.) - -If you're looking at this with pydoc and various names don't show up in -the FUNCTIONS or DATA output, that means those names are already built in -to this version of Python and we don't need to add them from this module. -""" - -__revision__ = "src/engine/SCons/compat/builtins.py 3842 2008/12/20 22:59:52 scons" - -import __builtin__ - -try: - all -except NameError: - # Pre-2.5 Python has no all() function. - def all(iterable): - """ - Returns True if all elements of the iterable are true. - """ - for element in iterable: - if not element: - return False - return True - __builtin__.all = all - all = all - -try: - any -except NameError: - # Pre-2.5 Python has no any() function. - def any(iterable): - """ - Returns True if any element of the iterable is true. - """ - for element in iterable: - if element: - return True - return False - __builtin__.any = any - any = any - -try: - bool -except NameError: - # Pre-2.2 Python has no bool() function. - def bool(value): - """Demote a value to 0 or 1, depending on its truth value. - - This is not to be confused with types.BooleanType, which is - way too hard to duplicate in early Python versions to be - worth the trouble. - """ - return not not value - __builtin__.bool = bool - bool = bool - -try: - dict -except NameError: - # Pre-2.2 Python has no dict() keyword. - def dict(seq=[], **kwargs): - """ - New dictionary initialization. - """ - d = {} - for k, v in seq: - d[k] = v - d.update(kwargs) - return d - __builtin__.dict = dict - -try: - False -except NameError: - # Pre-2.2 Python has no False keyword. - __builtin__.False = not 1 - # Assign to False in this module namespace so it shows up in pydoc output. - False = False - -try: - True -except NameError: - # Pre-2.2 Python has no True keyword. - __builtin__.True = not 0 - # Assign to True in this module namespace so it shows up in pydoc output. - True = True - -try: - file -except NameError: - # Pre-2.2 Python has no file() function. - __builtin__.file = open - -# -try: - zip -except NameError: - # Pre-2.2 Python has no zip() function. - def zip(*lists): - """ - Emulates the behavior we need from the built-in zip() function - added in Python 2.2. - - Returns a list of tuples, where each tuple contains the i-th - element rom each of the argument sequences. The returned - list is truncated in length to the length of the shortest - argument sequence. - """ - result = [] - for i in xrange(min(map(len, lists))): - result.append(tuple(map(lambda l, i=i: l[i], lists))) - return result - __builtin__.zip = zip - - - -#if sys.version_info[:3] in ((2, 2, 0), (2, 2, 1)): -# def lstrip(s, c=string.whitespace): -# while s and s[0] in c: -# s = s[1:] -# return s -# def rstrip(s, c=string.whitespace): -# while s and s[-1] in c: -# s = s[:-1] -# return s -# def strip(s, c=string.whitespace, l=lstrip, r=rstrip): -# return l(r(s, c), c) -# -# object.__setattr__(str, 'lstrip', lstrip) -# object.__setattr__(str, 'rstrip', rstrip) -# object.__setattr__(str, 'strip', strip) diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/compat/builtins.pyc deleted file mode 100644 index 109265b095b1b187fa13d7e1e3000c25a783cefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3996 zcmcgv-HzKt6dotL*^S9om5>l{0Ru=SpxtB}Kq^&*fc^kNY#|#|v;u{RJ=sjx_N1Qi zZi8BJ0r%X%1Mmzy4A)3VJOB>>-#K=ijamdZC9=me_Bk_WzVn@PCe1&0!q%l)DVkpp_?MOlf5Q3^oBSIMgFk}f*{@y-$SKI zUv)!_xr1RAh%ZQIb6w|K*4bp8P5MeY+&S8;bz18>zpze=by`B>f)00%TD8s=>0GL9 z`<---v5_tDJ@&FCG%l!Z)e76B@KUXC5%NL2EjlCxySK&Bb}idpm%YZa?NYWabXy#? zYuS)wpReatB&(m|#lu>tLqf0ALO<|?A@8swG%gs?VQDzvu=^Bw=Z~fk;dPtNl{XWU z7{8DvHa2x~YI8XrPYRQGla0qRQ>k`gIGPzJQyUkFmMV^2`CfV}{YZ$v^1GKylyimCk4LEOf-|R&0h7=&Fq;h=Ca7VNo1nD&gG{IKeL%U z)wwgIg9)>c*3~LcjCNkyOgmb_74x~xeQ(|1Xr`l+a%-eDwMk;nVA`79ywR&+D65}J zlJ0A(QMNcYnpk`OV{9US?&~Nobgg(xC2lqP#>^oYew5A=o$Aa3e%g?o%4v~B z#uH_c&NCgC6TzAcseBQdsa)7XCT8l%^A2{#1a>Yh zOw38q!GP|F=-`xzcV((hXvJ~|sm*nmkxLi!1|lhJb>(Jufzi}NMkOm6U+^%_qmOPM97^o`#(SgpB-WW1eisvB)>JEIu!YZsLM`hE!2NW?*~kJA>;8vs6xVo0gho9QH!@J_URp^>ub^GTrB} z>l25R?^ki|dh>;RqE&@l*U-%tF$m*g|-PdX2 z7t!2*Ry+{m##a}`!$3R;gxeBch{JnZ;*JlHa!AR2h^CH;q4q@%94J&Ihy!LxU4{fl z1Nq+|^x37vR}aBnt==UQJk=TwFTa5vO;x_%#%QVRw=k$??xHKWaktUy&vSE%{L=U7 zyq|%qd#C%oH+xt59?|Xkyz8>vOKhZ)z018pZ~q_h^GK-z`(U`q1hKIbw1Vy6zhRa? z4zpXBrQY--m}QG4W<-xQ$PgNjL2O8l7?NoW)R0gdlG*ME~0*}GtOD44#xAIkq}u9C19D!N0f|kWfnor z`3i)dA{`-+IDsza$V~6U>xj(}2D?>7GOnKEOd%;*D`zU_WE>Yr!4cR)m8{HJk5nmI zYBd4M66b0-#ums_=h%!*3JwycG@Ji~JwgFPMeJ)l9nnB+F-<9?=-bD*-4!%Oh=&bv z|AjKZpAla+#KWd|xFH_kYKR9-aqZrYxP$IpcrFm%1tP$pa^F5?s1Z2OXOb!7l1&_3PT%AACnz_^4w(f?Y@Ofpf|-qFUY;b}KM=@5O zNvlycHI9`zu<`W_kF2#~U_{t1??b|wk`~+m;GZj*eNb|ZgqV8?x8?~mkj%K2sB{vm zcYY?jaEmT6jpO1z4vWW{LnSp?`BZa$0t^;WbIO>UX4pwxqACvwQO7d5c17Zc7in(X zPq<=&g+F1DvMz+J;N{>_(A~isuH54>PF~}&@8HFFoa<9V{{ZlU{>7a8n=+)N<=bcu zaB94n=QbZw-WXE(A6}pax8MTEr-i9WGL$!bm4FR?frlN diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.py deleted file mode 100644 index 19809560a..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.py +++ /dev/null @@ -1,592 +0,0 @@ -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/cpp.py 3842 2008/12/20 22:59:52 scons" - -__doc__ = """ -SCons C Pre-Processor module -""" - -# TODO(1.5): remove this import -# This module doesn't use anything from SCons by name, but we import SCons -# here to pull in zip() from the SCons.compat layer for early Pythons. -import SCons - -import os -import re -import string - -# -# First "subsystem" of regular expressions that we set up: -# -# Stuff to turn the C preprocessor directives in a file's contents into -# a list of tuples that we can process easily. -# - -# A table of regular expressions that fetch the arguments from the rest of -# a C preprocessor line. Different directives have different arguments -# that we want to fetch, using the regular expressions to which the lists -# of preprocessor directives map. -cpp_lines_dict = { - # Fetch the rest of a #if/#elif/#ifdef/#ifndef as one argument, - # separated from the keyword by white space. - ('if', 'elif', 'ifdef', 'ifndef',) - : '\s+(.+)', - - # Fetch the rest of a #import/#include/#include_next line as one - # argument, with white space optional. - ('import', 'include', 'include_next',) - : '\s*(.+)', - - # We don't care what comes after a #else or #endif line. - ('else', 'endif',) : '', - - # Fetch three arguments from a #define line: - # 1) The #defined keyword. - # 2) The optional parentheses and arguments (if it's a function-like - # macro, '' if it's not). - # 3) The expansion value. - ('define',) : '\s+([_A-Za-z][_A-Za-z0-9_]+)(\([^)]*\))?\s*(.*)', - - # Fetch the #undefed keyword from a #undef line. - ('undef',) : '\s+([_A-Za-z][A-Za-z0-9_]+)', -} - -# Create a table that maps each individual C preprocessor directive to -# the corresponding compiled regular expression that fetches the arguments -# we care about. -Table = {} -for op_list, expr in cpp_lines_dict.items(): - e = re.compile(expr) - for op in op_list: - Table[op] = e -del e -del op -del op_list - -# Create a list of the expressions we'll use to match all of the -# preprocessor directives. These are the same as the directives -# themselves *except* that we must use a negative lookahead assertion -# when matching "if" so it doesn't match the "if" in "ifdef." -override = { - 'if' : 'if(?!def)', -} -l = map(lambda x, o=override: o.get(x, x), Table.keys()) - - -# Turn the list of expressions into one big honkin' regular expression -# that will match all the preprocessor lines at once. This will return -# a list of tuples, one for each preprocessor line. The preprocessor -# directive will be the first element in each tuple, and the rest of -# the line will be the second element. -e = '^\s*#\s*(' + string.join(l, '|') + ')(.*)$' - -# And last but not least, compile the expression. -CPP_Expression = re.compile(e, re.M) - - - - -# -# Second "subsystem" of regular expressions that we set up: -# -# Stuff to translate a C preprocessor expression (as found on a #if or -# #elif line) into an equivalent Python expression that we can eval(). -# - -# A dictionary that maps the C representation of Boolean operators -# to their Python equivalents. -CPP_to_Python_Ops_Dict = { - '!' : ' not ', - '!=' : ' != ', - '&&' : ' and ', - '||' : ' or ', - '?' : ' and ', - ':' : ' or ', - '\r' : '', -} - -CPP_to_Python_Ops_Sub = lambda m, d=CPP_to_Python_Ops_Dict: d[m.group(0)] - -# We have to sort the keys by length so that longer expressions -# come *before* shorter expressions--in particular, "!=" must -# come before "!" in the alternation. Without this, the Python -# re module, as late as version 2.2.2, empirically matches the -# "!" in "!=" first, instead of finding the longest match. -# What's up with that? -l = CPP_to_Python_Ops_Dict.keys() -l.sort(lambda a, b: cmp(len(b), len(a))) - -# Turn the list of keys into one regular expression that will allow us -# to substitute all of the operators at once. -expr = string.join(map(re.escape, l), '|') - -# ...and compile the expression. -CPP_to_Python_Ops_Expression = re.compile(expr) - -# A separate list of expressions to be evaluated and substituted -# sequentially, not all at once. -CPP_to_Python_Eval_List = [ - ['defined\s+(\w+)', '__dict__.has_key("\\1")'], - ['defined\s*\((\w+)\)', '__dict__.has_key("\\1")'], - ['/\*.*\*/', ''], - ['/\*.*', ''], - ['//.*', ''], - ['(0x[0-9A-Fa-f]*)[UL]+', '\\1L'], -] - -# Replace the string representations of the regular expressions in the -# list with compiled versions. -for l in CPP_to_Python_Eval_List: - l[0] = re.compile(l[0]) - -# Wrap up all of the above into a handy function. -def CPP_to_Python(s): - """ - Converts a C pre-processor expression into an equivalent - Python expression that can be evaluated. - """ - s = CPP_to_Python_Ops_Expression.sub(CPP_to_Python_Ops_Sub, s) - for expr, repl in CPP_to_Python_Eval_List: - s = expr.sub(repl, s) - return s - - - -del expr -del l -del override - - - -class FunctionEvaluator: - """ - Handles delayed evaluation of a #define function call. - """ - def __init__(self, name, args, expansion): - """ - Squirrels away the arguments and expansion value of a #define - macro function for later evaluation when we must actually expand - a value that uses it. - """ - self.name = name - self.args = function_arg_separator.split(args) - try: - expansion = string.split(expansion, '##') - except (AttributeError, TypeError): - # Python 1.5 throws TypeError if "expansion" isn't a string, - # later versions throw AttributeError. - pass - self.expansion = expansion - def __call__(self, *values): - """ - Evaluates the expansion of a #define macro function called - with the specified values. - """ - if len(self.args) != len(values): - raise ValueError, "Incorrect number of arguments to `%s'" % self.name - # Create a dictionary that maps the macro arguments to the - # corresponding values in this "call." We'll use this when we - # eval() the expansion so that arguments will get expanded to - # the right values. - locals = {} - for k, v in zip(self.args, values): - locals[k] = v - - parts = [] - for s in self.expansion: - if not s in self.args: - s = repr(s) - parts.append(s) - statement = string.join(parts, ' + ') - - return eval(statement, globals(), locals) - - - -# Find line continuations. -line_continuations = re.compile('\\\\\r?\n') - -# Search for a "function call" macro on an expansion. Returns the -# two-tuple of the "function" name itself, and a string containing the -# arguments within the call parentheses. -function_name = re.compile('(\S+)\(([^)]*)\)') - -# Split a string containing comma-separated function call arguments into -# the separate arguments. -function_arg_separator = re.compile(',\s*') - - - -class PreProcessor: - """ - The main workhorse class for handling C pre-processing. - """ - def __init__(self, current=os.curdir, cpppath=(), dict={}, all=0): - global Table - - cpppath = tuple(cpppath) - - self.searchpath = { - '"' : (current,) + cpppath, - '<' : cpppath + (current,), - } - - # Initialize our C preprocessor namespace for tracking the - # values of #defined keywords. We use this namespace to look - # for keywords on #ifdef/#ifndef lines, and to eval() the - # expressions on #if/#elif lines (after massaging them from C to - # Python). - self.cpp_namespace = dict.copy() - self.cpp_namespace['__dict__'] = self.cpp_namespace - - if all: - self.do_include = self.all_include - - # For efficiency, a dispatch table maps each C preprocessor - # directive (#if, #define, etc.) to the method that should be - # called when we see it. We accomodate state changes (#if, - # #ifdef, #ifndef) by pushing the current dispatch table on a - # stack and changing what method gets called for each relevant - # directive we might see next at this level (#else, #elif). - # #endif will simply pop the stack. - d = { - 'scons_current_file' : self.scons_current_file - } - for op in Table.keys(): - d[op] = getattr(self, 'do_' + op) - self.default_table = d - - # Controlling methods. - - def tupleize(self, contents): - """ - Turns the contents of a file into a list of easily-processed - tuples describing the CPP lines in the file. - - The first element of each tuple is the line's preprocessor - directive (#if, #include, #define, etc., minus the initial '#'). - The remaining elements are specific to the type of directive, as - pulled apart by the regular expression. - """ - global CPP_Expression, Table - contents = line_continuations.sub('', contents) - cpp_tuples = CPP_Expression.findall(contents) - return map(lambda m, t=Table: - (m[0],) + t[m[0]].match(m[1]).groups(), - cpp_tuples) - - def __call__(self, file): - """ - Pre-processes a file. - - This is the main public entry point. - """ - self.current_file = file - return self.process_contents(self.read_file(file), file) - - def process_contents(self, contents, fname=None): - """ - Pre-processes a file contents. - - This is the main internal entry point. - """ - self.stack = [] - self.dispatch_table = self.default_table.copy() - self.current_file = fname - self.tuples = self.tupleize(contents) - - self.initialize_result(fname) - while self.tuples: - t = self.tuples.pop(0) - # Uncomment to see the list of tuples being processed (e.g., - # to validate the CPP lines are being translated correctly). - #print t - self.dispatch_table[t[0]](t) - return self.finalize_result(fname) - - # Dispatch table stack manipulation methods. - - def save(self): - """ - Pushes the current dispatch table on the stack and re-initializes - the current dispatch table to the default. - """ - self.stack.append(self.dispatch_table) - self.dispatch_table = self.default_table.copy() - - def restore(self): - """ - Pops the previous dispatch table off the stack and makes it the - current one. - """ - try: self.dispatch_table = self.stack.pop() - except IndexError: pass - - # Utility methods. - - def do_nothing(self, t): - """ - Null method for when we explicitly want the action for a - specific preprocessor directive to do nothing. - """ - pass - - def scons_current_file(self, t): - self.current_file = t[1] - - def eval_expression(self, t): - """ - Evaluates a C preprocessor expression. - - This is done by converting it to a Python equivalent and - eval()ing it in the C preprocessor namespace we use to - track #define values. - """ - t = CPP_to_Python(string.join(t[1:])) - try: return eval(t, self.cpp_namespace) - except (NameError, TypeError): return 0 - - def initialize_result(self, fname): - self.result = [fname] - - def finalize_result(self, fname): - return self.result[1:] - - def find_include_file(self, t): - """ - Finds the #include file for a given preprocessor tuple. - """ - fname = t[2] - for d in self.searchpath[t[1]]: - if d == os.curdir: - f = fname - else: - f = os.path.join(d, fname) - if os.path.isfile(f): - return f - return None - - def read_file(self, file): - return open(file).read() - - # Start and stop processing include lines. - - def start_handling_includes(self, t=None): - """ - Causes the PreProcessor object to start processing #import, - #include and #include_next lines. - - This method will be called when a #if, #ifdef, #ifndef or #elif - evaluates True, or when we reach the #else in a #if, #ifdef, - #ifndef or #elif block where a condition already evaluated - False. - - """ - d = self.dispatch_table - d['import'] = self.do_import - d['include'] = self.do_include - d['include_next'] = self.do_include - - def stop_handling_includes(self, t=None): - """ - Causes the PreProcessor object to stop processing #import, - #include and #include_next lines. - - This method will be called when a #if, #ifdef, #ifndef or #elif - evaluates False, or when we reach the #else in a #if, #ifdef, - #ifndef or #elif block where a condition already evaluated True. - """ - d = self.dispatch_table - d['import'] = self.do_nothing - d['include'] = self.do_nothing - d['include_next'] = self.do_nothing - - # Default methods for handling all of the preprocessor directives. - # (Note that what actually gets called for a given directive at any - # point in time is really controlled by the dispatch_table.) - - def _do_if_else_condition(self, condition): - """ - Common logic for evaluating the conditions on #if, #ifdef and - #ifndef lines. - """ - self.save() - d = self.dispatch_table - if condition: - self.start_handling_includes() - d['elif'] = self.stop_handling_includes - d['else'] = self.stop_handling_includes - else: - self.stop_handling_includes() - d['elif'] = self.do_elif - d['else'] = self.start_handling_includes - - def do_ifdef(self, t): - """ - Default handling of a #ifdef line. - """ - self._do_if_else_condition(self.cpp_namespace.has_key(t[1])) - - def do_ifndef(self, t): - """ - Default handling of a #ifndef line. - """ - self._do_if_else_condition(not self.cpp_namespace.has_key(t[1])) - - def do_if(self, t): - """ - Default handling of a #if line. - """ - self._do_if_else_condition(self.eval_expression(t)) - - def do_elif(self, t): - """ - Default handling of a #elif line. - """ - d = self.dispatch_table - if self.eval_expression(t): - self.start_handling_includes() - d['elif'] = self.stop_handling_includes - d['else'] = self.stop_handling_includes - - def do_else(self, t): - """ - Default handling of a #else line. - """ - pass - - def do_endif(self, t): - """ - Default handling of a #endif line. - """ - self.restore() - - def do_define(self, t): - """ - Default handling of a #define line. - """ - _, name, args, expansion = t - try: - expansion = int(expansion) - except (TypeError, ValueError): - pass - if args: - evaluator = FunctionEvaluator(name, args[1:-1], expansion) - self.cpp_namespace[name] = evaluator - else: - self.cpp_namespace[name] = expansion - - def do_undef(self, t): - """ - Default handling of a #undef line. - """ - try: del self.cpp_namespace[t[1]] - except KeyError: pass - - def do_import(self, t): - """ - Default handling of a #import line. - """ - # XXX finish this -- maybe borrow/share logic from do_include()...? - pass - - def do_include(self, t): - """ - Default handling of a #include line. - """ - t = self.resolve_include(t) - include_file = self.find_include_file(t) - if include_file: - #print "include_file =", include_file - self.result.append(include_file) - contents = self.read_file(include_file) - new_tuples = [('scons_current_file', include_file)] + \ - self.tupleize(contents) + \ - [('scons_current_file', self.current_file)] - self.tuples[:] = new_tuples + self.tuples - - # Date: Tue, 22 Nov 2005 20:26:09 -0500 - # From: Stefan Seefeld - # - # By the way, #include_next is not the same as #include. The difference - # being that #include_next starts its search in the path following the - # path that let to the including file. In other words, if your system - # include paths are ['/foo', '/bar'], and you are looking at a header - # '/foo/baz.h', it might issue an '#include_next ' which would - # correctly resolve to '/bar/baz.h' (if that exists), but *not* see - # '/foo/baz.h' again. See http://www.delorie.com/gnu/docs/gcc/cpp_11.html - # for more reasoning. - # - # I have no idea in what context 'import' might be used. - - # XXX is #include_next really the same as #include ? - do_include_next = do_include - - # Utility methods for handling resolution of include files. - - def resolve_include(self, t): - """Resolve a tuple-ized #include line. - - This handles recursive expansion of values without "" or <> - surrounding the name until an initial " or < is found, to handle - #include FILE - where FILE is a #define somewhere else. - """ - s = t[1] - while not s[0] in '<"': - #print "s =", s - try: - s = self.cpp_namespace[s] - except KeyError: - m = function_name.search(s) - s = self.cpp_namespace[m.group(1)] - if callable(s): - args = function_arg_separator.split(m.group(2)) - s = apply(s, args) - if not s: - return None - return (t[0], s[0], s[1:-1]) - - def all_include(self, t): - """ - """ - self.result.append(self.resolve_include(t)) - -class DumbPreProcessor(PreProcessor): - """A preprocessor that ignores all #if/#elif/#else/#endif directives - and just reports back *all* of the #include files (like the classic - SCons scanner did). - - This is functionally equivalent to using a regular expression to - find all of the #include lines, only slower. It exists mainly as - an example of how the main PreProcessor class can be sub-classed - to tailor its behavior. - """ - def __init__(self, *args, **kw): - apply(PreProcessor.__init__, (self,)+args, kw) - d = self.default_table - for func in ['if', 'elif', 'else', 'endif', 'ifdef', 'ifndef']: - d[func] = d[func] = self.do_nothing - -del __revision__ diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/cpp.pyc deleted file mode 100644 index 9f9f23aca8a865f50920b18d3bfb745f4dd34356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16680 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 o>9YoN=duI&0?5hy4&?i-GZ4}8Zfi)u>b%7 diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.py deleted file mode 100644 index 437f05a37..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.py +++ /dev/null @@ -1,219 +0,0 @@ -# dblite.py module contributed by Ralf W. Grosse-Kunstleve. -# Extended for Unicode by Steven Knight. - -import cPickle -import time -import shutil -import os -import types -import __builtin__ - -keep_all_files = 00000 -ignore_corrupt_dbfiles = 0 - -def corruption_warning(filename): - print "Warning: Discarding corrupt database:", filename - -if hasattr(types, 'UnicodeType'): - def is_string(s): - t = type(s) - return t is types.StringType or t is types.UnicodeType -else: - def is_string(s): - return type(s) is types.StringType - -try: - unicode('a') -except NameError: - def unicode(s): return s - -dblite_suffix = '.dblite' -tmp_suffix = '.tmp' - -class dblite: - - # Squirrel away references to the functions in various modules - # that we'll use when our __del__() method calls our sync() method - # during shutdown. We might get destroyed when Python is in the midst - # of tearing down the different modules we import in an essentially - # arbitrary order, and some of the various modules's global attributes - # may already be wiped out from under us. - # - # See the discussion at: - # http://mail.python.org/pipermail/python-bugs-list/2003-March/016877.html - - _open = __builtin__.open - _cPickle_dump = cPickle.dump - _os_chmod = os.chmod - _os_rename = os.rename - _os_unlink = os.unlink - _shutil_copyfile = shutil.copyfile - _time_time = time.time - - def __init__(self, file_base_name, flag, mode): - assert flag in (None, "r", "w", "c", "n") - if (flag is None): flag = "r" - base, ext = os.path.splitext(file_base_name) - if ext == dblite_suffix: - # There's already a suffix on the file name, don't add one. - self._file_name = file_base_name - self._tmp_name = base + tmp_suffix - else: - self._file_name = file_base_name + dblite_suffix - self._tmp_name = file_base_name + tmp_suffix - self._flag = flag - self._mode = mode - self._dict = {} - self._needs_sync = 00000 - if (self._flag == "n"): - self._open(self._file_name, "wb", self._mode) - else: - try: - f = self._open(self._file_name, "rb") - except IOError, e: - if (self._flag != "c"): - raise e - self._open(self._file_name, "wb", self._mode) - else: - p = f.read() - if (len(p) > 0): - try: - self._dict = cPickle.loads(p) - except (cPickle.UnpicklingError, EOFError): - if (ignore_corrupt_dbfiles == 0): raise - if (ignore_corrupt_dbfiles == 1): - corruption_warning(self._file_name) - - def __del__(self): - if (self._needs_sync): - self.sync() - - def sync(self): - self._check_writable() - f = self._open(self._tmp_name, "wb", self._mode) - self._cPickle_dump(self._dict, f, 1) - f.close() - # Windows doesn't allow renaming if the file exists, so unlink - # it first, chmod'ing it to make sure we can do so. On UNIX, we - # may not be able to chmod the file if it's owned by someone else - # (e.g. from a previous run as root). We should still be able to - # unlink() the file if the directory's writable, though, so ignore - # any OSError exception thrown by the chmod() call. - try: self._os_chmod(self._file_name, 0777) - except OSError: pass - self._os_unlink(self._file_name) - self._os_rename(self._tmp_name, self._file_name) - self._needs_sync = 00000 - if (keep_all_files): - self._shutil_copyfile( - self._file_name, - self._file_name + "_" + str(int(self._time_time()))) - - def _check_writable(self): - if (self._flag == "r"): - raise IOError("Read-only database: %s" % self._file_name) - - def __getitem__(self, key): - return self._dict[key] - - def __setitem__(self, key, value): - self._check_writable() - if (not is_string(key)): - raise TypeError, "key `%s' must be a string but is %s" % (key, type(key)) - if (not is_string(value)): - raise TypeError, "value `%s' must be a string but is %s" % (value, type(value)) - self._dict[key] = value - self._needs_sync = 0001 - - def keys(self): - return self._dict.keys() - - def has_key(self, key): - return key in self._dict - - def __contains__(self, key): - return key in self._dict - - def iterkeys(self): - return self._dict.iterkeys() - - __iter__ = iterkeys - - def __len__(self): - return len(self._dict) - -def open(file, flag=None, mode=0666): - return dblite(file, flag, mode) - -def _exercise(): - db = open("tmp", "n") - assert len(db) == 0 - db["foo"] = "bar" - assert db["foo"] == "bar" - db[unicode("ufoo")] = unicode("ubar") - assert db[unicode("ufoo")] == unicode("ubar") - db.sync() - db = open("tmp", "c") - assert len(db) == 2, len(db) - assert db["foo"] == "bar" - db["bar"] = "foo" - assert db["bar"] == "foo" - db[unicode("ubar")] = unicode("ufoo") - assert db[unicode("ubar")] == unicode("ufoo") - db.sync() - db = open("tmp", "r") - assert len(db) == 4, len(db) - assert db["foo"] == "bar" - assert db["bar"] == "foo" - assert db[unicode("ufoo")] == unicode("ubar") - assert db[unicode("ubar")] == unicode("ufoo") - try: - db.sync() - except IOError, e: - assert str(e) == "Read-only database: tmp.dblite" - else: - raise RuntimeError, "IOError expected." - db = open("tmp", "w") - assert len(db) == 4 - db["ping"] = "pong" - db.sync() - try: - db[(1,2)] = "tuple" - except TypeError, e: - assert str(e) == "key `(1, 2)' must be a string but is ", str(e) - else: - raise RuntimeError, "TypeError exception expected" - try: - db["list"] = [1,2] - except TypeError, e: - assert str(e) == "value `[1, 2]' must be a string but is ", str(e) - else: - raise RuntimeError, "TypeError exception expected" - db = open("tmp", "r") - assert len(db) == 5 - db = open("tmp", "n") - assert len(db) == 0 - _open("tmp.dblite", "w") - db = open("tmp", "r") - _open("tmp.dblite", "w").write("x") - try: - db = open("tmp", "r") - except cPickle.UnpicklingError: - pass - else: - raise RuntimeError, "cPickle exception expected." - global ignore_corrupt_dbfiles - ignore_corrupt_dbfiles = 2 - db = open("tmp", "r") - assert len(db) == 0 - os.unlink("tmp.dblite") - try: - db = open("tmp", "w") - except IOError, e: - assert str(e) == "[Errno 2] No such file or directory: 'tmp.dblite'", str(e) - else: - raise RuntimeError, "IOError expected." - print "OK" - -if (__name__ == "__main__"): - _exercise() diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.pyc b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/dblite.pyc deleted file mode 100644 index d8ad60b1047ec59450da5eba6351bb7ce6a74d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7755 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 MY;USqxl}X%26xQujQ{`u diff --git a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/exitfuncs.py b/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/exitfuncs.py deleted file mode 100644 index 2feb86c94..000000000 --- a/vendor/scons/scons-1.2.0/scons-local-1.2.0/SCons/exitfuncs.py +++ /dev/null @@ -1,71 +0,0 @@ -"""SCons.exitfuncs - -Register functions which are executed when SCons exits for any reason. - -""" - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/engine/SCons/exitfuncs.py 3842 2008/12/20 22:59:52 scons" - - - -_exithandlers = [] -def _run_exitfuncs(): - """run any registered exit functions - - _exithandlers is traversed in reverse order so functions are executed - last in, first out. - """ - - while _exithandlers: - func, targs, kargs = _exithandlers.pop() - apply(func, targs, kargs) - -def register(func, *targs, **kargs): - """register a function to be executed upon normal program termination - - func - function to be called at exit - targs - optional arguments to pass to func - kargs - optional keyword arguments to pass to func - """ - _exithandlers.append((func, targs, kargs)) - -import sys - -try: - x = sys.exitfunc - - # if x isn't our own exit func executive, assume it's another - # registered exit function - append it to our list... - if x != _run_exitfuncs: - register(x) - -except AttributeError: - pass - -# make our exit function get run by python when it exits: -sys.exitfunc = _run_exitfuncs - -del sys diff --git a/vendor/scons/scons-1.2.0/scons-time.py b/vendor/scons/scons-1.2.0/scons-time.py deleted file mode 100755 index 67b6643bf..000000000 --- a/vendor/scons/scons-1.2.0/scons-time.py +++ /dev/null @@ -1,1513 +0,0 @@ -#!/usr/bin/env python -# -# scons-time - run SCons timings and collect statistics -# -# A script for running a configuration through SCons with a standard -# set of invocations to collect timing and memory statistics and to -# capture the results in a consistent set of output files for display -# and analysis. -# - -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -from __future__ import nested_scopes - -__revision__ = "src/script/scons-time.py 3842 2008/12/20 22:59:52 scons" - -import getopt -import glob -import os -import os.path -import re -import shutil -import string -import sys -import tempfile -import time - -try: - False -except NameError: - # Pre-2.2 Python has no False keyword. - import __builtin__ - __builtin__.False = not 1 - -try: - True -except NameError: - # Pre-2.2 Python has no True keyword. - import __builtin__ - __builtin__.True = not 0 - -def make_temp_file(**kw): - try: - result = tempfile.mktemp(**kw) - try: - result = os.path.realpath(result) - except AttributeError: - # Python 2.1 has no os.path.realpath() method. - pass - except TypeError: - try: - save_template = tempfile.template - prefix = kw['prefix'] - del kw['prefix'] - tempfile.template = prefix - result = tempfile.mktemp(**kw) - finally: - tempfile.template = save_template - return result - -class Plotter: - def increment_size(self, largest): - """ - Return the size of each horizontal increment line for a specified - maximum value. This returns a value that will provide somewhere - between 5 and 9 horizontal lines on the graph, on some set of - boundaries that are multiples of 10/100/1000/etc. - """ - i = largest / 5 - if not i: - return largest - multiplier = 1 - while i >= 10: - i = i / 10 - multiplier = multiplier * 10 - return i * multiplier - - def max_graph_value(self, largest): - # Round up to next integer. - largest = int(largest) + 1 - increment = self.increment_size(largest) - return ((largest + increment - 1) / increment) * increment - -class Line: - def __init__(self, points, type, title, label, comment, fmt="%s %s"): - self.points = points - self.type = type - self.title = title - self.label = label - self.comment = comment - self.fmt = fmt - - def print_label(self, inx, x, y): - if self.label: - print 'set label %s "%s" at %s,%s right' % (inx, self.label, x, y) - - def plot_string(self): - if self.title: - title_string = 'title "%s"' % self.title - else: - title_string = 'notitle' - return "'-' %s with lines lt %s" % (title_string, self.type) - - def print_points(self, fmt=None): - if fmt is None: - fmt = self.fmt - if self.comment: - print '# %s' % self.comment - for x, y in self.points: - # If y is None, it usually represents some kind of break - # in the line's index number. We might want to represent - # this some way rather than just drawing the line straight - # between the two points on either side. - if not y is None: - print fmt % (x, y) - print 'e' - - def get_x_values(self): - return [ p[0] for p in self.points ] - - def get_y_values(self): - return [ p[1] for p in self.points ] - -class Gnuplotter(Plotter): - - def __init__(self, title, key_location): - self.lines = [] - self.title = title - self.key_location = key_location - - def line(self, points, type, title=None, label=None, comment=None, fmt='%s %s'): - if points: - line = Line(points, type, title, label, comment, fmt) - self.lines.append(line) - - def plot_string(self, line): - return line.plot_string() - - def vertical_bar(self, x, type, label, comment): - if self.get_min_x() <= x and x <= self.get_max_x(): - points = [(x, 0), (x, self.max_graph_value(self.get_max_y()))] - self.line(points, type, label, comment) - - def get_all_x_values(self): - result = [] - for line in self.lines: - result.extend(line.get_x_values()) - return filter(lambda r: not r is None, result) - - def get_all_y_values(self): - result = [] - for line in self.lines: - result.extend(line.get_y_values()) - return filter(lambda r: not r is None, result) - - def get_min_x(self): - try: - return self.min_x - except AttributeError: - try: - self.min_x = min(self.get_all_x_values()) - except ValueError: - self.min_x = 0 - return self.min_x - - def get_max_x(self): - try: - return self.max_x - except AttributeError: - try: - self.max_x = max(self.get_all_x_values()) - except ValueError: - self.max_x = 0 - return self.max_x - - def get_min_y(self): - try: - return self.min_y - except AttributeError: - try: - self.min_y = min(self.get_all_y_values()) - except ValueError: - self.min_y = 0 - return self.min_y - - def get_max_y(self): - try: - return self.max_y - except AttributeError: - try: - self.max_y = max(self.get_all_y_values()) - except ValueError: - self.max_y = 0 - return self.max_y - - def draw(self): - - if not self.lines: - return - - if self.title: - print 'set title "%s"' % self.title - print 'set key %s' % self.key_location - - min_y = self.get_min_y() - max_y = self.max_graph_value(self.get_max_y()) - range = max_y - min_y - incr = range / 10.0 - start = min_y + (max_y / 2.0) + (2.0 * incr) - position = [ start - (i * incr) for i in xrange(5) ] - - inx = 1 - for line in self.lines: - line.print_label(inx, line.points[0][0]-1, - position[(inx-1) % len(position)]) - inx += 1 - - plot_strings = [ self.plot_string(l) for l in self.lines ] - print 'plot ' + ', \\\n '.join(plot_strings) - - for line in self.lines: - line.print_points() - - - -def untar(fname): - import tarfile - tar = tarfile.open(name=fname, mode='r') - for tarinfo in tar: - tar.extract(tarinfo) - tar.close() - -def unzip(fname): - import zipfile - zf = zipfile.ZipFile(fname, 'r') - for name in zf.namelist(): - dir = os.path.dirname(name) - try: - os.makedirs(dir) - except: - pass - open(name, 'w').write(zf.read(name)) - -def read_tree(dir): - def read_files(arg, dirname, fnames): - for fn in fnames: - fn = os.path.join(dirname, fn) - if os.path.isfile(fn): - open(fn, 'rb').read() - os.path.walk('.', read_files, None) - -def redirect_to_file(command, log): - return '%s > %s 2>&1' % (command, log) - -def tee_to_file(command, log): - return '%s 2>&1 | tee %s' % (command, log) - - - -class SConsTimer: - """ - Usage: scons-time SUBCOMMAND [ARGUMENTS] - Type "scons-time help SUBCOMMAND" for help on a specific subcommand. - - Available subcommands: - func Extract test-run data for a function - help Provides help - mem Extract --debug=memory data from test runs - obj Extract --debug=count data from test runs - time Extract --debug=time data from test runs - run Runs a test configuration - """ - - name = 'scons-time' - name_spaces = ' '*len(name) - - def makedict(**kw): - return kw - - default_settings = makedict( - aegis = 'aegis', - aegis_project = None, - chdir = None, - config_file = None, - initial_commands = [], - key_location = 'bottom left', - orig_cwd = os.getcwd(), - outdir = None, - prefix = '', - python = '"%s"' % sys.executable, - redirect = redirect_to_file, - scons = None, - scons_flags = '--debug=count --debug=memory --debug=time --debug=memoizer', - scons_lib_dir = None, - scons_wrapper = None, - startup_targets = '--help', - subdir = None, - subversion_url = None, - svn = 'svn', - svn_co_flag = '-q', - tar = 'tar', - targets = '', - targets0 = None, - targets1 = None, - targets2 = None, - title = None, - unzip = 'unzip', - verbose = False, - vertical_bars = [], - - unpack_map = { - '.tar.gz' : (untar, '%(tar)s xzf %%s'), - '.tgz' : (untar, '%(tar)s xzf %%s'), - '.tar' : (untar, '%(tar)s xf %%s'), - '.zip' : (unzip, '%(unzip)s %%s'), - }, - ) - - run_titles = [ - 'Startup', - 'Full build', - 'Up-to-date build', - ] - - run_commands = [ - '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof0)s %(targets0)s', - '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof1)s %(targets1)s', - '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof2)s %(targets2)s', - ] - - stages = [ - 'pre-read', - 'post-read', - 'pre-build', - 'post-build', - ] - - stage_strings = { - 'pre-read' : 'Memory before reading SConscript files:', - 'post-read' : 'Memory after reading SConscript files:', - 'pre-build' : 'Memory before building targets:', - 'post-build' : 'Memory after building targets:', - } - - memory_string_all = 'Memory ' - - default_stage = stages[-1] - - time_strings = { - 'total' : 'Total build time', - 'SConscripts' : 'Total SConscript file execution time', - 'SCons' : 'Total SCons execution time', - 'commands' : 'Total command execution time', - } - - time_string_all = 'Total .* time' - - # - - def __init__(self): - self.__dict__.update(self.default_settings) - - # Functions for displaying and executing commands. - - def subst(self, x, dictionary): - try: - return x % dictionary - except TypeError: - # x isn't a string (it's probably a Python function), - # so just return it. - return x - - def subst_variables(self, command, dictionary): - """ - Substitutes (via the format operator) the values in the specified - dictionary into the specified command. - - The command can be an (action, string) tuple. In all cases, we - perform substitution on strings and don't worry if something isn't - a string. (It's probably a Python function to be executed.) - """ - try: - command + '' - except TypeError: - action = command[0] - string = command[1] - args = command[2:] - else: - action = command - string = action - args = (()) - action = self.subst(action, dictionary) - string = self.subst(string, dictionary) - return (action, string, args) - - def _do_not_display(self, msg, *args): - pass - - def display(self, msg, *args): - """ - Displays the specified message. - - Each message is prepended with a standard prefix of our name - plus the time. - """ - if callable(msg): - msg = msg(*args) - else: - msg = msg % args - if msg is None: - return - fmt = '%s[%s]: %s\n' - sys.stdout.write(fmt % (self.name, time.strftime('%H:%M:%S'), msg)) - - def _do_not_execute(self, action, *args): - pass - - def execute(self, action, *args): - """ - Executes the specified action. - - The action is called if it's a callable Python function, and - otherwise passed to os.system(). - """ - if callable(action): - action(*args) - else: - os.system(action % args) - - def run_command_list(self, commands, dict): - """ - Executes a list of commands, substituting values from the - specified dictionary. - """ - commands = [ self.subst_variables(c, dict) for c in commands ] - for action, string, args in commands: - self.display(string, *args) - sys.stdout.flush() - status = self.execute(action, *args) - if status: - sys.exit(status) - - def log_display(self, command, log): - command = self.subst(command, self.__dict__) - if log: - command = self.redirect(command, log) - return command - - def log_execute(self, command, log): - command = self.subst(command, self.__dict__) - output = os.popen(command).read() - if self.verbose: - sys.stdout.write(output) - open(log, 'wb').write(output) - - # - - def archive_splitext(self, path): - """ - Splits an archive name into a filename base and extension. - - This is like os.path.splitext() (which it calls) except that it - also looks for '.tar.gz' and treats it as an atomic extensions. - """ - if path.endswith('.tar.gz'): - return path[:-7], path[-7:] - else: - return os.path.splitext(path) - - def args_to_files(self, args, tail=None): - """ - Takes a list of arguments, expands any glob patterns, and - returns the last "tail" files from the list. - """ - files = [] - for a in args: - g = glob.glob(a) - g.sort() - files.extend(g) - - if tail: - files = files[-tail:] - - return files - - def ascii_table(self, files, columns, - line_function, file_function=lambda x: x, - *args, **kw): - - header_fmt = ' '.join(['%12s'] * len(columns)) - line_fmt = header_fmt + ' %s' - - print header_fmt % columns - - for file in files: - t = line_function(file, *args, **kw) - if t is None: - t = [] - diff = len(columns) - len(t) - if diff > 0: - t += [''] * diff - t.append(file_function(file)) - print line_fmt % tuple(t) - - def collect_results(self, files, function, *args, **kw): - results = {} - - for file in files: - base = os.path.splitext(file)[0] - run, index = string.split(base, '-')[-2:] - - run = int(run) - index = int(index) - - value = function(file, *args, **kw) - - try: - r = results[index] - except KeyError: - r = [] - results[index] = r - r.append((run, value)) - - return results - - def doc_to_help(self, obj): - """ - Translates an object's __doc__ string into help text. - - This strips a consistent number of spaces from each line in the - help text, essentially "outdenting" the text to the left-most - column. - """ - doc = obj.__doc__ - if doc is None: - return '' - return self.outdent(doc) - - def find_next_run_number(self, dir, prefix): - """ - Returns the next run number in a directory for the specified prefix. - - Examines the contents the specified directory for files with the - specified prefix, extracts the run numbers from each file name, - and returns the next run number after the largest it finds. - """ - x = re.compile(re.escape(prefix) + '-([0-9]+).*') - matches = map(lambda e, x=x: x.match(e), os.listdir(dir)) - matches = filter(None, matches) - if not matches: - return 0 - run_numbers = map(lambda m: int(m.group(1)), matches) - return int(max(run_numbers)) + 1 - - def gnuplot_results(self, results, fmt='%s %.3f'): - """ - Prints out a set of results in Gnuplot format. - """ - gp = Gnuplotter(self.title, self.key_location) - - indices = results.keys() - indices.sort() - - for i in indices: - try: - t = self.run_titles[i] - except IndexError: - t = '??? %s ???' % i - results[i].sort() - gp.line(results[i], i+1, t, None, t, fmt=fmt) - - for bar_tuple in self.vertical_bars: - try: - x, type, label, comment = bar_tuple - except ValueError: - x, type, label = bar_tuple - comment = label - gp.vertical_bar(x, type, label, comment) - - gp.draw() - - def logfile_name(self, invocation): - """ - Returns the absolute path of a log file for the specificed - invocation number. - """ - name = self.prefix_run + '-%d.log' % invocation - return os.path.join(self.outdir, name) - - def outdent(self, s): - """ - Strip as many spaces from each line as are found at the beginning - of the first line in the list. - """ - lines = s.split('\n') - if lines[0] == '': - lines = lines[1:] - spaces = re.match(' *', lines[0]).group(0) - def strip_initial_spaces(l, s=spaces): - if l.startswith(spaces): - l = l[len(spaces):] - return l - return '\n'.join([ strip_initial_spaces(l) for l in lines ]) + '\n' - - def profile_name(self, invocation): - """ - Returns the absolute path of a profile file for the specified - invocation number. - """ - name = self.prefix_run + '-%d.prof' % invocation - return os.path.join(self.outdir, name) - - def set_env(self, key, value): - os.environ[key] = value - - # - - def get_debug_times(self, file, time_string=None): - """ - Fetch times from the --debug=time strings in the specified file. - """ - if time_string is None: - search_string = self.time_string_all - else: - search_string = time_string - contents = open(file).read() - if not contents: - sys.stderr.write('file %s has no contents!\n' % repr(file)) - return None - result = re.findall(r'%s: ([\d\.]*)' % search_string, contents)[-4:] - result = [ float(r) for r in result ] - if not time_string is None: - try: - result = result[0] - except IndexError: - sys.stderr.write('file %s has no results!\n' % repr(file)) - return None - return result - - def get_function_profile(self, file, function): - """ - Returns the file, line number, function name, and cumulative time. - """ - try: - import pstats - except ImportError, e: - sys.stderr.write('%s: func: %s\n' % (self.name, e)) - sys.stderr.write('%s This version of Python is missing the profiler.\n' % self.name_spaces) - sys.stderr.write('%s Cannot use the "func" subcommand.\n' % self.name_spaces) - sys.exit(1) - statistics = pstats.Stats(file).stats - matches = [ e for e in statistics.items() if e[0][2] == function ] - r = matches[0] - return r[0][0], r[0][1], r[0][2], r[1][3] - - def get_function_time(self, file, function): - """ - Returns just the cumulative time for the specified function. - """ - return self.get_function_profile(file, function)[3] - - def get_memory(self, file, memory_string=None): - """ - Returns a list of integers of the amount of memory used. The - default behavior is to return all the stages. - """ - if memory_string is None: - search_string = self.memory_string_all - else: - search_string = memory_string - lines = open(file).readlines() - lines = [ l for l in lines if l.startswith(search_string) ][-4:] - result = [ int(l.split()[-1]) for l in lines[-4:] ] - if len(result) == 1: - result = result[0] - return result - - def get_object_counts(self, file, object_name, index=None): - """ - Returns the counts of the specified object_name. - """ - object_string = ' ' + object_name + '\n' - lines = open(file).readlines() - line = [ l for l in lines if l.endswith(object_string) ][0] - result = [ int(field) for field in line.split()[:4] ] - if not index is None: - result = result[index] - return result - - # - - command_alias = {} - - def execute_subcommand(self, argv): - """ - Executes the do_*() function for the specified subcommand (argv[0]). - """ - if not argv: - return - cmdName = self.command_alias.get(argv[0], argv[0]) - try: - func = getattr(self, 'do_' + cmdName) - except AttributeError: - return self.default(argv) - try: - return func(argv) - except TypeError, e: - sys.stderr.write("%s %s: %s\n" % (self.name, cmdName, e)) - import traceback - traceback.print_exc(file=sys.stderr) - sys.stderr.write("Try '%s help %s'\n" % (self.name, cmdName)) - - def default(self, argv): - """ - The default behavior for an unknown subcommand. Prints an - error message and exits. - """ - sys.stderr.write('%s: Unknown subcommand "%s".\n' % (self.name, argv[0])) - sys.stderr.write('Type "%s help" for usage.\n' % self.name) - sys.exit(1) - - # - - def do_help(self, argv): - """ - """ - if argv[1:]: - for arg in argv[1:]: - try: - func = getattr(self, 'do_' + arg) - except AttributeError: - sys.stderr.write('%s: No help for "%s"\n' % (self.name, arg)) - else: - try: - help = getattr(self, 'help_' + arg) - except AttributeError: - sys.stdout.write(self.doc_to_help(func)) - sys.stdout.flush() - else: - help() - else: - doc = self.doc_to_help(self.__class__) - if doc: - sys.stdout.write(doc) - sys.stdout.flush() - return None - - # - - def help_func(self): - help = """\ - Usage: scons-time func [OPTIONS] FILE [...] - - -C DIR, --chdir=DIR Change to DIR before looking for files - -f FILE, --file=FILE Read configuration from specified FILE - --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT - --func=NAME, --function=NAME Report time for function NAME - -h, --help Print this help and exit - -p STRING, --prefix=STRING Use STRING as log file/profile prefix - -t NUMBER, --tail=NUMBER Only report the last NUMBER files - --title=TITLE Specify the output plot TITLE - """ - sys.stdout.write(self.outdent(help)) - sys.stdout.flush() - - def do_func(self, argv): - """ - """ - format = 'ascii' - function_name = '_main' - tail = None - - short_opts = '?C:f:hp:t:' - - long_opts = [ - 'chdir=', - 'file=', - 'fmt=', - 'format=', - 'func=', - 'function=', - 'help', - 'prefix=', - 'tail=', - 'title=', - ] - - opts, args = getopt.getopt(argv[1:], short_opts, long_opts) - - for o, a in opts: - if o in ('-C', '--chdir'): - self.chdir = a - elif o in ('-f', '--file'): - self.config_file = a - elif o in ('--fmt', '--format'): - format = a - elif o in ('--func', '--function'): - function_name = a - elif o in ('-?', '-h', '--help'): - self.do_help(['help', 'func']) - sys.exit(0) - elif o in ('--max',): - max_time = int(a) - elif o in ('-p', '--prefix'): - self.prefix = a - elif o in ('-t', '--tail'): - tail = int(a) - elif o in ('--title',): - self.title = a - - if self.config_file: - execfile(self.config_file, self.__dict__) - - if self.chdir: - os.chdir(self.chdir) - - if not args: - - pattern = '%s*.prof' % self.prefix - args = self.args_to_files([pattern], tail) - - if not args: - if self.chdir: - directory = self.chdir - else: - directory = os.getcwd() - - sys.stderr.write('%s: func: No arguments specified.\n' % self.name) - sys.stderr.write('%s No %s*.prof files found in "%s".\n' % (self.name_spaces, self.prefix, directory)) - sys.stderr.write('%s Type "%s help func" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - else: - - args = self.args_to_files(args, tail) - - cwd_ = os.getcwd() + os.sep - - if format == 'ascii': - - def print_function_timing(file, func): - try: - f, line, func, time = self.get_function_profile(file, func) - except ValueError, e: - sys.stderr.write("%s: func: %s: %s\n" % (self.name, file, e)) - else: - if f.startswith(cwd_): - f = f[len(cwd_):] - print "%.3f %s:%d(%s)" % (time, f, line, func) - - for file in args: - print_function_timing(file, function_name) - - elif format == 'gnuplot': - - results = self.collect_results(args, self.get_function_time, - function_name) - - self.gnuplot_results(results) - - else: - - sys.stderr.write('%s: func: Unknown format "%s".\n' % (self.name, format)) - sys.exit(1) - - # - - def help_mem(self): - help = """\ - Usage: scons-time mem [OPTIONS] FILE [...] - - -C DIR, --chdir=DIR Change to DIR before looking for files - -f FILE, --file=FILE Read configuration from specified FILE - --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT - -h, --help Print this help and exit - -p STRING, --prefix=STRING Use STRING as log file/profile prefix - --stage=STAGE Plot memory at the specified stage: - pre-read, post-read, pre-build, - post-build (default: post-build) - -t NUMBER, --tail=NUMBER Only report the last NUMBER files - --title=TITLE Specify the output plot TITLE - """ - sys.stdout.write(self.outdent(help)) - sys.stdout.flush() - - def do_mem(self, argv): - - format = 'ascii' - logfile_path = lambda x: x - stage = self.default_stage - tail = None - - short_opts = '?C:f:hp:t:' - - long_opts = [ - 'chdir=', - 'file=', - 'fmt=', - 'format=', - 'help', - 'prefix=', - 'stage=', - 'tail=', - 'title=', - ] - - opts, args = getopt.getopt(argv[1:], short_opts, long_opts) - - for o, a in opts: - if o in ('-C', '--chdir'): - self.chdir = a - elif o in ('-f', '--file'): - self.config_file = a - elif o in ('--fmt', '--format'): - format = a - elif o in ('-?', '-h', '--help'): - self.do_help(['help', 'mem']) - sys.exit(0) - elif o in ('-p', '--prefix'): - self.prefix = a - elif o in ('--stage',): - if not a in self.stages: - sys.stderr.write('%s: mem: Unrecognized stage "%s".\n' % (self.name, a)) - sys.exit(1) - stage = a - elif o in ('-t', '--tail'): - tail = int(a) - elif o in ('--title',): - self.title = a - - if self.config_file: - execfile(self.config_file, self.__dict__) - - if self.chdir: - os.chdir(self.chdir) - logfile_path = lambda x, c=self.chdir: os.path.join(c, x) - - if not args: - - pattern = '%s*.log' % self.prefix - args = self.args_to_files([pattern], tail) - - if not args: - if self.chdir: - directory = self.chdir - else: - directory = os.getcwd() - - sys.stderr.write('%s: mem: No arguments specified.\n' % self.name) - sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory)) - sys.stderr.write('%s Type "%s help mem" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - else: - - args = self.args_to_files(args, tail) - - cwd_ = os.getcwd() + os.sep - - if format == 'ascii': - - self.ascii_table(args, tuple(self.stages), self.get_memory, logfile_path) - - elif format == 'gnuplot': - - results = self.collect_results(args, self.get_memory, - self.stage_strings[stage]) - - self.gnuplot_results(results) - - else: - - sys.stderr.write('%s: mem: Unknown format "%s".\n' % (self.name, format)) - sys.exit(1) - - return 0 - - # - - def help_obj(self): - help = """\ - Usage: scons-time obj [OPTIONS] OBJECT FILE [...] - - -C DIR, --chdir=DIR Change to DIR before looking for files - -f FILE, --file=FILE Read configuration from specified FILE - --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT - -h, --help Print this help and exit - -p STRING, --prefix=STRING Use STRING as log file/profile prefix - --stage=STAGE Plot memory at the specified stage: - pre-read, post-read, pre-build, - post-build (default: post-build) - -t NUMBER, --tail=NUMBER Only report the last NUMBER files - --title=TITLE Specify the output plot TITLE - """ - sys.stdout.write(self.outdent(help)) - sys.stdout.flush() - - def do_obj(self, argv): - - format = 'ascii' - logfile_path = lambda x: x - stage = self.default_stage - tail = None - - short_opts = '?C:f:hp:t:' - - long_opts = [ - 'chdir=', - 'file=', - 'fmt=', - 'format=', - 'help', - 'prefix=', - 'stage=', - 'tail=', - 'title=', - ] - - opts, args = getopt.getopt(argv[1:], short_opts, long_opts) - - for o, a in opts: - if o in ('-C', '--chdir'): - self.chdir = a - elif o in ('-f', '--file'): - self.config_file = a - elif o in ('--fmt', '--format'): - format = a - elif o in ('-?', '-h', '--help'): - self.do_help(['help', 'obj']) - sys.exit(0) - elif o in ('-p', '--prefix'): - self.prefix = a - elif o in ('--stage',): - if not a in self.stages: - sys.stderr.write('%s: obj: Unrecognized stage "%s".\n' % (self.name, a)) - sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - stage = a - elif o in ('-t', '--tail'): - tail = int(a) - elif o in ('--title',): - self.title = a - - if not args: - sys.stderr.write('%s: obj: Must specify an object name.\n' % self.name) - sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - object_name = args.pop(0) - - if self.config_file: - execfile(self.config_file, self.__dict__) - - if self.chdir: - os.chdir(self.chdir) - logfile_path = lambda x, c=self.chdir: os.path.join(c, x) - - if not args: - - pattern = '%s*.log' % self.prefix - args = self.args_to_files([pattern], tail) - - if not args: - if self.chdir: - directory = self.chdir - else: - directory = os.getcwd() - - sys.stderr.write('%s: obj: No arguments specified.\n' % self.name) - sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory)) - sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - else: - - args = self.args_to_files(args, tail) - - cwd_ = os.getcwd() + os.sep - - if format == 'ascii': - - self.ascii_table(args, tuple(self.stages), self.get_object_counts, logfile_path, object_name) - - elif format == 'gnuplot': - - stage_index = 0 - for s in self.stages: - if stage == s: - break - stage_index = stage_index + 1 - - results = self.collect_results(args, self.get_object_counts, - object_name, stage_index) - - self.gnuplot_results(results) - - else: - - sys.stderr.write('%s: obj: Unknown format "%s".\n' % (self.name, format)) - sys.exit(1) - - return 0 - - # - - def help_run(self): - help = """\ - Usage: scons-time run [OPTIONS] [FILE ...] - - --aegis=PROJECT Use SCons from the Aegis PROJECT - --chdir=DIR Name of unpacked directory for chdir - -f FILE, --file=FILE Read configuration from specified FILE - -h, --help Print this help and exit - -n, --no-exec No execute, just print command lines - --number=NUMBER Put output in files for run NUMBER - --outdir=OUTDIR Put output files in OUTDIR - -p STRING, --prefix=STRING Use STRING as log file/profile prefix - --python=PYTHON Time using the specified PYTHON - -q, --quiet Don't print command lines - --scons=SCONS Time using the specified SCONS - --svn=URL, --subversion=URL Use SCons from Subversion URL - -v, --verbose Display output of commands - """ - sys.stdout.write(self.outdent(help)) - sys.stdout.flush() - - def do_run(self, argv): - """ - """ - run_number_list = [None] - - short_opts = '?f:hnp:qs:v' - - long_opts = [ - 'aegis=', - 'file=', - 'help', - 'no-exec', - 'number=', - 'outdir=', - 'prefix=', - 'python=', - 'quiet', - 'scons=', - 'svn=', - 'subdir=', - 'subversion=', - 'verbose', - ] - - opts, args = getopt.getopt(argv[1:], short_opts, long_opts) - - for o, a in opts: - if o in ('--aegis',): - self.aegis_project = a - elif o in ('-f', '--file'): - self.config_file = a - elif o in ('-?', '-h', '--help'): - self.do_help(['help', 'run']) - sys.exit(0) - elif o in ('-n', '--no-exec'): - self.execute = self._do_not_execute - elif o in ('--number',): - run_number_list = self.split_run_numbers(a) - elif o in ('--outdir',): - self.outdir = a - elif o in ('-p', '--prefix'): - self.prefix = a - elif o in ('--python',): - self.python = a - elif o in ('-q', '--quiet'): - self.display = self._do_not_display - elif o in ('-s', '--subdir'): - self.subdir = a - elif o in ('--scons',): - self.scons = a - elif o in ('--svn', '--subversion'): - self.subversion_url = a - elif o in ('-v', '--verbose'): - self.redirect = tee_to_file - self.verbose = True - self.svn_co_flag = '' - - if not args and not self.config_file: - sys.stderr.write('%s: run: No arguments or -f config file specified.\n' % self.name) - sys.stderr.write('%s Type "%s help run" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - if self.config_file: - execfile(self.config_file, self.__dict__) - - if args: - self.archive_list = args - - archive_file_name = os.path.split(self.archive_list[0])[1] - - if not self.subdir: - self.subdir = self.archive_splitext(archive_file_name)[0] - - if not self.prefix: - self.prefix = self.archive_splitext(archive_file_name)[0] - - prepare = None - if self.subversion_url: - prepare = self.prep_subversion_run - elif self.aegis_project: - prepare = self.prep_aegis_run - - for run_number in run_number_list: - self.individual_run(run_number, self.archive_list, prepare) - - def split_run_numbers(self, s): - result = [] - for n in s.split(','): - try: - x, y = n.split('-') - except ValueError: - result.append(int(n)) - else: - result.extend(range(int(x), int(y)+1)) - return result - - def scons_path(self, dir): - return os.path.join(dir, 'src', 'script', 'scons.py') - - def scons_lib_dir_path(self, dir): - return os.path.join(dir, 'src', 'engine') - - def prep_aegis_run(self, commands, removals): - self.aegis_tmpdir = make_temp_file(prefix = self.name + '-aegis-') - removals.append((shutil.rmtree, 'rm -rf %%s', self.aegis_tmpdir)) - - self.aegis_parent_project = os.path.splitext(self.aegis_project)[0] - self.scons = self.scons_path(self.aegis_tmpdir) - self.scons_lib_dir = self.scons_lib_dir_path(self.aegis_tmpdir) - - commands.extend([ - 'mkdir %(aegis_tmpdir)s', - (lambda: os.chdir(self.aegis_tmpdir), 'cd %(aegis_tmpdir)s'), - '%(aegis)s -cp -ind -p %(aegis_parent_project)s .', - '%(aegis)s -cp -ind -p %(aegis_project)s -delta %(run_number)s .', - ]) - - def prep_subversion_run(self, commands, removals): - self.svn_tmpdir = make_temp_file(prefix = self.name + '-svn-') - removals.append((shutil.rmtree, 'rm -rf %%s', self.svn_tmpdir)) - - self.scons = self.scons_path(self.svn_tmpdir) - self.scons_lib_dir = self.scons_lib_dir_path(self.svn_tmpdir) - - commands.extend([ - 'mkdir %(svn_tmpdir)s', - '%(svn)s co %(svn_co_flag)s -r %(run_number)s %(subversion_url)s %(svn_tmpdir)s', - ]) - - def individual_run(self, run_number, archive_list, prepare=None): - """ - Performs an individual run of the default SCons invocations. - """ - - commands = [] - removals = [] - - if prepare: - prepare(commands, removals) - - save_scons = self.scons - save_scons_wrapper = self.scons_wrapper - save_scons_lib_dir = self.scons_lib_dir - - if self.outdir is None: - self.outdir = self.orig_cwd - elif not os.path.isabs(self.outdir): - self.outdir = os.path.join(self.orig_cwd, self.outdir) - - if self.scons is None: - self.scons = self.scons_path(self.orig_cwd) - - if self.scons_lib_dir is None: - self.scons_lib_dir = self.scons_lib_dir_path(self.orig_cwd) - - if self.scons_wrapper is None: - self.scons_wrapper = self.scons - - if not run_number: - run_number = self.find_next_run_number(self.outdir, self.prefix) - - self.run_number = str(run_number) - - self.prefix_run = self.prefix + '-%03d' % run_number - - if self.targets0 is None: - self.targets0 = self.startup_targets - if self.targets1 is None: - self.targets1 = self.targets - if self.targets2 is None: - self.targets2 = self.targets - - self.tmpdir = make_temp_file(prefix = self.name + '-') - - commands.extend([ - 'mkdir %(tmpdir)s', - - (os.chdir, 'cd %%s', self.tmpdir), - ]) - - for archive in archive_list: - if not os.path.isabs(archive): - archive = os.path.join(self.orig_cwd, archive) - if os.path.isdir(archive): - dest = os.path.split(archive)[1] - commands.append((shutil.copytree, 'cp -r %%s %%s', archive, dest)) - else: - suffix = self.archive_splitext(archive)[1] - unpack_command = self.unpack_map.get(suffix) - if not unpack_command: - dest = os.path.split(archive)[1] - commands.append((shutil.copyfile, 'cp %%s %%s', archive, dest)) - else: - commands.append(unpack_command + (archive,)) - - commands.extend([ - (os.chdir, 'cd %%s', self.subdir), - ]) - - commands.extend(self.initial_commands) - - commands.extend([ - (lambda: read_tree('.'), - 'find * -type f | xargs cat > /dev/null'), - - (self.set_env, 'export %%s=%%s', - 'SCONS_LIB_DIR', self.scons_lib_dir), - - '%(python)s %(scons_wrapper)s --version', - ]) - - index = 0 - for run_command in self.run_commands: - setattr(self, 'prof%d' % index, self.profile_name(index)) - c = ( - self.log_execute, - self.log_display, - run_command, - self.logfile_name(index), - ) - commands.append(c) - index = index + 1 - - commands.extend([ - (os.chdir, 'cd %%s', self.orig_cwd), - ]) - - if not os.environ.get('PRESERVE'): - commands.extend(removals) - - commands.append((shutil.rmtree, 'rm -rf %%s', self.tmpdir)) - - self.run_command_list(commands, self.__dict__) - - self.scons = save_scons - self.scons_lib_dir = save_scons_lib_dir - self.scons_wrapper = save_scons_wrapper - - # - - def help_time(self): - help = """\ - Usage: scons-time time [OPTIONS] FILE [...] - - -C DIR, --chdir=DIR Change to DIR before looking for files - -f FILE, --file=FILE Read configuration from specified FILE - --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT - -h, --help Print this help and exit - -p STRING, --prefix=STRING Use STRING as log file/profile prefix - -t NUMBER, --tail=NUMBER Only report the last NUMBER files - --which=TIMER Plot timings for TIMER: total, - SConscripts, SCons, commands. - """ - sys.stdout.write(self.outdent(help)) - sys.stdout.flush() - - def do_time(self, argv): - - format = 'ascii' - logfile_path = lambda x: x - tail = None - which = 'total' - - short_opts = '?C:f:hp:t:' - - long_opts = [ - 'chdir=', - 'file=', - 'fmt=', - 'format=', - 'help', - 'prefix=', - 'tail=', - 'title=', - 'which=', - ] - - opts, args = getopt.getopt(argv[1:], short_opts, long_opts) - - for o, a in opts: - if o in ('-C', '--chdir'): - self.chdir = a - elif o in ('-f', '--file'): - self.config_file = a - elif o in ('--fmt', '--format'): - format = a - elif o in ('-?', '-h', '--help'): - self.do_help(['help', 'time']) - sys.exit(0) - elif o in ('-p', '--prefix'): - self.prefix = a - elif o in ('-t', '--tail'): - tail = int(a) - elif o in ('--title',): - self.title = a - elif o in ('--which',): - if not a in self.time_strings.keys(): - sys.stderr.write('%s: time: Unrecognized timer "%s".\n' % (self.name, a)) - sys.stderr.write('%s Type "%s help time" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - which = a - - if self.config_file: - execfile(self.config_file, self.__dict__) - - if self.chdir: - os.chdir(self.chdir) - logfile_path = lambda x, c=self.chdir: os.path.join(c, x) - - if not args: - - pattern = '%s*.log' % self.prefix - args = self.args_to_files([pattern], tail) - - if not args: - if self.chdir: - directory = self.chdir - else: - directory = os.getcwd() - - sys.stderr.write('%s: time: No arguments specified.\n' % self.name) - sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory)) - sys.stderr.write('%s Type "%s help time" for help.\n' % (self.name_spaces, self.name)) - sys.exit(1) - - else: - - args = self.args_to_files(args, tail) - - cwd_ = os.getcwd() + os.sep - - if format == 'ascii': - - columns = ("Total", "SConscripts", "SCons", "commands") - self.ascii_table(args, columns, self.get_debug_times, logfile_path) - - elif format == 'gnuplot': - - results = self.collect_results(args, self.get_debug_times, - self.time_strings[which]) - - self.gnuplot_results(results, fmt='%s %.6f') - - else: - - sys.stderr.write('%s: time: Unknown format "%s".\n' % (self.name, format)) - sys.exit(1) - -if __name__ == '__main__': - opts, args = getopt.getopt(sys.argv[1:], 'h?V', ['help', 'version']) - - ST = SConsTimer() - - for o, a in opts: - if o in ('-?', '-h', '--help'): - ST.do_help(['help']) - sys.exit(0) - elif o in ('-V', '--version'): - sys.stdout.write('scons-time version\n') - sys.exit(0) - - if not args: - sys.stderr.write('Type "%s help" for usage.\n' % ST.name) - sys.exit(1) - - ST.execute_subcommand(args) diff --git a/vendor/scons/scons-1.2.0/scons.py b/vendor/scons/scons-1.2.0/scons.py deleted file mode 100755 index 88276a47e..000000000 --- a/vendor/scons/scons-1.2.0/scons.py +++ /dev/null @@ -1,165 +0,0 @@ -#! /usr/bin/env python -# -# SCons - a Software Constructor -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/script/scons.py 3842 2008/12/20 22:59:52 scons" - -__version__ = "1.2.0" - -__build__ = "r3842" - -__buildsys__ = "scons-dev" - -__date__ = "2008/12/20 22:59:52" - -__developer__ = "scons" - -import os -import os.path -import sys - -############################################################################## -# BEGIN STANDARD SCons SCRIPT HEADER -# -# This is the cut-and-paste logic so that a self-contained script can -# interoperate correctly with different SCons versions and installation -# locations for the engine. If you modify anything in this section, you -# should also change other scripts that use this same header. -############################################################################## - -# Strip the script directory from sys.path() so on case-insensitive -# (WIN32) systems Python doesn't think that the "scons" script is the -# "SCons" package. Replace it with our own library directories -# (version-specific first, in case they installed by hand there, -# followed by generic) so we pick up the right version of the build -# engine modules if they're in either directory. - -script_dir = sys.path[0] - -if script_dir in sys.path: - sys.path.remove(script_dir) - -libs = [] - -if os.environ.has_key("SCONS_LIB_DIR"): - libs.append(os.environ["SCONS_LIB_DIR"]) - -local_version = 'scons-local-' + __version__ -local = 'scons-local' -if script_dir: - local_version = os.path.join(script_dir, local_version) - local = os.path.join(script_dir, local) -libs.append(os.path.abspath(local_version)) -libs.append(os.path.abspath(local)) - -scons_version = 'scons-%s' % __version__ - -prefs = [] - -if sys.platform == 'win32': - # sys.prefix is (likely) C:\Python*; - # check only C:\Python*. - prefs.append(sys.prefix) - prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages')) -else: - # On other (POSIX) platforms, things are more complicated due to - # the variety of path names and library locations. Try to be smart - # about it. - if script_dir == 'bin': - # script_dir is `pwd`/bin; - # check `pwd`/lib/scons*. - prefs.append(os.getcwd()) - else: - if script_dir == '.' or script_dir == '': - script_dir = os.getcwd() - head, tail = os.path.split(script_dir) - if tail == "bin": - # script_dir is /foo/bin; - # check /foo/lib/scons*. - prefs.append(head) - - head, tail = os.path.split(sys.prefix) - if tail == "usr": - # sys.prefix is /foo/usr; - # check /foo/usr/lib/scons* first, - # then /foo/usr/local/lib/scons*. - prefs.append(sys.prefix) - prefs.append(os.path.join(sys.prefix, "local")) - elif tail == "local": - h, t = os.path.split(head) - if t == "usr": - # sys.prefix is /foo/usr/local; - # check /foo/usr/local/lib/scons* first, - # then /foo/usr/lib/scons*. - prefs.append(sys.prefix) - prefs.append(head) - else: - # sys.prefix is /foo/local; - # check only /foo/local/lib/scons*. - prefs.append(sys.prefix) - else: - # sys.prefix is /foo (ends in neither /usr or /local); - # check only /foo/lib/scons*. - prefs.append(sys.prefix) - - temp = map(lambda x: os.path.join(x, 'lib'), prefs) - temp.extend(map(lambda x: os.path.join(x, - 'lib', - 'python' + sys.version[:3], - 'site-packages'), - prefs)) - prefs = temp - - # Add the parent directory of the current python's library to the - # preferences. On SuSE-91/AMD64, for example, this is /usr/lib64, - # not /usr/lib. - try: - libpath = os.__file__ - except AttributeError: - pass - else: - # Split /usr/libfoo/python*/os.py to /usr/libfoo/python*. - libpath, tail = os.path.split(libpath) - # Split /usr/libfoo/python* to /usr/libfoo - libpath, tail = os.path.split(libpath) - # Check /usr/libfoo/scons*. - prefs.append(libpath) - -# Look first for 'scons-__version__' in all of our preference libs, -# then for 'scons'. -libs.extend(map(lambda x: os.path.join(x, scons_version), prefs)) -libs.extend(map(lambda x: os.path.join(x, 'scons'), prefs)) - -sys.path = libs + sys.path - -############################################################################## -# END STANDARD SCons SCRIPT HEADER -############################################################################## - -if __name__ == "__main__": - import SCons.Script - # this does all the work, and calls sys.exit - # with the proper exit status when done. - SCons.Script.main() diff --git a/vendor/scons/scons-1.2.0/sconsign.py b/vendor/scons/scons-1.2.0/sconsign.py deleted file mode 100755 index a33b7b422..000000000 --- a/vendor/scons/scons-1.2.0/sconsign.py +++ /dev/null @@ -1,502 +0,0 @@ -#! /usr/bin/env python -# -# SCons - a Software Constructor -# -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__revision__ = "src/script/sconsign.py 3842 2008/12/20 22:59:52 scons" - -__version__ = "1.2.0" - -__build__ = "r3842" - -__buildsys__ = "scons-dev" - -__date__ = "2008/12/20 22:59:52" - -__developer__ = "scons" - -import os -import os.path -import sys -import time - -############################################################################## -# BEGIN STANDARD SCons SCRIPT HEADER -# -# This is the cut-and-paste logic so that a self-contained script can -# interoperate correctly with different SCons versions and installation -# locations for the engine. If you modify anything in this section, you -# should also change other scripts that use this same header. -############################################################################## - -# Strip the script directory from sys.path() so on case-insensitive -# (WIN32) systems Python doesn't think that the "scons" script is the -# "SCons" package. Replace it with our own library directories -# (version-specific first, in case they installed by hand there, -# followed by generic) so we pick up the right version of the build -# engine modules if they're in either directory. - -script_dir = sys.path[0] - -if script_dir in sys.path: - sys.path.remove(script_dir) - -libs = [] - -if os.environ.has_key("SCONS_LIB_DIR"): - libs.append(os.environ["SCONS_LIB_DIR"]) - -local_version = 'scons-local-' + __version__ -local = 'scons-local' -if script_dir: - local_version = os.path.join(script_dir, local_version) - local = os.path.join(script_dir, local) -libs.append(os.path.abspath(local_version)) -libs.append(os.path.abspath(local)) - -scons_version = 'scons-%s' % __version__ - -prefs = [] - -if sys.platform == 'win32': - # sys.prefix is (likely) C:\Python*; - # check only C:\Python*. - prefs.append(sys.prefix) - prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages')) -else: - # On other (POSIX) platforms, things are more complicated due to - # the variety of path names and library locations. Try to be smart - # about it. - if script_dir == 'bin': - # script_dir is `pwd`/bin; - # check `pwd`/lib/scons*. - prefs.append(os.getcwd()) - else: - if script_dir == '.' or script_dir == '': - script_dir = os.getcwd() - head, tail = os.path.split(script_dir) - if tail == "bin": - # script_dir is /foo/bin; - # check /foo/lib/scons*. - prefs.append(head) - - head, tail = os.path.split(sys.prefix) - if tail == "usr": - # sys.prefix is /foo/usr; - # check /foo/usr/lib/scons* first, - # then /foo/usr/local/lib/scons*. - prefs.append(sys.prefix) - prefs.append(os.path.join(sys.prefix, "local")) - elif tail == "local": - h, t = os.path.split(head) - if t == "usr": - # sys.prefix is /foo/usr/local; - # check /foo/usr/local/lib/scons* first, - # then /foo/usr/lib/scons*. - prefs.append(sys.prefix) - prefs.append(head) - else: - # sys.prefix is /foo/local; - # check only /foo/local/lib/scons*. - prefs.append(sys.prefix) - else: - # sys.prefix is /foo (ends in neither /usr or /local); - # check only /foo/lib/scons*. - prefs.append(sys.prefix) - - temp = map(lambda x: os.path.join(x, 'lib'), prefs) - temp.extend(map(lambda x: os.path.join(x, - 'lib', - 'python' + sys.version[:3], - 'site-packages'), - prefs)) - prefs = temp - - # Add the parent directory of the current python's library to the - # preferences. On SuSE-91/AMD64, for example, this is /usr/lib64, - # not /usr/lib. - try: - libpath = os.__file__ - except AttributeError: - pass - else: - # Split /usr/libfoo/python*/os.py to /usr/libfoo/python*. - libpath, tail = os.path.split(libpath) - # Split /usr/libfoo/python* to /usr/libfoo - libpath, tail = os.path.split(libpath) - # Check /usr/libfoo/scons*. - prefs.append(libpath) - -# Look first for 'scons-__version__' in all of our preference libs, -# then for 'scons'. -libs.extend(map(lambda x: os.path.join(x, scons_version), prefs)) -libs.extend(map(lambda x: os.path.join(x, 'scons'), prefs)) - -sys.path = libs + sys.path - -############################################################################## -# END STANDARD SCons SCRIPT HEADER -############################################################################## - -import cPickle -import imp -import string -import whichdb - -import SCons.SConsign - -def my_whichdb(filename): - if filename[-7:] == ".dblite": - return "SCons.dblite" - try: - f = open(filename + ".dblite", "rb") - f.close() - return "SCons.dblite" - except IOError: - pass - return _orig_whichdb(filename) - -_orig_whichdb = whichdb.whichdb -whichdb.whichdb = my_whichdb - -def my_import(mname): - if '.' in mname: - i = string.rfind(mname, '.') - parent = my_import(mname[:i]) - fp, pathname, description = imp.find_module(mname[i+1:], - parent.__path__) - else: - fp, pathname, description = imp.find_module(mname) - return imp.load_module(mname, fp, pathname, description) - -class Flagger: - default_value = 1 - def __setitem__(self, item, value): - self.__dict__[item] = value - self.default_value = 0 - def __getitem__(self, item): - return self.__dict__.get(item, self.default_value) - -Do_Call = None -Print_Directories = [] -Print_Entries = [] -Print_Flags = Flagger() -Verbose = 0 -Readable = 0 - -def default_mapper(entry, name): - try: - val = eval("entry."+name) - except: - val = None - return str(val) - -def map_action(entry, name): - try: - bact = entry.bact - bactsig = entry.bactsig - except AttributeError: - return None - return '%s [%s]' % (bactsig, bact) - -def map_timestamp(entry, name): - try: - timestamp = entry.timestamp - except AttributeError: - timestamp = None - if Readable and timestamp: - return "'" + time.ctime(timestamp) + "'" - else: - return str(timestamp) - -def map_bkids(entry, name): - try: - bkids = entry.bsources + entry.bdepends + entry.bimplicit - bkidsigs = entry.bsourcesigs + entry.bdependsigs + entry.bimplicitsigs - except AttributeError: - return None - result = [] - for i in xrange(len(bkids)): - result.append(nodeinfo_string(bkids[i], bkidsigs[i], " ")) - if result == []: - return None - return string.join(result, "\n ") - -map_field = { - 'action' : map_action, - 'timestamp' : map_timestamp, - 'bkids' : map_bkids, -} - -map_name = { - 'implicit' : 'bkids', -} - -def field(name, entry, verbose=Verbose): - if not Print_Flags[name]: - return None - fieldname = map_name.get(name, name) - mapper = map_field.get(fieldname, default_mapper) - val = mapper(entry, name) - if verbose: - val = name + ": " + val - return val - -def nodeinfo_raw(name, ninfo, prefix=""): - # This just formats the dictionary, which we would normally use str() - # to do, except that we want the keys sorted for deterministic output. - d = ninfo.__dict__ - try: - keys = ninfo.field_list + ['_version_id'] - except AttributeError: - keys = d.keys() - keys.sort() - l = [] - for k in keys: - l.append('%s: %s' % (repr(k), repr(d.get(k)))) - if '\n' in name: - name = repr(name) - return name + ': {' + string.join(l, ', ') + '}' - -def nodeinfo_cooked(name, ninfo, prefix=""): - try: - field_list = ninfo.field_list - except AttributeError: - field_list = [] - f = lambda x, ni=ninfo, v=Verbose: field(x, ni, v) - if '\n' in name: - name = repr(name) - outlist = [name+':'] + filter(None, map(f, field_list)) - if Verbose: - sep = '\n ' + prefix - else: - sep = ' ' - return string.join(outlist, sep) - -nodeinfo_string = nodeinfo_cooked - -def printfield(name, entry, prefix=""): - outlist = field("implicit", entry, 0) - if outlist: - if Verbose: - print " implicit:" - print " " + outlist - outact = field("action", entry, 0) - if outact: - if Verbose: - print " action: " + outact - else: - print " " + outact - -def printentries(entries, location): - if Print_Entries: - for name in Print_Entries: - try: - entry = entries[name] - except KeyError: - sys.stderr.write("sconsign: no entry `%s' in `%s'\n" % (name, location)) - else: - try: - ninfo = entry.ninfo - except AttributeError: - print name + ":" - else: - print nodeinfo_string(name, entry.ninfo) - printfield(name, entry.binfo) - else: - names = entries.keys() - names.sort() - for name in names: - entry = entries[name] - try: - ninfo = entry.ninfo - except AttributeError: - print name + ":" - else: - print nodeinfo_string(name, entry.ninfo) - printfield(name, entry.binfo) - -class Do_SConsignDB: - def __init__(self, dbm_name, dbm): - self.dbm_name = dbm_name - self.dbm = dbm - - def __call__(self, fname): - # The *dbm modules stick their own file suffixes on the names - # that are passed in. This is causes us to jump through some - # hoops here to be able to allow the user - try: - # Try opening the specified file name. Example: - # SPECIFIED OPENED BY self.dbm.open() - # --------- ------------------------- - # .sconsign => .sconsign.dblite - # .sconsign.dblite => .sconsign.dblite.dblite - db = self.dbm.open(fname, "r") - except (IOError, OSError), e: - print_e = e - try: - # That didn't work, so try opening the base name, - # so that if the actually passed in 'sconsign.dblite' - # (for example), the dbm module will put the suffix back - # on for us and open it anyway. - db = self.dbm.open(os.path.splitext(fname)[0], "r") - except (IOError, OSError): - # That didn't work either. See if the file name - # they specified just exists (independent of the dbm - # suffix-mangling). - try: - open(fname, "r") - except (IOError, OSError), e: - # Nope, that file doesn't even exist, so report that - # fact back. - print_e = e - sys.stderr.write("sconsign: %s\n" % (print_e)) - return - except KeyboardInterrupt: - raise - except cPickle.UnpicklingError: - sys.stderr.write("sconsign: ignoring invalid `%s' file `%s'\n" % (self.dbm_name, fname)) - return - except Exception, e: - sys.stderr.write("sconsign: ignoring invalid `%s' file `%s': %s\n" % (self.dbm_name, fname, e)) - return - - if Print_Directories: - for dir in Print_Directories: - try: - val = db[dir] - except KeyError: - sys.stderr.write("sconsign: no dir `%s' in `%s'\n" % (dir, args[0])) - else: - self.printentries(dir, val) - else: - keys = db.keys() - keys.sort() - for dir in keys: - self.printentries(dir, db[dir]) - - def printentries(self, dir, val): - print '=== ' + dir + ':' - printentries(cPickle.loads(val), dir) - -def Do_SConsignDir(name): - try: - fp = open(name, 'rb') - except (IOError, OSError), e: - sys.stderr.write("sconsign: %s\n" % (e)) - return - try: - sconsign = SCons.SConsign.Dir(fp) - except KeyboardInterrupt: - raise - except cPickle.UnpicklingError: - sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s'\n" % (name)) - return - except Exception, e: - sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s': %s\n" % (name, e)) - return - printentries(sconsign.entries, args[0]) - -############################################################################## - -import getopt - -helpstr = """\ -Usage: sconsign [OPTIONS] FILE [...] -Options: - -a, --act, --action Print build action information. - -c, --csig Print content signature information. - -d DIR, --dir=DIR Print only info about DIR. - -e ENTRY, --entry=ENTRY Print only info about ENTRY. - -f FORMAT, --format=FORMAT FILE is in the specified FORMAT. - -h, --help Print this message and exit. - -i, --implicit Print implicit dependency information. - -r, --readable Print timestamps in human-readable form. - --raw Print raw Python object representations. - -s, --size Print file sizes. - -t, --timestamp Print timestamp information. - -v, --verbose Verbose, describe each field. -""" - -opts, args = getopt.getopt(sys.argv[1:], "acd:e:f:hirstv", - ['act', 'action', - 'csig', 'dir=', 'entry=', - 'format=', 'help', 'implicit', - 'raw', 'readable', - 'size', 'timestamp', 'verbose']) - - -for o, a in opts: - if o in ('-a', '--act', '--action'): - Print_Flags['action'] = 1 - elif o in ('-c', '--csig'): - Print_Flags['csig'] = 1 - elif o in ('-d', '--dir'): - Print_Directories.append(a) - elif o in ('-e', '--entry'): - Print_Entries.append(a) - elif o in ('-f', '--format'): - Module_Map = {'dblite' : 'SCons.dblite', - 'sconsign' : None} - dbm_name = Module_Map.get(a, a) - if dbm_name: - try: - dbm = my_import(dbm_name) - except: - sys.stderr.write("sconsign: illegal file format `%s'\n" % a) - print helpstr - sys.exit(2) - Do_Call = Do_SConsignDB(a, dbm) - else: - Do_Call = Do_SConsignDir - elif o in ('-h', '--help'): - print helpstr - sys.exit(0) - elif o in ('-i', '--implicit'): - Print_Flags['implicit'] = 1 - elif o in ('--raw',): - nodeinfo_string = nodeinfo_raw - elif o in ('-r', '--readable'): - Readable = 1 - elif o in ('-s', '--size'): - Print_Flags['size'] = 1 - elif o in ('-t', '--timestamp'): - Print_Flags['timestamp'] = 1 - elif o in ('-v', '--verbose'): - Verbose = 1 - -if Do_Call: - for a in args: - Do_Call(a) -else: - for a in args: - dbm_name = whichdb.whichdb(a) - if dbm_name: - Map_Module = {'SCons.dblite' : 'dblite'} - dbm = my_import(dbm_name) - Do_SConsignDB(Map_Module.get(dbm_name, dbm_name), dbm)(a) - else: - Do_SConsignDir(a) - -sys.exit(0)